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/06/05 14:48:47 UTC
[01/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Repository: hbase-site
Updated Branches:
refs/heads/asf-site cddd30637 -> 3469cbc0b
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html
index 338eb9c..55713d8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html
@@ -401,10 +401,10 @@
<span class="sourceLineNo">393</span> " failed when creating the node for " + destServerName,<a name="line.393"></a>
<span class="sourceLineNo">394</span> e);<a name="line.394"></a>
<span class="sourceLineNo">395</span> }<a name="line.395"></a>
-<span class="sourceLineNo">396</span> try {<a name="line.396"></a>
-<span class="sourceLineNo">397</span> String oldQueueNode = getQueueNode(sourceServerName, queueId);<a name="line.397"></a>
-<span class="sourceLineNo">398</span> List<String> wals = ZKUtil.listChildrenNoWatch(zookeeper, oldQueueNode);<a name="line.398"></a>
-<span class="sourceLineNo">399</span> String newQueueId = queueId + "-" + sourceServerName;<a name="line.399"></a>
+<span class="sourceLineNo">396</span> String newQueueId = queueId + "-" + sourceServerName;<a name="line.396"></a>
+<span class="sourceLineNo">397</span> try {<a name="line.397"></a>
+<span class="sourceLineNo">398</span> String oldQueueNode = getQueueNode(sourceServerName, queueId);<a name="line.398"></a>
+<span class="sourceLineNo">399</span> List<String> wals = ZKUtil.listChildrenNoWatch(zookeeper, oldQueueNode);<a name="line.399"></a>
<span class="sourceLineNo">400</span> if (CollectionUtils.isEmpty(wals)) {<a name="line.400"></a>
<span class="sourceLineNo">401</span> ZKUtil.deleteNodeFailSilent(zookeeper, oldQueueNode);<a name="line.401"></a>
<span class="sourceLineNo">402</span> LOG.info("Removed empty {}/{}", sourceServerName, queueId);<a name="line.402"></a>
@@ -435,254 +435,255 @@
<span class="sourceLineNo">427</span> return new Pair<>(newQueueId, logQueue);<a name="line.427"></a>
<span class="sourceLineNo">428</span> } catch (NoNodeException | NodeExistsException | NotEmptyException | BadVersionException e) {<a name="line.428"></a>
<span class="sourceLineNo">429</span> // Multi call failed; it looks like some other regionserver took away the logs.<a name="line.429"></a>
-<span class="sourceLineNo">430</span> // These exceptions mean that zk tells us the request can not be execute so it is safe to just<a name="line.430"></a>
-<span class="sourceLineNo">431</span> // return a null. For other types of exception should be thrown out to notify the upper layer.<a name="line.431"></a>
-<span class="sourceLineNo">432</span> LOG.info("Claim queue queueId={} from {} to {} failed with {}, someone else took the log?",<a name="line.432"></a>
-<span class="sourceLineNo">433</span> queueId,sourceServerName, destServerName, e.toString());<a name="line.433"></a>
-<span class="sourceLineNo">434</span> return null;<a name="line.434"></a>
-<span class="sourceLineNo">435</span> } catch (KeeperException | InterruptedException e) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span> throw new ReplicationException("Claim queue queueId=" + queueId + " from " +<a name="line.436"></a>
-<span class="sourceLineNo">437</span> sourceServerName + " to " + destServerName + " failed", e);<a name="line.437"></a>
-<span class="sourceLineNo">438</span> }<a name="line.438"></a>
-<span class="sourceLineNo">439</span> }<a name="line.439"></a>
-<span class="sourceLineNo">440</span><a name="line.440"></a>
-<span class="sourceLineNo">441</span> @Override<a name="line.441"></a>
-<span class="sourceLineNo">442</span> public void removeReplicatorIfQueueIsEmpty(ServerName serverName) throws ReplicationException {<a name="line.442"></a>
-<span class="sourceLineNo">443</span> try {<a name="line.443"></a>
-<span class="sourceLineNo">444</span> ZKUtil.deleteNodeFailSilent(zookeeper, getRsNode(serverName));<a name="line.444"></a>
-<span class="sourceLineNo">445</span> } catch (NotEmptyException e) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span> // keep silence to avoid logging too much.<a name="line.446"></a>
-<span class="sourceLineNo">447</span> } catch (KeeperException e) {<a name="line.447"></a>
-<span class="sourceLineNo">448</span> throw new ReplicationException("Failed to remove replicator for " + serverName, e);<a name="line.448"></a>
-<span class="sourceLineNo">449</span> }<a name="line.449"></a>
-<span class="sourceLineNo">450</span> }<a name="line.450"></a>
-<span class="sourceLineNo">451</span><a name="line.451"></a>
-<span class="sourceLineNo">452</span> private List<ServerName> getListOfReplicators0() throws KeeperException {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> List<String> children = ZKUtil.listChildrenNoWatch(zookeeper, queuesZNode);<a name="line.453"></a>
-<span class="sourceLineNo">454</span> if (children == null) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span> children = Collections.emptyList();<a name="line.455"></a>
-<span class="sourceLineNo">456</span> }<a name="line.456"></a>
-<span class="sourceLineNo">457</span> return children.stream().map(ServerName::parseServerName).collect(toList());<a name="line.457"></a>
-<span class="sourceLineNo">458</span> }<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span> @Override<a name="line.460"></a>
-<span class="sourceLineNo">461</span> public List<ServerName> getListOfReplicators() throws ReplicationException {<a name="line.461"></a>
-<span class="sourceLineNo">462</span> try {<a name="line.462"></a>
-<span class="sourceLineNo">463</span> return getListOfReplicators0();<a name="line.463"></a>
-<span class="sourceLineNo">464</span> } catch (KeeperException e) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span> throw new ReplicationException("Failed to get list of replicators", e);<a name="line.465"></a>
-<span class="sourceLineNo">466</span> }<a name="line.466"></a>
-<span class="sourceLineNo">467</span> }<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span> private List<String> getWALsInQueue0(ServerName serverName, String queueId)<a name="line.469"></a>
-<span class="sourceLineNo">470</span> throws KeeperException {<a name="line.470"></a>
-<span class="sourceLineNo">471</span> List<String> children = ZKUtil.listChildrenNoWatch(zookeeper, getQueueNode(serverName,<a name="line.471"></a>
-<span class="sourceLineNo">472</span> queueId));<a name="line.472"></a>
-<span class="sourceLineNo">473</span> return children != null ? children : Collections.emptyList();<a name="line.473"></a>
-<span class="sourceLineNo">474</span> }<a name="line.474"></a>
-<span class="sourceLineNo">475</span><a name="line.475"></a>
-<span class="sourceLineNo">476</span> @Override<a name="line.476"></a>
-<span class="sourceLineNo">477</span> public List<String> getWALsInQueue(ServerName serverName, String queueId)<a name="line.477"></a>
-<span class="sourceLineNo">478</span> throws ReplicationException {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> try {<a name="line.479"></a>
-<span class="sourceLineNo">480</span> return getWALsInQueue0(serverName, queueId);<a name="line.480"></a>
-<span class="sourceLineNo">481</span> } catch (KeeperException e) {<a name="line.481"></a>
-<span class="sourceLineNo">482</span> throw new ReplicationException(<a name="line.482"></a>
-<span class="sourceLineNo">483</span> "Failed to get wals in queue (serverName=" + serverName + ", queueId=" + queueId + ")",<a name="line.483"></a>
-<span class="sourceLineNo">484</span> e);<a name="line.484"></a>
-<span class="sourceLineNo">485</span> }<a name="line.485"></a>
-<span class="sourceLineNo">486</span> }<a name="line.486"></a>
-<span class="sourceLineNo">487</span><a name="line.487"></a>
-<span class="sourceLineNo">488</span> private List<String> getAllQueues0(ServerName serverName) throws KeeperException {<a name="line.488"></a>
-<span class="sourceLineNo">489</span> List<String> children = ZKUtil.listChildrenNoWatch(zookeeper, getRsNode(serverName));<a name="line.489"></a>
-<span class="sourceLineNo">490</span> return children != null ? children : Collections.emptyList();<a name="line.490"></a>
-<span class="sourceLineNo">491</span> }<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span> @Override<a name="line.493"></a>
-<span class="sourceLineNo">494</span> public List<String> getAllQueues(ServerName serverName) throws ReplicationException {<a name="line.494"></a>
-<span class="sourceLineNo">495</span> try {<a name="line.495"></a>
-<span class="sourceLineNo">496</span> return getAllQueues0(serverName);<a name="line.496"></a>
-<span class="sourceLineNo">497</span> } catch (KeeperException e) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span> throw new ReplicationException("Failed to get all queues (serverName=" + serverName + ")", e);<a name="line.498"></a>
-<span class="sourceLineNo">499</span> }<a name="line.499"></a>
-<span class="sourceLineNo">500</span> }<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span> // will be overridden in UTs<a name="line.502"></a>
-<span class="sourceLineNo">503</span> @VisibleForTesting<a name="line.503"></a>
-<span class="sourceLineNo">504</span> protected int getQueuesZNodeCversion() throws KeeperException {<a name="line.504"></a>
-<span class="sourceLineNo">505</span> Stat stat = new Stat();<a name="line.505"></a>
-<span class="sourceLineNo">506</span> ZKUtil.getDataNoWatch(this.zookeeper, this.queuesZNode, stat);<a name="line.506"></a>
-<span class="sourceLineNo">507</span> return stat.getCversion();<a name="line.507"></a>
-<span class="sourceLineNo">508</span> }<a name="line.508"></a>
-<span class="sourceLineNo">509</span><a name="line.509"></a>
-<span class="sourceLineNo">510</span> @Override<a name="line.510"></a>
-<span class="sourceLineNo">511</span> public Set<String> getAllWALs() throws ReplicationException {<a name="line.511"></a>
-<span class="sourceLineNo">512</span> try {<a name="line.512"></a>
-<span class="sourceLineNo">513</span> for (int retry = 0;; retry++) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span> int v0 = getQueuesZNodeCversion();<a name="line.514"></a>
-<span class="sourceLineNo">515</span> List<ServerName> rss = getListOfReplicators0();<a name="line.515"></a>
-<span class="sourceLineNo">516</span> if (rss.isEmpty()) {<a name="line.516"></a>
-<span class="sourceLineNo">517</span> LOG.debug("Didn't find a RegionServer that replicates, won't prevent deletions.");<a name="line.517"></a>
-<span class="sourceLineNo">518</span> return Collections.emptySet();<a name="line.518"></a>
-<span class="sourceLineNo">519</span> }<a name="line.519"></a>
-<span class="sourceLineNo">520</span> Set<String> wals = new HashSet<>();<a name="line.520"></a>
-<span class="sourceLineNo">521</span> for (ServerName rs : rss) {<a name="line.521"></a>
-<span class="sourceLineNo">522</span> for (String queueId : getAllQueues0(rs)) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span> wals.addAll(getWALsInQueue0(rs, queueId));<a name="line.523"></a>
-<span class="sourceLineNo">524</span> }<a name="line.524"></a>
-<span class="sourceLineNo">525</span> }<a name="line.525"></a>
-<span class="sourceLineNo">526</span> int v1 = getQueuesZNodeCversion();<a name="line.526"></a>
-<span class="sourceLineNo">527</span> if (v0 == v1) {<a name="line.527"></a>
-<span class="sourceLineNo">528</span> return wals;<a name="line.528"></a>
-<span class="sourceLineNo">529</span> }<a name="line.529"></a>
-<span class="sourceLineNo">530</span> LOG.info("Replication queue node cversion changed from %d to %d, retry = %d",<a name="line.530"></a>
-<span class="sourceLineNo">531</span> v0, v1, retry);<a name="line.531"></a>
-<span class="sourceLineNo">532</span> }<a name="line.532"></a>
-<span class="sourceLineNo">533</span> } catch (KeeperException e) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span> throw new ReplicationException("Failed to get all wals", e);<a name="line.534"></a>
-<span class="sourceLineNo">535</span> }<a name="line.535"></a>
-<span class="sourceLineNo">536</span> }<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span> private String getHFileRefsPeerNode(String peerId) {<a name="line.538"></a>
-<span class="sourceLineNo">539</span> return ZNodePaths.joinZNode(hfileRefsZNode, peerId);<a name="line.539"></a>
-<span class="sourceLineNo">540</span> }<a name="line.540"></a>
-<span class="sourceLineNo">541</span><a name="line.541"></a>
-<span class="sourceLineNo">542</span> private String getHFileNode(String peerNode, String fileName) {<a name="line.542"></a>
-<span class="sourceLineNo">543</span> return ZNodePaths.joinZNode(peerNode, fileName);<a name="line.543"></a>
-<span class="sourceLineNo">544</span> }<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span> @Override<a name="line.546"></a>
-<span class="sourceLineNo">547</span> public void addPeerToHFileRefs(String peerId) throws ReplicationException {<a name="line.547"></a>
-<span class="sourceLineNo">548</span> String peerNode = getHFileRefsPeerNode(peerId);<a name="line.548"></a>
-<span class="sourceLineNo">549</span> try {<a name="line.549"></a>
-<span class="sourceLineNo">550</span> if (ZKUtil.checkExists(zookeeper, peerNode) == -1) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span> LOG.info("Adding peer {} to hfile reference queue.", peerId);<a name="line.551"></a>
-<span class="sourceLineNo">552</span> ZKUtil.createWithParents(zookeeper, peerNode);<a name="line.552"></a>
-<span class="sourceLineNo">553</span> }<a name="line.553"></a>
-<span class="sourceLineNo">554</span> } catch (KeeperException e) {<a name="line.554"></a>
-<span class="sourceLineNo">555</span> throw new ReplicationException("Failed to add peer " + peerId + " to hfile reference queue.",<a name="line.555"></a>
-<span class="sourceLineNo">556</span> e);<a name="line.556"></a>
-<span class="sourceLineNo">557</span> }<a name="line.557"></a>
-<span class="sourceLineNo">558</span> }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span> @Override<a name="line.560"></a>
-<span class="sourceLineNo">561</span> public void removePeerFromHFileRefs(String peerId) throws ReplicationException {<a name="line.561"></a>
-<span class="sourceLineNo">562</span> String peerNode = getHFileRefsPeerNode(peerId);<a name="line.562"></a>
-<span class="sourceLineNo">563</span> try {<a name="line.563"></a>
-<span class="sourceLineNo">564</span> if (ZKUtil.checkExists(zookeeper, peerNode) == -1) {<a name="line.564"></a>
-<span class="sourceLineNo">565</span> LOG.debug("Peer {} not found in hfile reference queue.", peerNode);<a name="line.565"></a>
-<span class="sourceLineNo">566</span> } else {<a name="line.566"></a>
-<span class="sourceLineNo">567</span> LOG.info("Removing peer {} from hfile reference queue.", peerNode);<a name="line.567"></a>
-<span class="sourceLineNo">568</span> ZKUtil.deleteNodeRecursively(zookeeper, peerNode);<a name="line.568"></a>
-<span class="sourceLineNo">569</span> }<a name="line.569"></a>
-<span class="sourceLineNo">570</span> } catch (KeeperException e) {<a name="line.570"></a>
-<span class="sourceLineNo">571</span> throw new ReplicationException(<a name="line.571"></a>
-<span class="sourceLineNo">572</span> "Failed to remove peer " + peerId + " from hfile reference queue.", e);<a name="line.572"></a>
-<span class="sourceLineNo">573</span> }<a name="line.573"></a>
-<span class="sourceLineNo">574</span> }<a name="line.574"></a>
-<span class="sourceLineNo">575</span><a name="line.575"></a>
-<span class="sourceLineNo">576</span> @Override<a name="line.576"></a>
-<span class="sourceLineNo">577</span> public void addHFileRefs(String peerId, List<Pair<Path, Path>> pairs)<a name="line.577"></a>
-<span class="sourceLineNo">578</span> throws ReplicationException {<a name="line.578"></a>
-<span class="sourceLineNo">579</span> String peerNode = getHFileRefsPeerNode(peerId);<a name="line.579"></a>
-<span class="sourceLineNo">580</span> LOG.debug("Adding hfile references {} in queue {}", pairs, peerNode);<a name="line.580"></a>
-<span class="sourceLineNo">581</span> List<ZKUtilOp> listOfOps = pairs.stream().map(p -> p.getSecond().getName())<a name="line.581"></a>
-<span class="sourceLineNo">582</span> .map(n -> getHFileNode(peerNode, n))<a name="line.582"></a>
-<span class="sourceLineNo">583</span> .map(f -> ZKUtilOp.createAndFailSilent(f, HConstants.EMPTY_BYTE_ARRAY)).collect(toList());<a name="line.583"></a>
-<span class="sourceLineNo">584</span> LOG.debug("The multi list size for adding hfile references in zk for node {} is {}",<a name="line.584"></a>
-<span class="sourceLineNo">585</span> peerNode, listOfOps.size());<a name="line.585"></a>
-<span class="sourceLineNo">586</span> try {<a name="line.586"></a>
-<span class="sourceLineNo">587</span> ZKUtil.multiOrSequential(this.zookeeper, listOfOps, true);<a name="line.587"></a>
-<span class="sourceLineNo">588</span> } catch (KeeperException e) {<a name="line.588"></a>
-<span class="sourceLineNo">589</span> throw new ReplicationException("Failed to add hfile reference to peer " + peerId, e);<a name="line.589"></a>
-<span class="sourceLineNo">590</span> }<a name="line.590"></a>
-<span class="sourceLineNo">591</span> }<a name="line.591"></a>
-<span class="sourceLineNo">592</span><a name="line.592"></a>
-<span class="sourceLineNo">593</span> @Override<a name="line.593"></a>
-<span class="sourceLineNo">594</span> public void removeHFileRefs(String peerId, List<String> files) throws ReplicationException {<a name="line.594"></a>
-<span class="sourceLineNo">595</span> String peerNode = getHFileRefsPeerNode(peerId);<a name="line.595"></a>
-<span class="sourceLineNo">596</span> LOG.debug("Removing hfile references {} from queue {}", files, peerNode);<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
-<span class="sourceLineNo">598</span> List<ZKUtilOp> listOfOps = files.stream().map(n -> getHFileNode(peerNode, n))<a name="line.598"></a>
-<span class="sourceLineNo">599</span> .map(ZKUtilOp::deleteNodeFailSilent).collect(toList());<a name="line.599"></a>
-<span class="sourceLineNo">600</span> LOG.debug("The multi list size for removing hfile references in zk for node {} is {}",<a name="line.600"></a>
-<span class="sourceLineNo">601</span> peerNode, listOfOps.size());<a name="line.601"></a>
-<span class="sourceLineNo">602</span> try {<a name="line.602"></a>
-<span class="sourceLineNo">603</span> ZKUtil.multiOrSequential(this.zookeeper, listOfOps, true);<a name="line.603"></a>
-<span class="sourceLineNo">604</span> } catch (KeeperException e) {<a name="line.604"></a>
-<span class="sourceLineNo">605</span> throw new ReplicationException("Failed to remove hfile reference from peer " + peerId, e);<a name="line.605"></a>
-<span class="sourceLineNo">606</span> }<a name="line.606"></a>
-<span class="sourceLineNo">607</span> }<a name="line.607"></a>
-<span class="sourceLineNo">608</span><a name="line.608"></a>
-<span class="sourceLineNo">609</span> private List<String> getAllPeersFromHFileRefsQueue0() throws KeeperException {<a name="line.609"></a>
-<span class="sourceLineNo">610</span> List<String> children = ZKUtil.listChildrenNoWatch(zookeeper, hfileRefsZNode);<a name="line.610"></a>
-<span class="sourceLineNo">611</span> return children != null ? children : Collections.emptyList();<a name="line.611"></a>
-<span class="sourceLineNo">612</span> }<a name="line.612"></a>
-<span class="sourceLineNo">613</span><a name="line.613"></a>
-<span class="sourceLineNo">614</span> @Override<a name="line.614"></a>
-<span class="sourceLineNo">615</span> public List<String> getAllPeersFromHFileRefsQueue() throws ReplicationException {<a name="line.615"></a>
-<span class="sourceLineNo">616</span> try {<a name="line.616"></a>
-<span class="sourceLineNo">617</span> return getAllPeersFromHFileRefsQueue0();<a name="line.617"></a>
-<span class="sourceLineNo">618</span> } catch (KeeperException e) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span> throw new ReplicationException("Failed to get list of all peers in hfile references node.",<a name="line.619"></a>
-<span class="sourceLineNo">620</span> e);<a name="line.620"></a>
-<span class="sourceLineNo">621</span> }<a name="line.621"></a>
-<span class="sourceLineNo">622</span> }<a name="line.622"></a>
-<span class="sourceLineNo">623</span><a name="line.623"></a>
-<span class="sourceLineNo">624</span> private List<String> getReplicableHFiles0(String peerId) throws KeeperException {<a name="line.624"></a>
-<span class="sourceLineNo">625</span> List<String> children = ZKUtil.listChildrenNoWatch(this.zookeeper,<a name="line.625"></a>
-<span class="sourceLineNo">626</span> getHFileRefsPeerNode(peerId));<a name="line.626"></a>
-<span class="sourceLineNo">627</span> return children != null ? children : Collections.emptyList();<a name="line.627"></a>
-<span class="sourceLineNo">628</span> }<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span> @Override<a name="line.630"></a>
-<span class="sourceLineNo">631</span> public List<String> getReplicableHFiles(String peerId) throws ReplicationException {<a name="line.631"></a>
-<span class="sourceLineNo">632</span> try {<a name="line.632"></a>
-<span class="sourceLineNo">633</span> return getReplicableHFiles0(peerId);<a name="line.633"></a>
-<span class="sourceLineNo">634</span> } catch (KeeperException e) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span> throw new ReplicationException("Failed to get list of hfile references for peer " + peerId,<a name="line.635"></a>
-<span class="sourceLineNo">636</span> e);<a name="line.636"></a>
-<span class="sourceLineNo">637</span> }<a name="line.637"></a>
-<span class="sourceLineNo">638</span> }<a name="line.638"></a>
-<span class="sourceLineNo">639</span><a name="line.639"></a>
-<span class="sourceLineNo">640</span> // will be overridden in UTs<a name="line.640"></a>
-<span class="sourceLineNo">641</span> @VisibleForTesting<a name="line.641"></a>
-<span class="sourceLineNo">642</span> protected int getHFileRefsZNodeCversion() throws ReplicationException {<a name="line.642"></a>
-<span class="sourceLineNo">643</span> Stat stat = new Stat();<a name="line.643"></a>
-<span class="sourceLineNo">644</span> try {<a name="line.644"></a>
-<span class="sourceLineNo">645</span> ZKUtil.getDataNoWatch(zookeeper, hfileRefsZNode, stat);<a name="line.645"></a>
-<span class="sourceLineNo">646</span> } catch (KeeperException e) {<a name="line.646"></a>
-<span class="sourceLineNo">647</span> throw new ReplicationException("Failed to get stat of replication hfile references node.", e);<a name="line.647"></a>
-<span class="sourceLineNo">648</span> }<a name="line.648"></a>
-<span class="sourceLineNo">649</span> return stat.getCversion();<a name="line.649"></a>
-<span class="sourceLineNo">650</span> }<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span> @Override<a name="line.652"></a>
-<span class="sourceLineNo">653</span> public Set<String> getAllHFileRefs() throws ReplicationException {<a name="line.653"></a>
-<span class="sourceLineNo">654</span> try {<a name="line.654"></a>
-<span class="sourceLineNo">655</span> for (int retry = 0;; retry++) {<a name="line.655"></a>
-<span class="sourceLineNo">656</span> int v0 = getHFileRefsZNodeCversion();<a name="line.656"></a>
-<span class="sourceLineNo">657</span> List<String> peers = getAllPeersFromHFileRefsQueue();<a name="line.657"></a>
-<span class="sourceLineNo">658</span> if (peers.isEmpty()) {<a name="line.658"></a>
-<span class="sourceLineNo">659</span> LOG.debug("Didn't find any peers with hfile references, won't prevent deletions.");<a name="line.659"></a>
-<span class="sourceLineNo">660</span> return Collections.emptySet();<a name="line.660"></a>
-<span class="sourceLineNo">661</span> }<a name="line.661"></a>
-<span class="sourceLineNo">662</span> Set<String> hfileRefs = new HashSet<>();<a name="line.662"></a>
-<span class="sourceLineNo">663</span> for (String peer : peers) {<a name="line.663"></a>
-<span class="sourceLineNo">664</span> hfileRefs.addAll(getReplicableHFiles0(peer));<a name="line.664"></a>
-<span class="sourceLineNo">665</span> }<a name="line.665"></a>
-<span class="sourceLineNo">666</span> int v1 = getHFileRefsZNodeCversion();<a name="line.666"></a>
-<span class="sourceLineNo">667</span> if (v0 == v1) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span> return hfileRefs;<a name="line.668"></a>
-<span class="sourceLineNo">669</span> }<a name="line.669"></a>
-<span class="sourceLineNo">670</span> LOG.debug("Replication hfile references node cversion changed from %d to %d, retry = %d",<a name="line.670"></a>
-<span class="sourceLineNo">671</span> v0, v1, retry);<a name="line.671"></a>
-<span class="sourceLineNo">672</span> }<a name="line.672"></a>
-<span class="sourceLineNo">673</span> } catch (KeeperException e) {<a name="line.673"></a>
-<span class="sourceLineNo">674</span> throw new ReplicationException("Failed to get all hfile refs", e);<a name="line.674"></a>
-<span class="sourceLineNo">675</span> }<a name="line.675"></a>
-<span class="sourceLineNo">676</span> }<a name="line.676"></a>
-<span class="sourceLineNo">677</span>}<a name="line.677"></a>
+<span class="sourceLineNo">430</span> // These exceptions mean that zk tells us the request can not be execute. So return an empty<a name="line.430"></a>
+<span class="sourceLineNo">431</span> // queue to tell the upper layer that claim nothing. For other types of exception should be<a name="line.431"></a>
+<span class="sourceLineNo">432</span> // thrown out to notify the upper layer.<a name="line.432"></a>
+<span class="sourceLineNo">433</span> LOG.info("Claim queue queueId={} from {} to {} failed with {}, someone else took the log?",<a name="line.433"></a>
+<span class="sourceLineNo">434</span> queueId,sourceServerName, destServerName, e.toString());<a name="line.434"></a>
+<span class="sourceLineNo">435</span> return new Pair<>(newQueueId, Collections.emptySortedSet());<a name="line.435"></a>
+<span class="sourceLineNo">436</span> } catch (KeeperException | InterruptedException e) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span> throw new ReplicationException("Claim queue queueId=" + queueId + " from " +<a name="line.437"></a>
+<span class="sourceLineNo">438</span> sourceServerName + " to " + destServerName + " failed", e);<a name="line.438"></a>
+<span class="sourceLineNo">439</span> }<a name="line.439"></a>
+<span class="sourceLineNo">440</span> }<a name="line.440"></a>
+<span class="sourceLineNo">441</span><a name="line.441"></a>
+<span class="sourceLineNo">442</span> @Override<a name="line.442"></a>
+<span class="sourceLineNo">443</span> public void removeReplicatorIfQueueIsEmpty(ServerName serverName) throws ReplicationException {<a name="line.443"></a>
+<span class="sourceLineNo">444</span> try {<a name="line.444"></a>
+<span class="sourceLineNo">445</span> ZKUtil.deleteNodeFailSilent(zookeeper, getRsNode(serverName));<a name="line.445"></a>
+<span class="sourceLineNo">446</span> } catch (NotEmptyException e) {<a name="line.446"></a>
+<span class="sourceLineNo">447</span> // keep silence to avoid logging too much.<a name="line.447"></a>
+<span class="sourceLineNo">448</span> } catch (KeeperException e) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span> throw new ReplicationException("Failed to remove replicator for " + serverName, e);<a name="line.449"></a>
+<span class="sourceLineNo">450</span> }<a name="line.450"></a>
+<span class="sourceLineNo">451</span> }<a name="line.451"></a>
+<span class="sourceLineNo">452</span><a name="line.452"></a>
+<span class="sourceLineNo">453</span> private List<ServerName> getListOfReplicators0() throws KeeperException {<a name="line.453"></a>
+<span class="sourceLineNo">454</span> List<String> children = ZKUtil.listChildrenNoWatch(zookeeper, queuesZNode);<a name="line.454"></a>
+<span class="sourceLineNo">455</span> if (children == null) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span> children = Collections.emptyList();<a name="line.456"></a>
+<span class="sourceLineNo">457</span> }<a name="line.457"></a>
+<span class="sourceLineNo">458</span> return children.stream().map(ServerName::parseServerName).collect(toList());<a name="line.458"></a>
+<span class="sourceLineNo">459</span> }<a name="line.459"></a>
+<span class="sourceLineNo">460</span><a name="line.460"></a>
+<span class="sourceLineNo">461</span> @Override<a name="line.461"></a>
+<span class="sourceLineNo">462</span> public List<ServerName> getListOfReplicators() throws ReplicationException {<a name="line.462"></a>
+<span class="sourceLineNo">463</span> try {<a name="line.463"></a>
+<span class="sourceLineNo">464</span> return getListOfReplicators0();<a name="line.464"></a>
+<span class="sourceLineNo">465</span> } catch (KeeperException e) {<a name="line.465"></a>
+<span class="sourceLineNo">466</span> throw new ReplicationException("Failed to get list of replicators", e);<a name="line.466"></a>
+<span class="sourceLineNo">467</span> }<a name="line.467"></a>
+<span class="sourceLineNo">468</span> }<a name="line.468"></a>
+<span class="sourceLineNo">469</span><a name="line.469"></a>
+<span class="sourceLineNo">470</span> private List<String> getWALsInQueue0(ServerName serverName, String queueId)<a name="line.470"></a>
+<span class="sourceLineNo">471</span> throws KeeperException {<a name="line.471"></a>
+<span class="sourceLineNo">472</span> List<String> children = ZKUtil.listChildrenNoWatch(zookeeper, getQueueNode(serverName,<a name="line.472"></a>
+<span class="sourceLineNo">473</span> queueId));<a name="line.473"></a>
+<span class="sourceLineNo">474</span> return children != null ? children : Collections.emptyList();<a name="line.474"></a>
+<span class="sourceLineNo">475</span> }<a name="line.475"></a>
+<span class="sourceLineNo">476</span><a name="line.476"></a>
+<span class="sourceLineNo">477</span> @Override<a name="line.477"></a>
+<span class="sourceLineNo">478</span> public List<String> getWALsInQueue(ServerName serverName, String queueId)<a name="line.478"></a>
+<span class="sourceLineNo">479</span> throws ReplicationException {<a name="line.479"></a>
+<span class="sourceLineNo">480</span> try {<a name="line.480"></a>
+<span class="sourceLineNo">481</span> return getWALsInQueue0(serverName, queueId);<a name="line.481"></a>
+<span class="sourceLineNo">482</span> } catch (KeeperException e) {<a name="line.482"></a>
+<span class="sourceLineNo">483</span> throw new ReplicationException(<a name="line.483"></a>
+<span class="sourceLineNo">484</span> "Failed to get wals in queue (serverName=" + serverName + ", queueId=" + queueId + ")",<a name="line.484"></a>
+<span class="sourceLineNo">485</span> e);<a name="line.485"></a>
+<span class="sourceLineNo">486</span> }<a name="line.486"></a>
+<span class="sourceLineNo">487</span> }<a name="line.487"></a>
+<span class="sourceLineNo">488</span><a name="line.488"></a>
+<span class="sourceLineNo">489</span> private List<String> getAllQueues0(ServerName serverName) throws KeeperException {<a name="line.489"></a>
+<span class="sourceLineNo">490</span> List<String> children = ZKUtil.listChildrenNoWatch(zookeeper, getRsNode(serverName));<a name="line.490"></a>
+<span class="sourceLineNo">491</span> return children != null ? children : Collections.emptyList();<a name="line.491"></a>
+<span class="sourceLineNo">492</span> }<a name="line.492"></a>
+<span class="sourceLineNo">493</span><a name="line.493"></a>
+<span class="sourceLineNo">494</span> @Override<a name="line.494"></a>
+<span class="sourceLineNo">495</span> public List<String> getAllQueues(ServerName serverName) throws ReplicationException {<a name="line.495"></a>
+<span class="sourceLineNo">496</span> try {<a name="line.496"></a>
+<span class="sourceLineNo">497</span> return getAllQueues0(serverName);<a name="line.497"></a>
+<span class="sourceLineNo">498</span> } catch (KeeperException e) {<a name="line.498"></a>
+<span class="sourceLineNo">499</span> throw new ReplicationException("Failed to get all queues (serverName=" + serverName + ")", e);<a name="line.499"></a>
+<span class="sourceLineNo">500</span> }<a name="line.500"></a>
+<span class="sourceLineNo">501</span> }<a name="line.501"></a>
+<span class="sourceLineNo">502</span><a name="line.502"></a>
+<span class="sourceLineNo">503</span> // will be overridden in UTs<a name="line.503"></a>
+<span class="sourceLineNo">504</span> @VisibleForTesting<a name="line.504"></a>
+<span class="sourceLineNo">505</span> protected int getQueuesZNodeCversion() throws KeeperException {<a name="line.505"></a>
+<span class="sourceLineNo">506</span> Stat stat = new Stat();<a name="line.506"></a>
+<span class="sourceLineNo">507</span> ZKUtil.getDataNoWatch(this.zookeeper, this.queuesZNode, stat);<a name="line.507"></a>
+<span class="sourceLineNo">508</span> return stat.getCversion();<a name="line.508"></a>
+<span class="sourceLineNo">509</span> }<a name="line.509"></a>
+<span class="sourceLineNo">510</span><a name="line.510"></a>
+<span class="sourceLineNo">511</span> @Override<a name="line.511"></a>
+<span class="sourceLineNo">512</span> public Set<String> getAllWALs() throws ReplicationException {<a name="line.512"></a>
+<span class="sourceLineNo">513</span> try {<a name="line.513"></a>
+<span class="sourceLineNo">514</span> for (int retry = 0;; retry++) {<a name="line.514"></a>
+<span class="sourceLineNo">515</span> int v0 = getQueuesZNodeCversion();<a name="line.515"></a>
+<span class="sourceLineNo">516</span> List<ServerName> rss = getListOfReplicators0();<a name="line.516"></a>
+<span class="sourceLineNo">517</span> if (rss.isEmpty()) {<a name="line.517"></a>
+<span class="sourceLineNo">518</span> LOG.debug("Didn't find a RegionServer that replicates, won't prevent deletions.");<a name="line.518"></a>
+<span class="sourceLineNo">519</span> return Collections.emptySet();<a name="line.519"></a>
+<span class="sourceLineNo">520</span> }<a name="line.520"></a>
+<span class="sourceLineNo">521</span> Set<String> wals = new HashSet<>();<a name="line.521"></a>
+<span class="sourceLineNo">522</span> for (ServerName rs : rss) {<a name="line.522"></a>
+<span class="sourceLineNo">523</span> for (String queueId : getAllQueues0(rs)) {<a name="line.523"></a>
+<span class="sourceLineNo">524</span> wals.addAll(getWALsInQueue0(rs, queueId));<a name="line.524"></a>
+<span class="sourceLineNo">525</span> }<a name="line.525"></a>
+<span class="sourceLineNo">526</span> }<a name="line.526"></a>
+<span class="sourceLineNo">527</span> int v1 = getQueuesZNodeCversion();<a name="line.527"></a>
+<span class="sourceLineNo">528</span> if (v0 == v1) {<a name="line.528"></a>
+<span class="sourceLineNo">529</span> return wals;<a name="line.529"></a>
+<span class="sourceLineNo">530</span> }<a name="line.530"></a>
+<span class="sourceLineNo">531</span> LOG.info("Replication queue node cversion changed from %d to %d, retry = %d",<a name="line.531"></a>
+<span class="sourceLineNo">532</span> v0, v1, retry);<a name="line.532"></a>
+<span class="sourceLineNo">533</span> }<a name="line.533"></a>
+<span class="sourceLineNo">534</span> } catch (KeeperException e) {<a name="line.534"></a>
+<span class="sourceLineNo">535</span> throw new ReplicationException("Failed to get all wals", e);<a name="line.535"></a>
+<span class="sourceLineNo">536</span> }<a name="line.536"></a>
+<span class="sourceLineNo">537</span> }<a name="line.537"></a>
+<span class="sourceLineNo">538</span><a name="line.538"></a>
+<span class="sourceLineNo">539</span> private String getHFileRefsPeerNode(String peerId) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span> return ZNodePaths.joinZNode(hfileRefsZNode, peerId);<a name="line.540"></a>
+<span class="sourceLineNo">541</span> }<a name="line.541"></a>
+<span class="sourceLineNo">542</span><a name="line.542"></a>
+<span class="sourceLineNo">543</span> private String getHFileNode(String peerNode, String fileName) {<a name="line.543"></a>
+<span class="sourceLineNo">544</span> return ZNodePaths.joinZNode(peerNode, fileName);<a name="line.544"></a>
+<span class="sourceLineNo">545</span> }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span> @Override<a name="line.547"></a>
+<span class="sourceLineNo">548</span> public void addPeerToHFileRefs(String peerId) throws ReplicationException {<a name="line.548"></a>
+<span class="sourceLineNo">549</span> String peerNode = getHFileRefsPeerNode(peerId);<a name="line.549"></a>
+<span class="sourceLineNo">550</span> try {<a name="line.550"></a>
+<span class="sourceLineNo">551</span> if (ZKUtil.checkExists(zookeeper, peerNode) == -1) {<a name="line.551"></a>
+<span class="sourceLineNo">552</span> LOG.info("Adding peer {} to hfile reference queue.", peerId);<a name="line.552"></a>
+<span class="sourceLineNo">553</span> ZKUtil.createWithParents(zookeeper, peerNode);<a name="line.553"></a>
+<span class="sourceLineNo">554</span> }<a name="line.554"></a>
+<span class="sourceLineNo">555</span> } catch (KeeperException e) {<a name="line.555"></a>
+<span class="sourceLineNo">556</span> throw new ReplicationException("Failed to add peer " + peerId + " to hfile reference queue.",<a name="line.556"></a>
+<span class="sourceLineNo">557</span> e);<a name="line.557"></a>
+<span class="sourceLineNo">558</span> }<a name="line.558"></a>
+<span class="sourceLineNo">559</span> }<a name="line.559"></a>
+<span class="sourceLineNo">560</span><a name="line.560"></a>
+<span class="sourceLineNo">561</span> @Override<a name="line.561"></a>
+<span class="sourceLineNo">562</span> public void removePeerFromHFileRefs(String peerId) throws ReplicationException {<a name="line.562"></a>
+<span class="sourceLineNo">563</span> String peerNode = getHFileRefsPeerNode(peerId);<a name="line.563"></a>
+<span class="sourceLineNo">564</span> try {<a name="line.564"></a>
+<span class="sourceLineNo">565</span> if (ZKUtil.checkExists(zookeeper, peerNode) == -1) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span> LOG.debug("Peer {} not found in hfile reference queue.", peerNode);<a name="line.566"></a>
+<span class="sourceLineNo">567</span> } else {<a name="line.567"></a>
+<span class="sourceLineNo">568</span> LOG.info("Removing peer {} from hfile reference queue.", peerNode);<a name="line.568"></a>
+<span class="sourceLineNo">569</span> ZKUtil.deleteNodeRecursively(zookeeper, peerNode);<a name="line.569"></a>
+<span class="sourceLineNo">570</span> }<a name="line.570"></a>
+<span class="sourceLineNo">571</span> } catch (KeeperException e) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span> throw new ReplicationException(<a name="line.572"></a>
+<span class="sourceLineNo">573</span> "Failed to remove peer " + peerId + " from hfile reference queue.", e);<a name="line.573"></a>
+<span class="sourceLineNo">574</span> }<a name="line.574"></a>
+<span class="sourceLineNo">575</span> }<a name="line.575"></a>
+<span class="sourceLineNo">576</span><a name="line.576"></a>
+<span class="sourceLineNo">577</span> @Override<a name="line.577"></a>
+<span class="sourceLineNo">578</span> public void addHFileRefs(String peerId, List<Pair<Path, Path>> pairs)<a name="line.578"></a>
+<span class="sourceLineNo">579</span> throws ReplicationException {<a name="line.579"></a>
+<span class="sourceLineNo">580</span> String peerNode = getHFileRefsPeerNode(peerId);<a name="line.580"></a>
+<span class="sourceLineNo">581</span> LOG.debug("Adding hfile references {} in queue {}", pairs, peerNode);<a name="line.581"></a>
+<span class="sourceLineNo">582</span> List<ZKUtilOp> listOfOps = pairs.stream().map(p -> p.getSecond().getName())<a name="line.582"></a>
+<span class="sourceLineNo">583</span> .map(n -> getHFileNode(peerNode, n))<a name="line.583"></a>
+<span class="sourceLineNo">584</span> .map(f -> ZKUtilOp.createAndFailSilent(f, HConstants.EMPTY_BYTE_ARRAY)).collect(toList());<a name="line.584"></a>
+<span class="sourceLineNo">585</span> LOG.debug("The multi list size for adding hfile references in zk for node {} is {}",<a name="line.585"></a>
+<span class="sourceLineNo">586</span> peerNode, listOfOps.size());<a name="line.586"></a>
+<span class="sourceLineNo">587</span> try {<a name="line.587"></a>
+<span class="sourceLineNo">588</span> ZKUtil.multiOrSequential(this.zookeeper, listOfOps, true);<a name="line.588"></a>
+<span class="sourceLineNo">589</span> } catch (KeeperException e) {<a name="line.589"></a>
+<span class="sourceLineNo">590</span> throw new ReplicationException("Failed to add hfile reference to peer " + peerId, e);<a name="line.590"></a>
+<span class="sourceLineNo">591</span> }<a name="line.591"></a>
+<span class="sourceLineNo">592</span> }<a name="line.592"></a>
+<span class="sourceLineNo">593</span><a name="line.593"></a>
+<span class="sourceLineNo">594</span> @Override<a name="line.594"></a>
+<span class="sourceLineNo">595</span> public void removeHFileRefs(String peerId, List<String> files) throws ReplicationException {<a name="line.595"></a>
+<span class="sourceLineNo">596</span> String peerNode = getHFileRefsPeerNode(peerId);<a name="line.596"></a>
+<span class="sourceLineNo">597</span> LOG.debug("Removing hfile references {} from queue {}", files, peerNode);<a name="line.597"></a>
+<span class="sourceLineNo">598</span><a name="line.598"></a>
+<span class="sourceLineNo">599</span> List<ZKUtilOp> listOfOps = files.stream().map(n -> getHFileNode(peerNode, n))<a name="line.599"></a>
+<span class="sourceLineNo">600</span> .map(ZKUtilOp::deleteNodeFailSilent).collect(toList());<a name="line.600"></a>
+<span class="sourceLineNo">601</span> LOG.debug("The multi list size for removing hfile references in zk for node {} is {}",<a name="line.601"></a>
+<span class="sourceLineNo">602</span> peerNode, listOfOps.size());<a name="line.602"></a>
+<span class="sourceLineNo">603</span> try {<a name="line.603"></a>
+<span class="sourceLineNo">604</span> ZKUtil.multiOrSequential(this.zookeeper, listOfOps, true);<a name="line.604"></a>
+<span class="sourceLineNo">605</span> } catch (KeeperException e) {<a name="line.605"></a>
+<span class="sourceLineNo">606</span> throw new ReplicationException("Failed to remove hfile reference from peer " + peerId, e);<a name="line.606"></a>
+<span class="sourceLineNo">607</span> }<a name="line.607"></a>
+<span class="sourceLineNo">608</span> }<a name="line.608"></a>
+<span class="sourceLineNo">609</span><a name="line.609"></a>
+<span class="sourceLineNo">610</span> private List<String> getAllPeersFromHFileRefsQueue0() throws KeeperException {<a name="line.610"></a>
+<span class="sourceLineNo">611</span> List<String> children = ZKUtil.listChildrenNoWatch(zookeeper, hfileRefsZNode);<a name="line.611"></a>
+<span class="sourceLineNo">612</span> return children != null ? children : Collections.emptyList();<a name="line.612"></a>
+<span class="sourceLineNo">613</span> }<a name="line.613"></a>
+<span class="sourceLineNo">614</span><a name="line.614"></a>
+<span class="sourceLineNo">615</span> @Override<a name="line.615"></a>
+<span class="sourceLineNo">616</span> public List<String> getAllPeersFromHFileRefsQueue() throws ReplicationException {<a name="line.616"></a>
+<span class="sourceLineNo">617</span> try {<a name="line.617"></a>
+<span class="sourceLineNo">618</span> return getAllPeersFromHFileRefsQueue0();<a name="line.618"></a>
+<span class="sourceLineNo">619</span> } catch (KeeperException e) {<a name="line.619"></a>
+<span class="sourceLineNo">620</span> throw new ReplicationException("Failed to get list of all peers in hfile references node.",<a name="line.620"></a>
+<span class="sourceLineNo">621</span> e);<a name="line.621"></a>
+<span class="sourceLineNo">622</span> }<a name="line.622"></a>
+<span class="sourceLineNo">623</span> }<a name="line.623"></a>
+<span class="sourceLineNo">624</span><a name="line.624"></a>
+<span class="sourceLineNo">625</span> private List<String> getReplicableHFiles0(String peerId) throws KeeperException {<a name="line.625"></a>
+<span class="sourceLineNo">626</span> List<String> children = ZKUtil.listChildrenNoWatch(this.zookeeper,<a name="line.626"></a>
+<span class="sourceLineNo">627</span> getHFileRefsPeerNode(peerId));<a name="line.627"></a>
+<span class="sourceLineNo">628</span> return children != null ? children : Collections.emptyList();<a name="line.628"></a>
+<span class="sourceLineNo">629</span> }<a name="line.629"></a>
+<span class="sourceLineNo">630</span><a name="line.630"></a>
+<span class="sourceLineNo">631</span> @Override<a name="line.631"></a>
+<span class="sourceLineNo">632</span> public List<String> getReplicableHFiles(String peerId) throws ReplicationException {<a name="line.632"></a>
+<span class="sourceLineNo">633</span> try {<a name="line.633"></a>
+<span class="sourceLineNo">634</span> return getReplicableHFiles0(peerId);<a name="line.634"></a>
+<span class="sourceLineNo">635</span> } catch (KeeperException e) {<a name="line.635"></a>
+<span class="sourceLineNo">636</span> throw new ReplicationException("Failed to get list of hfile references for peer " + peerId,<a name="line.636"></a>
+<span class="sourceLineNo">637</span> e);<a name="line.637"></a>
+<span class="sourceLineNo">638</span> }<a name="line.638"></a>
+<span class="sourceLineNo">639</span> }<a name="line.639"></a>
+<span class="sourceLineNo">640</span><a name="line.640"></a>
+<span class="sourceLineNo">641</span> // will be overridden in UTs<a name="line.641"></a>
+<span class="sourceLineNo">642</span> @VisibleForTesting<a name="line.642"></a>
+<span class="sourceLineNo">643</span> protected int getHFileRefsZNodeCversion() throws ReplicationException {<a name="line.643"></a>
+<span class="sourceLineNo">644</span> Stat stat = new Stat();<a name="line.644"></a>
+<span class="sourceLineNo">645</span> try {<a name="line.645"></a>
+<span class="sourceLineNo">646</span> ZKUtil.getDataNoWatch(zookeeper, hfileRefsZNode, stat);<a name="line.646"></a>
+<span class="sourceLineNo">647</span> } catch (KeeperException e) {<a name="line.647"></a>
+<span class="sourceLineNo">648</span> throw new ReplicationException("Failed to get stat of replication hfile references node.", e);<a name="line.648"></a>
+<span class="sourceLineNo">649</span> }<a name="line.649"></a>
+<span class="sourceLineNo">650</span> return stat.getCversion();<a name="line.650"></a>
+<span class="sourceLineNo">651</span> }<a name="line.651"></a>
+<span class="sourceLineNo">652</span><a name="line.652"></a>
+<span class="sourceLineNo">653</span> @Override<a name="line.653"></a>
+<span class="sourceLineNo">654</span> public Set<String> getAllHFileRefs() throws ReplicationException {<a name="line.654"></a>
+<span class="sourceLineNo">655</span> try {<a name="line.655"></a>
+<span class="sourceLineNo">656</span> for (int retry = 0;; retry++) {<a name="line.656"></a>
+<span class="sourceLineNo">657</span> int v0 = getHFileRefsZNodeCversion();<a name="line.657"></a>
+<span class="sourceLineNo">658</span> List<String> peers = getAllPeersFromHFileRefsQueue();<a name="line.658"></a>
+<span class="sourceLineNo">659</span> if (peers.isEmpty()) {<a name="line.659"></a>
+<span class="sourceLineNo">660</span> LOG.debug("Didn't find any peers with hfile references, won't prevent deletions.");<a name="line.660"></a>
+<span class="sourceLineNo">661</span> return Collections.emptySet();<a name="line.661"></a>
+<span class="sourceLineNo">662</span> }<a name="line.662"></a>
+<span class="sourceLineNo">663</span> Set<String> hfileRefs = new HashSet<>();<a name="line.663"></a>
+<span class="sourceLineNo">664</span> for (String peer : peers) {<a name="line.664"></a>
+<span class="sourceLineNo">665</span> hfileRefs.addAll(getReplicableHFiles0(peer));<a name="line.665"></a>
+<span class="sourceLineNo">666</span> }<a name="line.666"></a>
+<span class="sourceLineNo">667</span> int v1 = getHFileRefsZNodeCversion();<a name="line.667"></a>
+<span class="sourceLineNo">668</span> if (v0 == v1) {<a name="line.668"></a>
+<span class="sourceLineNo">669</span> return hfileRefs;<a name="line.669"></a>
+<span class="sourceLineNo">670</span> }<a name="line.670"></a>
+<span class="sourceLineNo">671</span> LOG.debug("Replication hfile references node cversion changed from %d to %d, retry = %d",<a name="line.671"></a>
+<span class="sourceLineNo">672</span> v0, v1, retry);<a name="line.672"></a>
+<span class="sourceLineNo">673</span> }<a name="line.673"></a>
+<span class="sourceLineNo">674</span> } catch (KeeperException e) {<a name="line.674"></a>
+<span class="sourceLineNo">675</span> throw new ReplicationException("Failed to get all hfile refs", e);<a name="line.675"></a>
+<span class="sourceLineNo">676</span> }<a name="line.676"></a>
+<span class="sourceLineNo">677</span> }<a name="line.677"></a>
+<span class="sourceLineNo">678</span>}<a name="line.678"></a>
[29/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
index aa48364..9549aa5 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
@@ -2830,843 +2830,858 @@
<span class="sourceLineNo">2822</span> * @return true if master is in maintenanceMode<a name="line.2822"></a>
<span class="sourceLineNo">2823</span> */<a name="line.2823"></a>
<span class="sourceLineNo">2824</span> @Override<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span> public boolean isInMaintenanceMode() {<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span> return maintenanceModeTracker.isInMaintenanceMode();<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span> }<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span><a name="line.2828"></a>
-<span class="sourceLineNo">2829</span> @VisibleForTesting<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span> public void setInitialized(boolean isInitialized) {<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span> procedureExecutor.getEnvironment().setEventReady(initialized, isInitialized);<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span> }<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span><a name="line.2833"></a>
-<span class="sourceLineNo">2834</span> @Override<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span> public ProcedureEvent<?> getInitializedEvent() {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span> return initialized;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span> }<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span><a name="line.2838"></a>
-<span class="sourceLineNo">2839</span> /**<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span> * ServerCrashProcessingEnabled is set false before completing assignMeta to prevent processing<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span> * of crashed servers.<a name="line.2841"></a>
-<span class="sourceLineNo">2842</span> * @return true if assignMeta has completed;<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span> */<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span> @Override<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span> public boolean isServerCrashProcessingEnabled() {<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span> return serverCrashProcessingEnabled.isReady();<a name="line.2846"></a>
-<span class="sourceLineNo">2847</span> }<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span><a name="line.2848"></a>
-<span class="sourceLineNo">2849</span> @VisibleForTesting<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span> public void setServerCrashProcessingEnabled(final boolean b) {<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span> procedureExecutor.getEnvironment().setEventReady(serverCrashProcessingEnabled, b);<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span> }<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span><a name="line.2853"></a>
-<span class="sourceLineNo">2854</span> public ProcedureEvent<?> getServerCrashProcessingEnabledEvent() {<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span> return serverCrashProcessingEnabled;<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span> }<a name="line.2856"></a>
-<span class="sourceLineNo">2857</span><a name="line.2857"></a>
-<span class="sourceLineNo">2858</span> /**<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span> * Compute the average load across all region servers.<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span> * Currently, this uses a very naive computation - just uses the number of<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span> * regions being served, ignoring stats about number of requests.<a name="line.2861"></a>
-<span class="sourceLineNo">2862</span> * @return the average load<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span> */<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span> public double getAverageLoad() {<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span> if (this.assignmentManager == null) {<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span> return 0;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span> }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span> RegionStates regionStates = this.assignmentManager.getRegionStates();<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span> if (regionStates == null) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span> return 0;<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span> }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span> return regionStates.getAverageLoad();<a name="line.2873"></a>
-<span class="sourceLineNo">2874</span> }<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span><a name="line.2875"></a>
-<span class="sourceLineNo">2876</span> /*<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span> * @return the count of region split plans executed<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span> */<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span> public long getSplitPlanCount() {<a name="line.2879"></a>
-<span class="sourceLineNo">2880</span> return splitPlanCount;<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span> }<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span><a name="line.2882"></a>
-<span class="sourceLineNo">2883</span> /*<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span> * @return the count of region merge plans executed<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span> */<a name="line.2885"></a>
-<span class="sourceLineNo">2886</span> public long getMergePlanCount() {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span> return mergePlanCount;<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span> }<a name="line.2888"></a>
-<span class="sourceLineNo">2889</span><a name="line.2889"></a>
-<span class="sourceLineNo">2890</span> @Override<a name="line.2890"></a>
-<span class="sourceLineNo">2891</span> public boolean registerService(Service instance) {<a name="line.2891"></a>
-<span class="sourceLineNo">2892</span> /*<a name="line.2892"></a>
-<span class="sourceLineNo">2893</span> * No stacking of instances is allowed for a single service name<a name="line.2893"></a>
-<span class="sourceLineNo">2894</span> */<a name="line.2894"></a>
-<span class="sourceLineNo">2895</span> Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.2895"></a>
-<span class="sourceLineNo">2896</span> String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.2896"></a>
-<span class="sourceLineNo">2897</span> if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.2897"></a>
-<span class="sourceLineNo">2898</span> LOG.error("Coprocessor service "+serviceName+<a name="line.2898"></a>
-<span class="sourceLineNo">2899</span> " already registered, rejecting request from "+instance<a name="line.2899"></a>
-<span class="sourceLineNo">2900</span> );<a name="line.2900"></a>
-<span class="sourceLineNo">2901</span> return false;<a name="line.2901"></a>
-<span class="sourceLineNo">2902</span> }<a name="line.2902"></a>
-<span class="sourceLineNo">2903</span><a name="line.2903"></a>
-<span class="sourceLineNo">2904</span> coprocessorServiceHandlers.put(serviceName, instance);<a name="line.2904"></a>
-<span class="sourceLineNo">2905</span> if (LOG.isDebugEnabled()) {<a name="line.2905"></a>
-<span class="sourceLineNo">2906</span> LOG.debug("Registered master coprocessor service: service="+serviceName);<a name="line.2906"></a>
-<span class="sourceLineNo">2907</span> }<a name="line.2907"></a>
-<span class="sourceLineNo">2908</span> return true;<a name="line.2908"></a>
-<span class="sourceLineNo">2909</span> }<a name="line.2909"></a>
-<span class="sourceLineNo">2910</span><a name="line.2910"></a>
-<span class="sourceLineNo">2911</span> /**<a name="line.2911"></a>
-<span class="sourceLineNo">2912</span> * Utility for constructing an instance of the passed HMaster class.<a name="line.2912"></a>
-<span class="sourceLineNo">2913</span> * @param masterClass<a name="line.2913"></a>
-<span class="sourceLineNo">2914</span> * @return HMaster instance.<a name="line.2914"></a>
-<span class="sourceLineNo">2915</span> */<a name="line.2915"></a>
-<span class="sourceLineNo">2916</span> public static HMaster constructMaster(Class<? extends HMaster> masterClass,<a name="line.2916"></a>
-<span class="sourceLineNo">2917</span> final Configuration conf) {<a name="line.2917"></a>
-<span class="sourceLineNo">2918</span> try {<a name="line.2918"></a>
-<span class="sourceLineNo">2919</span> Constructor<? extends HMaster> c = masterClass.getConstructor(Configuration.class);<a name="line.2919"></a>
-<span class="sourceLineNo">2920</span> return c.newInstance(conf);<a name="line.2920"></a>
-<span class="sourceLineNo">2921</span> } catch(Exception e) {<a name="line.2921"></a>
-<span class="sourceLineNo">2922</span> Throwable error = e;<a name="line.2922"></a>
-<span class="sourceLineNo">2923</span> if (e instanceof InvocationTargetException &&<a name="line.2923"></a>
-<span class="sourceLineNo">2924</span> ((InvocationTargetException)e).getTargetException() != null) {<a name="line.2924"></a>
-<span class="sourceLineNo">2925</span> error = ((InvocationTargetException)e).getTargetException();<a name="line.2925"></a>
-<span class="sourceLineNo">2926</span> }<a name="line.2926"></a>
-<span class="sourceLineNo">2927</span> throw new RuntimeException("Failed construction of Master: " + masterClass.toString() + ". "<a name="line.2927"></a>
-<span class="sourceLineNo">2928</span> , error);<a name="line.2928"></a>
-<span class="sourceLineNo">2929</span> }<a name="line.2929"></a>
-<span class="sourceLineNo">2930</span> }<a name="line.2930"></a>
-<span class="sourceLineNo">2931</span><a name="line.2931"></a>
-<span class="sourceLineNo">2932</span> /**<a name="line.2932"></a>
-<span class="sourceLineNo">2933</span> * @see org.apache.hadoop.hbase.master.HMasterCommandLine<a name="line.2933"></a>
-<span class="sourceLineNo">2934</span> */<a name="line.2934"></a>
-<span class="sourceLineNo">2935</span> public static void main(String [] args) {<a name="line.2935"></a>
-<span class="sourceLineNo">2936</span> LOG.info("STARTING service " + HMaster.class.getSimpleName());<a name="line.2936"></a>
-<span class="sourceLineNo">2937</span> VersionInfo.logVersion();<a name="line.2937"></a>
-<span class="sourceLineNo">2938</span> new HMasterCommandLine(HMaster.class).doMain(args);<a name="line.2938"></a>
-<span class="sourceLineNo">2939</span> }<a name="line.2939"></a>
-<span class="sourceLineNo">2940</span><a name="line.2940"></a>
-<span class="sourceLineNo">2941</span> public HFileCleaner getHFileCleaner() {<a name="line.2941"></a>
-<span class="sourceLineNo">2942</span> return this.hfileCleaner;<a name="line.2942"></a>
-<span class="sourceLineNo">2943</span> }<a name="line.2943"></a>
-<span class="sourceLineNo">2944</span><a name="line.2944"></a>
-<span class="sourceLineNo">2945</span> public LogCleaner getLogCleaner() {<a name="line.2945"></a>
-<span class="sourceLineNo">2946</span> return this.logCleaner;<a name="line.2946"></a>
-<span class="sourceLineNo">2947</span> }<a name="line.2947"></a>
-<span class="sourceLineNo">2948</span><a name="line.2948"></a>
-<span class="sourceLineNo">2949</span> /**<a name="line.2949"></a>
-<span class="sourceLineNo">2950</span> * @return the underlying snapshot manager<a name="line.2950"></a>
-<span class="sourceLineNo">2951</span> */<a name="line.2951"></a>
-<span class="sourceLineNo">2952</span> @Override<a name="line.2952"></a>
-<span class="sourceLineNo">2953</span> public SnapshotManager getSnapshotManager() {<a name="line.2953"></a>
-<span class="sourceLineNo">2954</span> return this.snapshotManager;<a name="line.2954"></a>
-<span class="sourceLineNo">2955</span> }<a name="line.2955"></a>
-<span class="sourceLineNo">2956</span><a name="line.2956"></a>
-<span class="sourceLineNo">2957</span> /**<a name="line.2957"></a>
-<span class="sourceLineNo">2958</span> * @return the underlying MasterProcedureManagerHost<a name="line.2958"></a>
-<span class="sourceLineNo">2959</span> */<a name="line.2959"></a>
-<span class="sourceLineNo">2960</span> @Override<a name="line.2960"></a>
-<span class="sourceLineNo">2961</span> public MasterProcedureManagerHost getMasterProcedureManagerHost() {<a name="line.2961"></a>
-<span class="sourceLineNo">2962</span> return mpmHost;<a name="line.2962"></a>
-<span class="sourceLineNo">2963</span> }<a name="line.2963"></a>
-<span class="sourceLineNo">2964</span><a name="line.2964"></a>
-<span class="sourceLineNo">2965</span> @Override<a name="line.2965"></a>
-<span class="sourceLineNo">2966</span> public ClusterSchema getClusterSchema() {<a name="line.2966"></a>
-<span class="sourceLineNo">2967</span> return this.clusterSchemaService;<a name="line.2967"></a>
-<span class="sourceLineNo">2968</span> }<a name="line.2968"></a>
-<span class="sourceLineNo">2969</span><a name="line.2969"></a>
-<span class="sourceLineNo">2970</span> /**<a name="line.2970"></a>
-<span class="sourceLineNo">2971</span> * Create a new Namespace.<a name="line.2971"></a>
-<span class="sourceLineNo">2972</span> * @param namespaceDescriptor descriptor for new Namespace<a name="line.2972"></a>
-<span class="sourceLineNo">2973</span> * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.2973"></a>
-<span class="sourceLineNo">2974</span> * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.2974"></a>
-<span class="sourceLineNo">2975</span> * <code>nonceGroup</code> (the source must ensure each operation gets a unique id).<a name="line.2975"></a>
-<span class="sourceLineNo">2976</span> * @return procedure id<a name="line.2976"></a>
-<span class="sourceLineNo">2977</span> */<a name="line.2977"></a>
-<span class="sourceLineNo">2978</span> long createNamespace(final NamespaceDescriptor namespaceDescriptor, final long nonceGroup,<a name="line.2978"></a>
-<span class="sourceLineNo">2979</span> final long nonce) throws IOException {<a name="line.2979"></a>
-<span class="sourceLineNo">2980</span> checkInitialized();<a name="line.2980"></a>
-<span class="sourceLineNo">2981</span><a name="line.2981"></a>
-<span class="sourceLineNo">2982</span> TableName.isLegalNamespaceName(Bytes.toBytes(namespaceDescriptor.getName()));<a name="line.2982"></a>
-<span class="sourceLineNo">2983</span><a name="line.2983"></a>
-<span class="sourceLineNo">2984</span> return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.2984"></a>
-<span class="sourceLineNo">2985</span> nonceGroup, nonce) {<a name="line.2985"></a>
-<span class="sourceLineNo">2986</span> @Override<a name="line.2986"></a>
-<span class="sourceLineNo">2987</span> protected void run() throws IOException {<a name="line.2987"></a>
-<span class="sourceLineNo">2988</span> getMaster().getMasterCoprocessorHost().preCreateNamespace(namespaceDescriptor);<a name="line.2988"></a>
-<span class="sourceLineNo">2989</span> // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.2989"></a>
-<span class="sourceLineNo">2990</span> // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.2990"></a>
-<span class="sourceLineNo">2991</span> ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.2991"></a>
-<span class="sourceLineNo">2992</span> LOG.info(getClientIdAuditPrefix() + " creating " + namespaceDescriptor);<a name="line.2992"></a>
-<span class="sourceLineNo">2993</span> // Execute the operation synchronously - wait for the operation to complete before<a name="line.2993"></a>
-<span class="sourceLineNo">2994</span> // continuing.<a name="line.2994"></a>
-<span class="sourceLineNo">2995</span> setProcId(getClusterSchema().createNamespace(namespaceDescriptor, getNonceKey(), latch));<a name="line.2995"></a>
-<span class="sourceLineNo">2996</span> latch.await();<a name="line.2996"></a>
-<span class="sourceLineNo">2997</span> getMaster().getMasterCoprocessorHost().postCreateNamespace(namespaceDescriptor);<a name="line.2997"></a>
-<span class="sourceLineNo">2998</span> }<a name="line.2998"></a>
-<span class="sourceLineNo">2999</span><a name="line.2999"></a>
-<span class="sourceLineNo">3000</span> @Override<a name="line.3000"></a>
-<span class="sourceLineNo">3001</span> protected String getDescription() {<a name="line.3001"></a>
-<span class="sourceLineNo">3002</span> return "CreateNamespaceProcedure";<a name="line.3002"></a>
-<span class="sourceLineNo">3003</span> }<a name="line.3003"></a>
-<span class="sourceLineNo">3004</span> });<a name="line.3004"></a>
-<span class="sourceLineNo">3005</span> }<a name="line.3005"></a>
-<span class="sourceLineNo">3006</span><a name="line.3006"></a>
-<span class="sourceLineNo">3007</span> /**<a name="line.3007"></a>
-<span class="sourceLineNo">3008</span> * Modify an existing Namespace.<a name="line.3008"></a>
-<span class="sourceLineNo">3009</span> * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.3009"></a>
-<span class="sourceLineNo">3010</span> * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.3010"></a>
-<span class="sourceLineNo">3011</span> * <code>nonceGroup</code> (the source must ensure each operation gets a unique id).<a name="line.3011"></a>
-<span class="sourceLineNo">3012</span> * @return procedure id<a name="line.3012"></a>
-<span class="sourceLineNo">3013</span> */<a name="line.3013"></a>
-<span class="sourceLineNo">3014</span> long modifyNamespace(final NamespaceDescriptor newNsDescriptor, final long nonceGroup,<a name="line.3014"></a>
-<span class="sourceLineNo">3015</span> final long nonce) throws IOException {<a name="line.3015"></a>
-<span class="sourceLineNo">3016</span> checkInitialized();<a name="line.3016"></a>
-<span class="sourceLineNo">3017</span><a name="line.3017"></a>
-<span class="sourceLineNo">3018</span> TableName.isLegalNamespaceName(Bytes.toBytes(newNsDescriptor.getName()));<a name="line.3018"></a>
-<span class="sourceLineNo">3019</span><a name="line.3019"></a>
-<span class="sourceLineNo">3020</span> return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.3020"></a>
-<span class="sourceLineNo">3021</span> nonceGroup, nonce) {<a name="line.3021"></a>
-<span class="sourceLineNo">3022</span> @Override<a name="line.3022"></a>
-<span class="sourceLineNo">3023</span> protected void run() throws IOException {<a name="line.3023"></a>
-<span class="sourceLineNo">3024</span> NamespaceDescriptor oldNsDescriptor = getNamespace(newNsDescriptor.getName());<a name="line.3024"></a>
-<span class="sourceLineNo">3025</span> getMaster().getMasterCoprocessorHost().preModifyNamespace(oldNsDescriptor, newNsDescriptor);<a name="line.3025"></a>
-<span class="sourceLineNo">3026</span> // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.3026"></a>
-<span class="sourceLineNo">3027</span> // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.3027"></a>
-<span class="sourceLineNo">3028</span> ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.3028"></a>
-<span class="sourceLineNo">3029</span> LOG.info(getClientIdAuditPrefix() + " modify " + newNsDescriptor);<a name="line.3029"></a>
-<span class="sourceLineNo">3030</span> // Execute the operation synchronously - wait for the operation to complete before<a name="line.3030"></a>
-<span class="sourceLineNo">3031</span> // continuing.<a name="line.3031"></a>
-<span class="sourceLineNo">3032</span> setProcId(getClusterSchema().modifyNamespace(newNsDescriptor, getNonceKey(), latch));<a name="line.3032"></a>
-<span class="sourceLineNo">3033</span> latch.await();<a name="line.3033"></a>
-<span class="sourceLineNo">3034</span> getMaster().getMasterCoprocessorHost().postModifyNamespace(oldNsDescriptor,<a name="line.3034"></a>
-<span class="sourceLineNo">3035</span> newNsDescriptor);<a name="line.3035"></a>
-<span class="sourceLineNo">3036</span> }<a name="line.3036"></a>
-<span class="sourceLineNo">3037</span><a name="line.3037"></a>
-<span class="sourceLineNo">3038</span> @Override<a name="line.3038"></a>
-<span class="sourceLineNo">3039</span> protected String getDescription() {<a name="line.3039"></a>
-<span class="sourceLineNo">3040</span> return "ModifyNamespaceProcedure";<a name="line.3040"></a>
-<span class="sourceLineNo">3041</span> }<a name="line.3041"></a>
-<span class="sourceLineNo">3042</span> });<a name="line.3042"></a>
-<span class="sourceLineNo">3043</span> }<a name="line.3043"></a>
-<span class="sourceLineNo">3044</span><a name="line.3044"></a>
-<span class="sourceLineNo">3045</span> /**<a name="line.3045"></a>
-<span class="sourceLineNo">3046</span> * Delete an existing Namespace. Only empty Namespaces (no tables) can be removed.<a name="line.3046"></a>
-<span class="sourceLineNo">3047</span> * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.3047"></a>
-<span class="sourceLineNo">3048</span> * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.3048"></a>
-<span class="sourceLineNo">3049</span> * <code>nonceGroup</code> (the source must ensure each operation gets a unique id).<a name="line.3049"></a>
-<span class="sourceLineNo">3050</span> * @return procedure id<a name="line.3050"></a>
-<span class="sourceLineNo">3051</span> */<a name="line.3051"></a>
-<span class="sourceLineNo">3052</span> long deleteNamespace(final String name, final long nonceGroup, final long nonce)<a name="line.3052"></a>
-<span class="sourceLineNo">3053</span> throws IOException {<a name="line.3053"></a>
-<span class="sourceLineNo">3054</span> checkInitialized();<a name="line.3054"></a>
-<span class="sourceLineNo">3055</span><a name="line.3055"></a>
-<span class="sourceLineNo">3056</span> return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.3056"></a>
-<span class="sourceLineNo">3057</span> nonceGroup, nonce) {<a name="line.3057"></a>
-<span class="sourceLineNo">3058</span> @Override<a name="line.3058"></a>
-<span class="sourceLineNo">3059</span> protected void run() throws IOException {<a name="line.3059"></a>
-<span class="sourceLineNo">3060</span> getMaster().getMasterCoprocessorHost().preDeleteNamespace(name);<a name="line.3060"></a>
-<span class="sourceLineNo">3061</span> LOG.info(getClientIdAuditPrefix() + " delete " + name);<a name="line.3061"></a>
-<span class="sourceLineNo">3062</span> // Execute the operation synchronously - wait for the operation to complete before<a name="line.3062"></a>
-<span class="sourceLineNo">3063</span> // continuing.<a name="line.3063"></a>
-<span class="sourceLineNo">3064</span> //<a name="line.3064"></a>
-<span class="sourceLineNo">3065</span> // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.3065"></a>
-<span class="sourceLineNo">3066</span> // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.3066"></a>
-<span class="sourceLineNo">3067</span> ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.3067"></a>
-<span class="sourceLineNo">3068</span> setProcId(submitProcedure(<a name="line.3068"></a>
-<span class="sourceLineNo">3069</span> new DeleteNamespaceProcedure(procedureExecutor.getEnvironment(), name, latch)));<a name="line.3069"></a>
-<span class="sourceLineNo">3070</span> latch.await();<a name="line.3070"></a>
-<span class="sourceLineNo">3071</span> // Will not be invoked in the face of Exception thrown by the Procedure's execution<a name="line.3071"></a>
-<span class="sourceLineNo">3072</span> getMaster().getMasterCoprocessorHost().postDeleteNamespace(name);<a name="line.3072"></a>
-<span class="sourceLineNo">3073</span> }<a name="line.3073"></a>
-<span class="sourceLineNo">3074</span><a name="line.3074"></a>
-<span class="sourceLineNo">3075</span> @Override<a name="line.3075"></a>
-<span class="sourceLineNo">3076</span> protected String getDescription() {<a name="line.3076"></a>
-<span class="sourceLineNo">3077</span> return "DeleteNamespaceProcedure";<a name="line.3077"></a>
-<span class="sourceLineNo">3078</span> }<a name="line.3078"></a>
-<span class="sourceLineNo">3079</span> });<a name="line.3079"></a>
-<span class="sourceLineNo">3080</span> }<a name="line.3080"></a>
-<span class="sourceLineNo">3081</span><a name="line.3081"></a>
-<span class="sourceLineNo">3082</span> /**<a name="line.3082"></a>
-<span class="sourceLineNo">3083</span> * Get a Namespace<a name="line.3083"></a>
-<span class="sourceLineNo">3084</span> * @param name Name of the Namespace<a name="line.3084"></a>
-<span class="sourceLineNo">3085</span> * @return Namespace descriptor for <code>name</code><a name="line.3085"></a>
-<span class="sourceLineNo">3086</span> */<a name="line.3086"></a>
-<span class="sourceLineNo">3087</span> NamespaceDescriptor getNamespace(String name) throws IOException {<a name="line.3087"></a>
-<span class="sourceLineNo">3088</span> checkInitialized();<a name="line.3088"></a>
-<span class="sourceLineNo">3089</span> if (this.cpHost != null) this.cpHost.preGetNamespaceDescriptor(name);<a name="line.3089"></a>
-<span class="sourceLineNo">3090</span> NamespaceDescriptor nsd = this.clusterSchemaService.getNamespace(name);<a name="line.3090"></a>
-<span class="sourceLineNo">3091</span> if (this.cpHost != null) this.cpHost.postGetNamespaceDescriptor(nsd);<a name="line.3091"></a>
-<span class="sourceLineNo">3092</span> return nsd;<a name="line.3092"></a>
-<span class="sourceLineNo">3093</span> }<a name="line.3093"></a>
-<span class="sourceLineNo">3094</span><a name="line.3094"></a>
-<span class="sourceLineNo">3095</span> /**<a name="line.3095"></a>
-<span class="sourceLineNo">3096</span> * Get all Namespaces<a name="line.3096"></a>
-<span class="sourceLineNo">3097</span> * @return All Namespace descriptors<a name="line.3097"></a>
-<span class="sourceLineNo">3098</span> */<a name="line.3098"></a>
-<span class="sourceLineNo">3099</span> List<NamespaceDescriptor> getNamespaces() throws IOException {<a name="line.3099"></a>
-<span class="sourceLineNo">3100</span> checkInitialized();<a name="line.3100"></a>
-<span class="sourceLineNo">3101</span> final List<NamespaceDescriptor> nsds = new ArrayList<>();<a name="line.3101"></a>
-<span class="sourceLineNo">3102</span> if (cpHost != null) {<a name="line.3102"></a>
-<span class="sourceLineNo">3103</span> cpHost.preListNamespaceDescriptors(nsds);<a name="line.3103"></a>
-<span class="sourceLineNo">3104</span> }<a name="line.3104"></a>
-<span class="sourceLineNo">3105</span> nsds.addAll(this.clusterSchemaService.getNamespaces());<a name="line.3105"></a>
-<span class="sourceLineNo">3106</span> if (this.cpHost != null) {<a name="line.3106"></a>
-<span class="sourceLineNo">3107</span> this.cpHost.postListNamespaceDescriptors(nsds);<a name="line.3107"></a>
-<span class="sourceLineNo">3108</span> }<a name="line.3108"></a>
-<span class="sourceLineNo">3109</span> return nsds;<a name="line.3109"></a>
-<span class="sourceLineNo">3110</span> }<a name="line.3110"></a>
-<span class="sourceLineNo">3111</span><a name="line.3111"></a>
-<span class="sourceLineNo">3112</span> @Override<a name="line.3112"></a>
-<span class="sourceLineNo">3113</span> public List<TableName> listTableNamesByNamespace(String name) throws IOException {<a name="line.3113"></a>
-<span class="sourceLineNo">3114</span> checkInitialized();<a name="line.3114"></a>
-<span class="sourceLineNo">3115</span> return listTableNames(name, null, true);<a name="line.3115"></a>
-<span class="sourceLineNo">3116</span> }<a name="line.3116"></a>
-<span class="sourceLineNo">3117</span><a name="line.3117"></a>
-<span class="sourceLineNo">3118</span> @Override<a name="line.3118"></a>
-<span class="sourceLineNo">3119</span> public List<TableDescriptor> listTableDescriptorsByNamespace(String name) throws IOException {<a name="line.3119"></a>
-<span class="sourceLineNo">3120</span> checkInitialized();<a name="line.3120"></a>
-<span class="sourceLineNo">3121</span> return listTableDescriptors(name, null, null, true);<a name="line.3121"></a>
-<span class="sourceLineNo">3122</span> }<a name="line.3122"></a>
-<span class="sourceLineNo">3123</span><a name="line.3123"></a>
-<span class="sourceLineNo">3124</span> @Override<a name="line.3124"></a>
-<span class="sourceLineNo">3125</span> public boolean abortProcedure(final long procId, final boolean mayInterruptIfRunning)<a name="line.3125"></a>
-<span class="sourceLineNo">3126</span> throws IOException {<a name="line.3126"></a>
-<span class="sourceLineNo">3127</span> if (cpHost != null) {<a name="line.3127"></a>
-<span class="sourceLineNo">3128</span> cpHost.preAbortProcedure(this.procedureExecutor, procId);<a name="line.3128"></a>
-<span class="sourceLineNo">3129</span> }<a name="line.3129"></a>
-<span class="sourceLineNo">3130</span><a name="line.3130"></a>
-<span class="sourceLineNo">3131</span> final boolean result = this.procedureExecutor.abort(procId, mayInterruptIfRunning);<a name="line.3131"></a>
-<span class="sourceLineNo">3132</span><a name="line.3132"></a>
-<span class="sourceLineNo">3133</span> if (cpHost != null) {<a name="line.3133"></a>
-<span class="sourceLineNo">3134</span> cpHost.postAbortProcedure();<a name="line.3134"></a>
-<span class="sourceLineNo">3135</span> }<a name="line.3135"></a>
-<span class="sourceLineNo">3136</span><a name="line.3136"></a>
-<span class="sourceLineNo">3137</span> return result;<a name="line.3137"></a>
-<span class="sourceLineNo">3138</span> }<a name="line.3138"></a>
+<span class="sourceLineNo">2825</span> public boolean isInMaintenanceMode() throws IOException {<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span> if (!isInitialized()) {<a name="line.2826"></a>
+<span class="sourceLineNo">2827</span> throw new PleaseHoldException("Master is initializing");<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span> }<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span> return maintenanceModeTracker.isInMaintenanceMode();<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span> }<a name="line.2830"></a>
+<span class="sourceLineNo">2831</span><a name="line.2831"></a>
+<span class="sourceLineNo">2832</span> @VisibleForTesting<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span> public void setInitialized(boolean isInitialized) {<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span> procedureExecutor.getEnvironment().setEventReady(initialized, isInitialized);<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span> }<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span><a name="line.2836"></a>
+<span class="sourceLineNo">2837</span> @Override<a name="line.2837"></a>
+<span class="sourceLineNo">2838</span> public ProcedureEvent<?> getInitializedEvent() {<a name="line.2838"></a>
+<span class="sourceLineNo">2839</span> return initialized;<a name="line.2839"></a>
+<span class="sourceLineNo">2840</span> }<a name="line.2840"></a>
+<span class="sourceLineNo">2841</span><a name="line.2841"></a>
+<span class="sourceLineNo">2842</span> /**<a name="line.2842"></a>
+<span class="sourceLineNo">2843</span> * ServerCrashProcessingEnabled is set false before completing assignMeta to prevent processing<a name="line.2843"></a>
+<span class="sourceLineNo">2844</span> * of crashed servers.<a name="line.2844"></a>
+<span class="sourceLineNo">2845</span> * @return true if assignMeta has completed;<a name="line.2845"></a>
+<span class="sourceLineNo">2846</span> */<a name="line.2846"></a>
+<span class="sourceLineNo">2847</span> @Override<a name="line.2847"></a>
+<span class="sourceLineNo">2848</span> public boolean isServerCrashProcessingEnabled() {<a name="line.2848"></a>
+<span class="sourceLineNo">2849</span> return serverCrashProcessingEnabled.isReady();<a name="line.2849"></a>
+<span class="sourceLineNo">2850</span> }<a name="line.2850"></a>
+<span class="sourceLineNo">2851</span><a name="line.2851"></a>
+<span class="sourceLineNo">2852</span> @VisibleForTesting<a name="line.2852"></a>
+<span class="sourceLineNo">2853</span> public void setServerCrashProcessingEnabled(final boolean b) {<a name="line.2853"></a>
+<span class="sourceLineNo">2854</span> procedureExecutor.getEnvironment().setEventReady(serverCrashProcessingEnabled, b);<a name="line.2854"></a>
+<span class="sourceLineNo">2855</span> }<a name="line.2855"></a>
+<span class="sourceLineNo">2856</span><a name="line.2856"></a>
+<span class="sourceLineNo">2857</span> public ProcedureEvent<?> getServerCrashProcessingEnabledEvent() {<a name="line.2857"></a>
+<span class="sourceLineNo">2858</span> return serverCrashProcessingEnabled;<a name="line.2858"></a>
+<span class="sourceLineNo">2859</span> }<a name="line.2859"></a>
+<span class="sourceLineNo">2860</span><a name="line.2860"></a>
+<span class="sourceLineNo">2861</span> /**<a name="line.2861"></a>
+<span class="sourceLineNo">2862</span> * Compute the average load across all region servers.<a name="line.2862"></a>
+<span class="sourceLineNo">2863</span> * Currently, this uses a very naive computation - just uses the number of<a name="line.2863"></a>
+<span class="sourceLineNo">2864</span> * regions being served, ignoring stats about number of requests.<a name="line.2864"></a>
+<span class="sourceLineNo">2865</span> * @return the average load<a name="line.2865"></a>
+<span class="sourceLineNo">2866</span> */<a name="line.2866"></a>
+<span class="sourceLineNo">2867</span> public double getAverageLoad() {<a name="line.2867"></a>
+<span class="sourceLineNo">2868</span> if (this.assignmentManager == null) {<a name="line.2868"></a>
+<span class="sourceLineNo">2869</span> return 0;<a name="line.2869"></a>
+<span class="sourceLineNo">2870</span> }<a name="line.2870"></a>
+<span class="sourceLineNo">2871</span><a name="line.2871"></a>
+<span class="sourceLineNo">2872</span> RegionStates regionStates = this.assignmentManager.getRegionStates();<a name="line.2872"></a>
+<span class="sourceLineNo">2873</span> if (regionStates == null) {<a name="line.2873"></a>
+<span class="sourceLineNo">2874</span> return 0;<a name="line.2874"></a>
+<span class="sourceLineNo">2875</span> }<a name="line.2875"></a>
+<span class="sourceLineNo">2876</span> return regionStates.getAverageLoad();<a name="line.2876"></a>
+<span class="sourceLineNo">2877</span> }<a name="line.2877"></a>
+<span class="sourceLineNo">2878</span><a name="line.2878"></a>
+<span class="sourceLineNo">2879</span> /*<a name="line.2879"></a>
+<span class="sourceLineNo">2880</span> * @return the count of region split plans executed<a name="line.2880"></a>
+<span class="sourceLineNo">2881</span> */<a name="line.2881"></a>
+<span class="sourceLineNo">2882</span> public long getSplitPlanCount() {<a name="line.2882"></a>
+<span class="sourceLineNo">2883</span> return splitPlanCount;<a name="line.2883"></a>
+<span class="sourceLineNo">2884</span> }<a name="line.2884"></a>
+<span class="sourceLineNo">2885</span><a name="line.2885"></a>
+<span class="sourceLineNo">2886</span> /*<a name="line.2886"></a>
+<span class="sourceLineNo">2887</span> * @return the count of region merge plans executed<a name="line.2887"></a>
+<span class="sourceLineNo">2888</span> */<a name="line.2888"></a>
+<span class="sourceLineNo">2889</span> public long getMergePlanCount() {<a name="line.2889"></a>
+<span class="sourceLineNo">2890</span> return mergePlanCount;<a name="line.2890"></a>
+<span class="sourceLineNo">2891</span> }<a name="line.2891"></a>
+<span class="sourceLineNo">2892</span><a name="line.2892"></a>
+<span class="sourceLineNo">2893</span> @Override<a name="line.2893"></a>
+<span class="sourceLineNo">2894</span> public boolean registerService(Service instance) {<a name="line.2894"></a>
+<span class="sourceLineNo">2895</span> /*<a name="line.2895"></a>
+<span class="sourceLineNo">2896</span> * No stacking of instances is allowed for a single service name<a name="line.2896"></a>
+<span class="sourceLineNo">2897</span> */<a name="line.2897"></a>
+<span class="sourceLineNo">2898</span> Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.2898"></a>
+<span class="sourceLineNo">2899</span> String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.2899"></a>
+<span class="sourceLineNo">2900</span> if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.2900"></a>
+<span class="sourceLineNo">2901</span> LOG.error("Coprocessor service "+serviceName+<a name="line.2901"></a>
+<span class="sourceLineNo">2902</span> " already registered, rejecting request from "+instance<a name="line.2902"></a>
+<span class="sourceLineNo">2903</span> );<a name="line.2903"></a>
+<span class="sourceLineNo">2904</span> return false;<a name="line.2904"></a>
+<span class="sourceLineNo">2905</span> }<a name="line.2905"></a>
+<span class="sourceLineNo">2906</span><a name="line.2906"></a>
+<span class="sourceLineNo">2907</span> coprocessorServiceHandlers.put(serviceName, instance);<a name="line.2907"></a>
+<span class="sourceLineNo">2908</span> if (LOG.isDebugEnabled()) {<a name="line.2908"></a>
+<span class="sourceLineNo">2909</span> LOG.debug("Registered master coprocessor service: service="+serviceName);<a name="line.2909"></a>
+<span class="sourceLineNo">2910</span> }<a name="line.2910"></a>
+<span class="sourceLineNo">2911</span> return true;<a name="line.2911"></a>
+<span class="sourceLineNo">2912</span> }<a name="line.2912"></a>
+<span class="sourceLineNo">2913</span><a name="line.2913"></a>
+<span class="sourceLineNo">2914</span> /**<a name="line.2914"></a>
+<span class="sourceLineNo">2915</span> * Utility for constructing an instance of the passed HMaster class.<a name="line.2915"></a>
+<span class="sourceLineNo">2916</span> * @param masterClass<a name="line.2916"></a>
+<span class="sourceLineNo">2917</span> * @return HMaster instance.<a name="line.2917"></a>
+<span class="sourceLineNo">2918</span> */<a name="line.2918"></a>
+<span class="sourceLineNo">2919</span> public static HMaster constructMaster(Class<? extends HMaster> masterClass,<a name="line.2919"></a>
+<span class="sourceLineNo">2920</span> final Configuration conf) {<a name="line.2920"></a>
+<span class="sourceLineNo">2921</span> try {<a name="line.2921"></a>
+<span class="sourceLineNo">2922</span> Constructor<? extends HMaster> c = masterClass.getConstructor(Configuration.class);<a name="line.2922"></a>
+<span class="sourceLineNo">2923</span> return c.newInstance(conf);<a name="line.2923"></a>
+<span class="sourceLineNo">2924</span> } catch(Exception e) {<a name="line.2924"></a>
+<span class="sourceLineNo">2925</span> Throwable error = e;<a name="line.2925"></a>
+<span class="sourceLineNo">2926</span> if (e instanceof InvocationTargetException &&<a name="line.2926"></a>
+<span class="sourceLineNo">2927</span> ((InvocationTargetException)e).getTargetException() != null) {<a name="line.2927"></a>
+<span class="sourceLineNo">2928</span> error = ((InvocationTargetException)e).getTargetException();<a name="line.2928"></a>
+<span class="sourceLineNo">2929</span> }<a name="line.2929"></a>
+<span class="sourceLineNo">2930</span> throw new RuntimeException("Failed construction of Master: " + masterClass.toString() + ". "<a name="line.2930"></a>
+<span class="sourceLineNo">2931</span> , error);<a name="line.2931"></a>
+<span class="sourceLineNo">2932</span> }<a name="line.2932"></a>
+<span class="sourceLineNo">2933</span> }<a name="line.2933"></a>
+<span class="sourceLineNo">2934</span><a name="line.2934"></a>
+<span class="sourceLineNo">2935</span> /**<a name="line.2935"></a>
+<span class="sourceLineNo">2936</span> * @see org.apache.hadoop.hbase.master.HMasterCommandLine<a name="line.2936"></a>
+<span class="sourceLineNo">2937</span> */<a name="line.2937"></a>
+<span class="sourceLineNo">2938</span> public static void main(String [] args) {<a name="line.2938"></a>
+<span class="sourceLineNo">2939</span> LOG.info("STARTING service " + HMaster.class.getSimpleName());<a name="line.2939"></a>
+<span class="sourceLineNo">2940</span> VersionInfo.logVersion();<a name="line.2940"></a>
+<span class="sourceLineNo">2941</span> new HMasterCommandLine(HMaster.class).doMain(args);<a name="line.2941"></a>
+<span class="sourceLineNo">2942</span> }<a name="line.2942"></a>
+<span class="sourceLineNo">2943</span><a name="line.2943"></a>
+<span class="sourceLineNo">2944</span> public HFileCleaner getHFileCleaner() {<a name="line.2944"></a>
+<span class="sourceLineNo">2945</span> return this.hfileCleaner;<a name="line.2945"></a>
+<span class="sourceLineNo">2946</span> }<a name="line.2946"></a>
+<span class="sourceLineNo">2947</span><a name="line.2947"></a>
+<span class="sourceLineNo">2948</span> public LogCleaner getLogCleaner() {<a name="line.2948"></a>
+<span class="sourceLineNo">2949</span> return this.logCleaner;<a name="line.2949"></a>
+<span class="sourceLineNo">2950</span> }<a name="line.2950"></a>
+<span class="sourceLineNo">2951</span><a name="line.2951"></a>
+<span class="sourceLineNo">2952</span> /**<a name="line.2952"></a>
+<span class="sourceLineNo">2953</span> * @return the underlying snapshot manager<a name="line.2953"></a>
+<span class="sourceLineNo">2954</span> */<a name="line.2954"></a>
+<span class="sourceLineNo">2955</span> @Override<a name="line.2955"></a>
+<span class="sourceLineNo">2956</span> public SnapshotManager getSnapshotManager() {<a name="line.2956"></a>
+<span class="sourceLineNo">2957</span> return this.snapshotManager;<a name="line.2957"></a>
+<span class="sourceLineNo">2958</span> }<a name="line.2958"></a>
+<span class="sourceLineNo">2959</span><a name="line.2959"></a>
+<span class="sourceLineNo">2960</span> /**<a name="line.2960"></a>
+<span class="sourceLineNo">2961</span> * @return the underlying MasterProcedureManagerHost<a name="line.2961"></a>
+<span class="sourceLineNo">2962</span> */<a name="line.2962"></a>
+<span class="sourceLineNo">2963</span> @Override<a name="line.2963"></a>
+<span class="sourceLineNo">2964</span> public MasterProcedureManagerHost getMasterProcedureManagerHost() {<a name="line.2964"></a>
+<span class="sourceLineNo">2965</span> return mpmHost;<a name="line.2965"></a>
+<span class="sourceLineNo">2966</span> }<a name="line.2966"></a>
+<span class="sourceLineNo">2967</span><a name="line.2967"></a>
+<span class="sourceLineNo">2968</span> @Override<a name="line.2968"></a>
+<span class="sourceLineNo">2969</span> public ClusterSchema getClusterSchema() {<a name="line.2969"></a>
+<span class="sourceLineNo">2970</span> return this.clusterSchemaService;<a name="line.2970"></a>
+<span class="sourceLineNo">2971</span> }<a name="line.2971"></a>
+<span class="sourceLineNo">2972</span><a name="line.2972"></a>
+<span class="sourceLineNo">2973</span> /**<a name="line.2973"></a>
+<span class="sourceLineNo">2974</span> * Create a new Namespace.<a name="line.2974"></a>
+<span class="sourceLineNo">2975</span> * @param namespaceDescriptor descriptor for new Namespace<a name="line.2975"></a>
+<span class="sourceLineNo">2976</span> * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.2976"></a>
+<span class="sourceLineNo">2977</span> * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.2977"></a>
+<span class="sourceLineNo">2978</span> * <code>nonceGroup</code> (the source must ensure each operation gets a unique id).<a name="line.2978"></a>
+<span class="sourceLineNo">2979</span> * @return procedure id<a name="line.2979"></a>
+<span class="sourceLineNo">2980</span> */<a name="line.2980"></a>
+<span class="sourceLineNo">2981</span> long createNamespace(final NamespaceDescriptor namespaceDescriptor, final long nonceGroup,<a name="line.2981"></a>
+<span class="sourceLineNo">2982</span> final long nonce) throws IOException {<a name="line.2982"></a>
+<span class="sourceLineNo">2983</span> checkInitialized();<a name="line.2983"></a>
+<span class="sourceLineNo">2984</span><a name="line.2984"></a>
+<span class="sourceLineNo">2985</span> TableName.isLegalNamespaceName(Bytes.toBytes(namespaceDescriptor.getName()));<a name="line.2985"></a>
+<span class="sourceLineNo">2986</span><a name="line.2986"></a>
+<span class="sourceLineNo">2987</span> return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.2987"></a>
+<span class="sourceLineNo">2988</span> nonceGroup, nonce) {<a name="line.2988"></a>
+<span class="sourceLineNo">2989</span> @Override<a name="line.2989"></a>
+<span class="sourceLineNo">2990</span> protected void run() throws IOException {<a name="line.2990"></a>
+<span class="sourceLineNo">2991</span> getMaster().getMasterCoprocessorHost().preCreateNamespace(namespaceDescriptor);<a name="line.2991"></a>
+<span class="sourceLineNo">2992</span> // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.2992"></a>
+<span class="sourceLineNo">2993</span> // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.2993"></a>
+<span class="sourceLineNo">2994</span> ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.2994"></a>
+<span class="sourceLineNo">2995</span> LOG.info(getClientIdAuditPrefix() + " creating " + namespaceDescriptor);<a name="line.2995"></a>
+<span class="sourceLineNo">2996</span> // Execute the operation synchronously - wait for the operation to complete before<a name="line.2996"></a>
+<span class="sourceLineNo">2997</span> // continuing.<a name="line.2997"></a>
+<span class="sourceLineNo">2998</span> setProcId(getClusterSchema().createNamespace(namespaceDescriptor, getNonceKey(), latch));<a name="line.2998"></a>
+<span class="sourceLineNo">2999</span> latch.await();<a name="line.2999"></a>
+<span class="sourceLineNo">3000</span> getMaster().getMasterCoprocessorHost().postCreateNamespace(namespaceDescriptor);<a name="line.3000"></a>
+<span class="sourceLineNo">3001</span> }<a name="line.3001"></a>
+<span class="sourceLineNo">3002</span><a name="line.3002"></a>
+<span class="sourceLineNo">3003</span> @Override<a name="line.3003"></a>
+<span class="sourceLineNo">3004</span> protected String getDescription() {<a name="line.3004"></a>
+<span class="sourceLineNo">3005</span> return "CreateNamespaceProcedure";<a name="line.3005"></a>
+<span class="sourceLineNo">3006</span> }<a name="line.3006"></a>
+<span class="sourceLineNo">3007</span> });<a name="line.3007"></a>
+<span class="sourceLineNo">3008</span> }<a name="line.3008"></a>
+<span class="sourceLineNo">3009</span><a name="line.3009"></a>
+<span class="sourceLineNo">3010</span> /**<a name="line.3010"></a>
+<span class="sourceLineNo">3011</span> * Modify an existing Namespace.<a name="line.3011"></a>
+<span class="sourceLineNo">3012</span> * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.3012"></a>
+<span class="sourceLineNo">3013</span> * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.3013"></a>
+<span class="sourceLineNo">3014</span> * <code>nonceGroup</code> (the source must ensure each operation gets a unique id).<a name="line.3014"></a>
+<span class="sourceLineNo">3015</span> * @return procedure id<a name="line.3015"></a>
+<span class="sourceLineNo">3016</span> */<a name="line.3016"></a>
+<span class="sourceLineNo">3017</span> long modifyNamespace(final NamespaceDescriptor newNsDescriptor, final long nonceGroup,<a name="line.3017"></a>
+<span class="sourceLineNo">3018</span> final long nonce) throws IOException {<a name="line.3018"></a>
+<span class="sourceLineNo">3019</span> checkInitialized();<a name="line.3019"></a>
+<span class="sourceLineNo">3020</span><a name="line.3020"></a>
+<span class="sourceLineNo">3021</span> TableName.isLegalNamespaceName(Bytes.toBytes(newNsDescriptor.getName()));<a name="line.3021"></a>
+<span class="sourceLineNo">3022</span><a name="line.3022"></a>
+<span class="sourceLineNo">3023</span> return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.3023"></a>
+<span class="sourceLineNo">3024</span> nonceGroup, nonce) {<a name="line.3024"></a>
+<span class="sourceLineNo">3025</span> @Override<a name="line.3025"></a>
+<span class="sourceLineNo">3026</span> protected void run() throws IOException {<a name="line.3026"></a>
+<span class="sourceLineNo">3027</span> NamespaceDescriptor oldNsDescriptor = getNamespace(newNsDescriptor.getName());<a name="line.3027"></a>
+<span class="sourceLineNo">3028</span> getMaster().getMasterCoprocessorHost().preModifyNamespace(oldNsDescriptor, newNsDescriptor);<a name="line.3028"></a>
+<span class="sourceLineNo">3029</span> // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.3029"></a>
+<span class="sourceLineNo">3030</span> // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.3030"></a>
+<span class="sourceLineNo">3031</span> ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.3031"></a>
+<span class="sourceLineNo">3032</span> LOG.info(getClientIdAuditPrefix() + " modify " + newNsDescriptor);<a name="line.3032"></a>
+<span class="sourceLineNo">3033</span> // Execute the operation synchronously - wait for the operation to complete before<a name="line.3033"></a>
+<span class="sourceLineNo">3034</span> // continuing.<a name="line.3034"></a>
+<span class="sourceLineNo">3035</span> setProcId(getClusterSchema().modifyNamespace(newNsDescriptor, getNonceKey(), latch));<a name="line.3035"></a>
+<span class="sourceLineNo">3036</span> latch.await();<a name="line.3036"></a>
+<span class="sourceLineNo">3037</span> getMaster().getMasterCoprocessorHost().postModifyNamespace(oldNsDescriptor,<a name="line.3037"></a>
+<span class="sourceLineNo">3038</span> newNsDescriptor);<a name="line.3038"></a>
+<span class="sourceLineNo">3039</span> }<a name="line.3039"></a>
+<span class="sourceLineNo">3040</span><a name="line.3040"></a>
+<span class="sourceLineNo">3041</span> @Override<a name="line.3041"></a>
+<span class="sourceLineNo">3042</span> protected String getDescription() {<a name="line.3042"></a>
+<span class="sourceLineNo">3043</span> return "ModifyNamespaceProcedure";<a name="line.3043"></a>
+<span class="sourceLineNo">3044</span> }<a name="line.3044"></a>
+<span class="sourceLineNo">3045</span> });<a name="line.3045"></a>
+<span class="sourceLineNo">3046</span> }<a name="line.3046"></a>
+<span class="sourceLineNo">3047</span><a name="line.3047"></a>
+<span class="sourceLineNo">3048</span> /**<a name="line.3048"></a>
+<span class="sourceLineNo">3049</span> * Delete an existing Namespace. Only empty Namespaces (no tables) can be removed.<a name="line.3049"></a>
+<span class="sourceLineNo">3050</span> * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.3050"></a>
+<span class="sourceLineNo">3051</span> * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.3051"></a>
+<span class="sourceLineNo">3052</span> * <code>nonceGroup</code> (the source must ensure each operation gets a unique id).<a name="line.3052"></a>
+<span class="sourceLineNo">3053</span> * @return procedure id<a name="line.3053"></a>
+<span class="sourceLineNo">3054</span> */<a name="line.3054"></a>
+<span class="sourceLineNo">3055</span> long deleteNamespace(final String name, final long nonceGroup, final long nonce)<a name="line.3055"></a>
+<span class="sourceLineNo">3056</span> throws IOException {<a name="line.3056"></a>
+<span class="sourceLineNo">3057</span> checkInitialized();<a name="line.3057"></a>
+<span class="sourceLineNo">3058</span><a name="line.3058"></a>
+<span class="sourceLineNo">3059</span> return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.3059"></a>
+<span class="sourceLineNo">3060</span> nonceGroup, nonce) {<a name="line.3060"></a>
+<span class="sourceLineNo">3061</span> @Override<a name="line.3061"></a>
+<span class="sourceLineNo">3062</span> protected void run() throws IOException {<a name="line.3062"></a>
+<span class="sourceLineNo">3063</span> getMaster().getMasterCoprocessorHost().preDeleteNamespace(name);<a name="line.3063"></a>
+<span class="sourceLineNo">3064</span> LOG.info(getClientIdAuditPrefix() + " delete " + name);<a name="line.3064"></a>
+<span class="sourceLineNo">3065</span> // Execute the operation synchronously - wait for the operation to complete before<a name="line.3065"></a>
+<span class="sourceLineNo">3066</span> // continuing.<a name="line.3066"></a>
+<span class="sourceLineNo">3067</span> //<a name="line.3067"></a>
+<span class="sourceLineNo">3068</span> // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.3068"></a>
+<span class="sourceLineNo">3069</span> // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.3069"></a>
+<span class="sourceLineNo">3070</span> ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.3070"></a>
+<span class="sourceLineNo">3071</span> setProcId(submitProcedure(<a name="line.3071"></a>
+<span class="sourceLineNo">3072</span> new DeleteNamespaceProcedure(procedureExecutor.getEnvironment(), name, latch)));<a name="line.3072"></a>
+<span class="sourceLineNo">3073</span> latch.await();<a name="line.3073"></a>
+<span class="sourceLineNo">3074</span> // Will not be invoked in the face of Exception thrown by the Procedure's execution<a name="line.3074"></a>
+<span class="sourceLineNo">3075</span> getMaster().getMasterCoprocessorHost().postDeleteNamespace(name);<a name="line.3075"></a>
+<span class="sourceLineNo">3076</span> }<a name="line.3076"></a>
+<span class="sourceLineNo">3077</span><a name="line.3077"></a>
+<span class="sourceLineNo">3078</span> @Override<a name="line.3078"></a>
+<span class="sourceLineNo">3079</span> protected String getDescription() {<a name="line.3079"></a>
+<span class="sourceLineNo">3080</span> return "DeleteNamespaceProcedure";<a name="line.3080"></a>
+<span class="sourceLineNo">3081</span> }<a name="line.3081"></a>
+<span class="sourceLineNo">3082</span> });<a name="line.3082"></a>
+<span class="sourceLineNo">3083</span> }<a name="line.3083"></a>
+<span class="sourceLineNo">3084</span><a name="line.3084"></a>
+<span class="sourceLineNo">3085</span> /**<a name="line.3085"></a>
+<span class="sourceLineNo">3086</span> * Get a Namespace<a name="line.3086"></a>
+<span class="sourceLineNo">3087</span> * @param name Name of the Namespace<a name="line.3087"></a>
+<span class="sourceLineNo">3088</span> * @return Namespace descriptor for <code>name</code><a name="line.3088"></a>
+<span class="sourceLineNo">3089</span> */<a name="line.3089"></a>
+<span class="sourceLineNo">3090</span> NamespaceDescriptor getNamespace(String name) throws IOException {<a name="line.3090"></a>
+<span class="sourceLineNo">3091</span> checkInitialized();<a name="line.3091"></a>
+<span class="sourceLineNo">3092</span> if (this.cpHost != null) this.cpHost.preGetNamespaceDescriptor(name);<a name="line.3092"></a>
+<span class="sourceLineNo">3093</span> NamespaceDescriptor nsd = this.clusterSchemaService.getNamespace(name);<a name="line.3093"></a>
+<span class="sourceLineNo">3094</span> if (this.cpHost != null) this.cpHost.postGetNamespaceDescriptor(nsd);<a name="line.3094"></a>
+<span class="sourceLineNo">3095</span> return nsd;<a name="line.3095"></a>
+<span class="sourceLineNo">3096</span> }<a name="line.3096"></a>
+<span class="sourceLineNo">3097</span><a name="line.3097"></a>
+<span class="sourceLineNo">3098</span> /**<a name="line.3098"></a>
+<span class="sourceLineNo">3099</span> * Get all Namespaces<a name="line.3099"></a>
+<span class="sourceLineNo">3100</span> * @return All Namespace descriptors<a name="line.3100"></a>
+<span class="sourceLineNo">3101</span> */<a name="line.3101"></a>
+<span class="sourceLineNo">3102</span> List<NamespaceDescriptor> getNamespaces() throws IOException {<a name="line.3102"></a>
+<span class="sourceLineNo">3103</span> checkInitialized();<a name="line.3103"></a>
+<span class="sourceLineNo">3104</span> final List<NamespaceDescriptor> nsds = new ArrayList<>();<a name="line.3104"></a>
+<span class="sourceLineNo">3105</span> if (cpHost != null) {<a name="line.3105"></a>
+<span class="sourceLineNo">3106</span> cpHost.preListNamespaceDescriptors(nsds);<a name="line.3106"></a>
+<span class="sourceLineNo">3107</span> }<a name="line.3107"></a>
+<span class="sourceLineNo">3108</span> nsds.addAll(this.clusterSchemaService.getNamespaces());<a name="line.3108"></a>
+<span class="sourceLineNo">3109</span> if (this.cpHost != null) {<a name="line.3109"></a>
+<span class="sourceLineNo">3110</span> this.cpHost.postListNamespaceDescriptors(nsds);<a name="line.3110"></a>
+<span class="sourceLineNo">3111</span> }<a name="line.3111"></a>
+<span class="sourceLineNo">3112</span> return nsds;<a name="line.3112"></a>
+<span class="sourceLineNo">3113</span> }<a name="line.3113"></a>
+<span class="sourceLineNo">3114</span><a name="line.3114"></a>
+<span class="sourceLineNo">3115</span> @Override<a name="line.3115"></a>
+<span class="sourceLineNo">3116</span> public List<TableName> listTableNamesByNamespace(String name) throws IOException {<a name="line.3116"></a>
+<span class="sourceLineNo">3117</span> checkInitialized();<a name="line.3117"></a>
+<span class="sourceLineNo">3118</span> return listTableNames(name, null, true);<a name="line.3118"></a>
+<span class="sourceLineNo">3119</span> }<a name="line.3119"></a>
+<span class="sourceLineNo">3120</span><a name="line.3120"></a>
+<span class="sourceLineNo">3121</span> @Override<a name="line.3121"></a>
+<span class="sourceLineNo">3122</span> public List<TableDescriptor> listTableDescriptorsByNamespace(String name) throws IOException {<a name="line.3122"></a>
+<span class="sourceLineNo">3123</span> checkInitialized();<a name="line.3123"></a>
+<span class="sourceLineNo">3124</span> return listTableDescriptors(name, null, null, true);<a name="line.3124"></a>
+<span class="sourceLineNo">3125</span> }<a name="line.3125"></a>
+<span class="sourceLineNo">3126</span><a name="line.3126"></a>
+<span class="sourceLineNo">3127</span> @Override<a name="line.3127"></a>
+<span class="sourceLineNo">3128</span> public boolean abortProcedure(final long procId, final boolean mayInterruptIfRunning)<a name="line.3128"></a>
+<span class="sourceLineNo">3129</span> throws IOException {<a name="line.3129"></a>
+<span class="sourceLineNo">3130</span> if (cpHost != null) {<a name="line.3130"></a>
+<span class="sourceLineNo">3131</span> cpHost.preAbortProcedure(this.procedureExecutor, procId);<a name="line.3131"></a>
+<span class="sourceLineNo">3132</span> }<a name="line.3132"></a>
+<span class="sourceLineNo">3133</span><a name="line.3133"></a>
+<span class="sourceLineNo">3134</span> final boolean result = this.procedureExecutor.abort(procId, mayInterruptIfRunning);<a name="line.3134"></a>
+<span class="sourceLineNo">3135</span><a name="line.3135"></a>
+<span class="sourceLineNo">3136</span> if (cpHost != null) {<a name="line.3136"></a>
+<span class="sourceLineNo">3137</span> cpHost.postAbortProcedure();<a name="line.3137"></a>
+<span class="sourceLineNo">3138</span> }<a name="line.3138"></a>
<span class="sourceLineNo">3139</span><a name="line.3139"></a>
-<span class="sourceLineNo">3140</span> @Override<a name="line.3140"></a>
-<span class="sourceLineNo">3141</span> public List<Procedure<?>> getProcedures() throws IOException {<a name="line.3141"></a>
-<span class="sourceLineNo">3142</span> if (cpHost != null) {<a name="line.3142"></a>
-<span class="sourceLineNo">3143</span> cpHost.preGetProcedures();<a name="line.3143"></a>
-<span class="sourceLineNo">3144</span> }<a name="line.3144"></a>
-<span class="sourceLineNo">3145</span><a name="line.3145"></a>
-<span class="sourceLineNo">3146</span> final List<Procedure<?>> procList = this.procedureExecutor.getProcedures();<a name="line.3146"></a>
-<span class="sourceLineNo">3147</span><a name="line.3147"></a>
-<span class="sourceLineNo">3148</span> if (cpHost != null) {<a name="line.3148"></a>
-<span class="sourceLineNo">3149</span> cpHost.postGetProcedures(procList);<a name="line.3149"></a>
-<span class="sourceLineNo">3150</span> }<a name="line.3150"></a>
-<span class="sourceLineNo">3151</span><a name="line.3151"></a>
-<span class="sourceLineNo">3152</span> return procList;<a name="line.3152"></a>
-<span class="sourceLineNo">3153</span> }<a name="line.3153"></a>
+<span class="sourceLineNo">3140</span> return result;<a name="line.3140"></a>
+<span class="sourceLineNo">3141</span> }<a name="line.3141"></a>
+<span class="sourceLineNo">3142</span><a name="line.3142"></a>
+<span class="sourceLineNo">3143</span> @Override<a name="line.3143"></a>
+<span class="sourceLineNo">3144</span> public List<Procedure<?>> getProcedures() throws IOException {<a name="line.3144"></a>
+<span class="sourceLineNo">3145</span> if (cpHost != null) {<a name="line.3145"></a>
+<span class="sourceLineNo">3146</span> cpHost.preGetProcedures();<a name="line.3146"></a>
+<span class="sourceLineNo">3147</span> }<a name="line.3147"></a>
+<span class="sourceLineNo">3148</span><a name="line.3148"></a>
+<span class="sourceLineNo">3149</span> final List<Procedure<?>> procList = this.procedureExecutor.getProcedures();<a name="line.3149"></a>
+<span class="sourceLineNo">3150</span><a name="line.3150"></a>
+<span class="sourceLineNo">3151</span> if (cpHost != null) {<a name="line.3151"></a>
+<span class="sourceLineNo">3152</span> cpHost.postGetProcedures(procList);<a name="line.3152"></a>
+<span class="sourceLineNo">3153</span> }<a name="line.3153"></a>
<span class="sourceLineNo">3154</span><a name="line.3154"></a>
-<span class="sourceLineNo">3155</span> @Override<a name="line.3155"></a>
-<span class="sourceLineNo">3156</span> public List<LockedResource> getLocks() throws IOException {<a name="line.3156"></a>
-<span class="sourceLineNo">3157</span> if (cpHost != null) {<a name="line.3157"></a>
-<span class="sourceLineNo">3158</span> cpHost.preGetLocks();<a name="line.3158"></a>
-<span class="sourceLineNo">3159</span> }<a name="line.3159"></a>
-<span class="sourceLineNo">3160</span><a name="line.3160"></a>
-<span class="sourceLineNo">3161</span> MasterProcedureScheduler procedureScheduler = procedureExecutor.getEnvironment().getProcedureScheduler();<a name="line.3161"></a>
-<span class="sourceLineNo">3162</span><a name="line.3162"></a>
-<span class="sourceLineNo">3163</span> final List<LockedResource> lockedResources = procedureScheduler.getLocks();<a name="line.3163"></a>
-<span class="sourceLineNo">3164</span><a name="line.3164"></a>
-<span class="sourceLineNo">3165</span> if (cpHost != null) {<a name="line.3165"></a>
-<span class="sourceLineNo">3166</span> cpHost.postGetLocks(lockedResources);<a name="line.3166"></a>
-<span class="sourceLineNo">3167</span> }<a name="line.3167"></a>
-<span class="sourceLineNo">3168</span><a name="line.3168"></a>
-<span class="sourceLineNo">3169</span> return lockedResources;<a name="line.3169"></a>
-<span class="sourceLineNo">3170</span> }<a name="line.3170"></a>
+<span class="sourceLineNo">3155</span> return procList;<a name="line.3155"></a>
+<span class="sourceLineNo">3156</span> }<a name="line.3156"></a>
+<span class="sourceLineNo">3157</span><a name="line.3157"></a>
+<span class="sourceLineNo">3158</span> @Override<a name="line.3158"></a>
+<span class="sourceLineNo">3159</span> public List<LockedResource> getLocks() throws IOException {<a name="line.3159"></a>
+<span class="sourceLineNo">3160</span> if (cpHost != null) {<a name="line.3160"></a>
+<span class="sourceLineNo">3161</span> cpHost.preGetLocks();<a name="line.3161"></a>
+<span class="sourceLineNo">3162</span> }<a name="line.3162"></a>
+<span class="sourceLineNo">3163</span><a name="line.3163"></a>
+<span class="sourceLineNo">3164</span> MasterProcedureScheduler procedureScheduler = procedureExecutor.getEnvironment().getProcedureScheduler();<a name="line.3164"></a>
+<span class="sourceLineNo">3165</span><a name="line.3165"></a>
+<span class="sourceLineNo">3166</span> final List<LockedResource> lockedResources = procedureScheduler.getLocks();<a name="line.3166"></a>
+<span class="sourceLineNo">3167</span><a name="line.3167"></a>
+<span class="sourceLineNo">3168</span> if (cpHost != null) {<a name="line.3168"></a>
+<span class="sourceLineNo">3169</span> cpHost.postGetLocks(lockedResources);<a name="line.3169"></a>
+<span class="sourceLineNo">3170</span> }<a name="line.3170"></a>
<span class="sourceLineNo">3171</span><a name="line.3171"></a>
-<span class="sourceLineNo">3172</span> /**<a name="line.3172"></a>
-<span class="sourceLineNo">3173</span> * Returns the list of table descriptors that match the specified request<a name="line.3173"></a>
-<span class="sourceLineNo">3174</span> * @param namespace the namespace to query, or null if querying for all<a name="line.3174"></a>
-<span class="sourceLineNo">3175</span> * @param regex The regular expression to match against, or null if querying for all<a name="line.3175"></a>
-<span class="sourceLineNo">3176</span> * @param tableNameList the list of table names, or null if querying for all<a name="line.3176"></a>
-<span class="sourceLineNo">3177</span> * @param includeSysTables False to match only against userspace tables<a name="line.3177"></a>
-<span class="sourceLineNo">3178</span> * @return the list of table descriptors<a name="line.3178"></a>
-<span class="sourceLineNo">3179</span> */<a name="line.3179"></a>
-<span class="sourceLineNo">3180</span> public List<TableDescriptor> listTableDescriptors(final String namespace, final String regex,<a name="line.3180"></a>
-<span class="sourceLineNo">3181</span> final List<TableName> tableNameList, final boolean includeSysTables)<a name="line.3181"></a>
-<span class="sourceLineNo">3182</span> throws IOException {<a name="line.3182"></a>
-<span class="sourceLineNo">3183</span> List<TableDescriptor> htds = new ArrayList<>();<a name="line.3183"></a>
-<span class="sourceLineNo">3184</span> if (cpHost != null) {<a name="line.3184"></a>
-<span class="sourceLineNo">3185</span> cpHost.preGetTableDescriptors(tableNameList, htds, regex);<a name="line.3185"></a>
-<span class="sourceLineNo">3186</span> }<a name="line.3186"></a>
-<span class="sourceLineNo">3187</span> htds = getTableDescriptors(htds, namespace, regex, tableNameList, includeSysTables);<a name="line.3187"></a>
-<span class="sourceLineNo">3188</span> if (cpHost != null) {<a name="line.3188"></a>
-<span class="sourceLineNo">3189</span> cpHost.postGetTableDescriptors(tableNameList, htds, regex);<a name="line.3189"></a>
-<span class="sourceLineNo">3190</span> }<a name="line.3190"></a>
-<span class="sourceLineNo">3191</span> return htds;<a name="line.3191"></a>
-<span class="sourceLineNo">3192</span> }<a name="line.3192"></a>
-<span class="sourceLineNo">3193</span><a name="line.3193"></a>
-<span class="sourceLineNo">3194</span> /**<a name="line.3194"></a>
-<span class="sourceLineNo">3195</span> * Returns the list of table names that match the specified request<a name="line.3195"></a>
-<span class="sourceLineNo">3196</span> * @param regex The regular expression to match against, or null if querying for all<a name="line.3196"></a>
-<span class="sourceLineNo">3197</span> * @param namespace the namespace to query, or null if querying for all<a name="line.3197"></a>
-<span class="sourceLineNo">3198</span> * @param includeSysTables False to match only against userspace tables<a name="line.3198"></a>
-<span class="sourceLineNo">3199</span> * @return the list of table names<a name="line.3199"></a>
-<span class="sourceLineNo">3200</span> */<a name="line.3200"></a>
-<span class="sourceLineNo">3201</span> public List<TableName> listTableNames(final String namespace, final String regex,<a name="line.3201"></a>
-<span class="sourceLineNo">3202</span> final boolean includeSysTables) throws IOException {<a name="line.3202"></a>
-<span class="sourceLineNo">3203</span> List<TableDescriptor> htds = new ArrayList<>();<a name="line.3203"></a>
-<span class="sourceLineNo">3204</span> if (cpHost != null) {<a name="line.3204"></a>
-<span class="sourceLineNo">3205</span> cpHost.preGetTableNames(htds, regex);<a name="line.3205"></a>
-<span class="sourceLineNo">3206</span> }<a name="line.3206"></a>
-<span class="sourceLineNo">3207</span> htds = getTableDescriptors(htds, namespace, regex, null, includeSysTables);<a name="line.3207"></a>
-<span class="sourceLineNo">3208</span> if (cpHost != null) {<a name="line.3208"></a>
-<span class="sourceLineNo">3209</span> cpHost.postGetTableNames(htds, regex);<a name="line.3209"></a>
-<span class="sourceLineNo">3210</span> }<a name="line.3210"></a>
-<span class="sourceLineNo">3211</span> List<TableName> result = new ArrayList<>(htds.size());<a name="line.3211"></a>
-<span class="sourceLineNo">3212</span> for (TableDescriptor htd: htds) result.add(htd.getTableName());<a name="line.3212"></a>
-<span class="sourceLineNo">3213</span> return result;<a name="line.3213"></a>
-<span class="sourceLineNo">3214</span> }<a name="line.3214"></a>
-<span class="sourceLineNo">3215</span><a name="line.3215"></a>
-<span class="sourceLineNo">3216</span> /**<a name="line.3216"></a>
-<span class="sourceLineNo">3217</span> * @return list of table table descriptors after filtering by regex and whether to include system<a name="line.3217"></a>
-<span class="sourceLineNo">3218</span> * tables, etc.<a name="line.3218"></a>
-<span class="sourceLineNo">3219</span> * @throws IOException<a name="line.3219"></a>
-<span class="sourceLineNo">3220</span> */<a name="line.3220"></a>
-<span class="sourceLineNo">3221</span> private List<TableDescriptor> getTableDescriptors(final List<TableDescriptor> htds,<a name="line.3221"></a>
-<span class="sourceLineNo">3222</span> final String namespace, final String regex, final List<TableName> tableNameList,<a name="line.3222"></a>
-<span class="sourceLineNo">3223</span> final boolean includeSysTables)<a name="line.3223"></a>
-<span class="sourceLineNo">3224</span> throws IOException {<a name="line.3224"></a>
-<span class="sourceLineNo">3225</span> if (tableNameList == null || tableNameList.isEmpty()) {<a name="line.3225"></a>
-<span class="sourceLineNo">3226</span> // request for all TableDescriptors<a name="line.3226"></a>
-<span class="sourceLineNo">3227</span> Collection<TableDescriptor> allHtds;<a name="line.3227"></a>
-<span class="sourceLineNo">3228</span> if (namespace != null && namespace.length() > 0) {<a name="line.3228"></a>
-<span class="sourceLineNo">3229</span> // Do a check on the namespace existence. Will fail if does not exist.<a name="line.3229"></a>
-<span class="sourceLineNo">3230</span> this.clusterSchemaService.getNamespace(namespace);<a name="line.3230"></a>
-<span class="sourceLineNo">3231</span> allHtds = tableDescriptors.getByNamespace(namespace).values();<a name="line.3231"></a>
-<span class="sourceLineNo">3232</span> } else {<a name="line.3232"></a>
-<span class="sourceLineNo">3233</span> allHtds = tableDescriptors.getAll().values();<a name="line.3233"></a>
-<span class="sourceLineNo">3234</span> }<a name="line.3234"></a>
-<span class="sourceLineNo">3235</span> for (TableDescriptor desc: allHtds) {<a name="line.3235"></a>
-<span class="sourceLineNo">3236</span> if (tableStateManager.isTablePresent(desc.getTableName())<a name="line.3236"></a>
-<span class="sourceLineNo">3237</span> && (includeSysTables || !desc.getTableName().isSystemTable())) {<a name="line.3237"></a>
-<span class="sourceLineNo">3238</span> htds.add(desc);<a name="line.3238"></a>
-<span class="sourceLineNo">3239</span> }<a name="line.3239"></a>
-<span class="sourceLineNo">3240</span> }<a name="line.3240"></a>
-<span class="sourceLineNo">3241</span> } else {<a name="line.3241"></a>
-<span class="sourceLineNo">3242</span> for (TableName s: tableNameList) {<a name="line.3242"></a>
-<span class="sourceLineNo">3243</span> if (tableStateManager.isTablePresent(s)) {<a name="line.3243"></a>
-<span class="sourceLineNo">3244</span> TableDescriptor desc = tableDescriptors.get(s);<a name="line.3244"></a>
-<span class="sourceLineNo">3245</span> if (desc != null) {<a name="line.3245"></a>
-<span class="sourceLineNo">3246</span> htds.add(desc);<a name="line.3246"></a>
-<span class="sourceLineNo">3247</span> }<a name="line.3247"></a>
-<span class="sourceLineNo">3248</span> }<a name="line.3248"></a>
-<span class="sourceLineNo">3249</span> }<a name="line.3249"></a>
-<span class="sourceLineNo">3250</span> }<a name="line.3250"></a>
-<span class="sourceLineNo">3251</span><a name="line.3251"></a>
-<span class="sourceLineNo">3252</span> // Retains only those matched by regular expression.<a name="line.3252"></a>
-<span class="sourceLineNo">3253</span> if (regex != null) filterTablesByRegex(htds, Pattern.compile(regex));<a name="line.3253"></a>
-<span class="sourceLineNo">3254</span> return htds;<a name="line.3254"></a>
-<span class="sourceLineNo">3255</span> }<a name="line.3255"></a>
-<span class="sourceLineNo">3256</span><a name="line.3256"></a>
-<span class="sourceLineNo">3257</span> /**<a name="line.3257"></a>
-<span class="sourceLineNo">3258</span> * Removes the table descriptors that don't match the pattern.<a name="line.3258"></a>
-<span class="sourceLineNo">3259</span> * @param descriptors list of table descriptors to filter<a name="line.3259"></a>
-<span class="sourceLineNo">3260</span> * @param pattern the regex to use<a name="line.3260"></a>
-<span class="sourceLineNo">3261</span> */<a name="line.3261"></a>
-<span class="sourceLineNo">3262</span> private static void filterTablesByRegex(final Collection<TableDescriptor> descriptors,<a name="line.3262"></a>
-<span class="sourceLineNo">3263</span> final Pattern pattern) {<a name="line.3263"></a>
-<span class="sourceLineNo">3264</span> final String defaultNS = NamespaceDescriptor.DEFAULT_NAMESPACE_NAME_STR;<a name="line.3264"></a>
-<span class="sourceLineNo">3265</span> Iterator<TableDescriptor> itr = descriptors.iterator();<a name="line.3265"></a>
-<span class="sourceLineNo">3266</span> while (itr.hasNext()) {<a name="line.3266"></a>
-<span class="sourceLineNo">3267</span> TableDescriptor htd = itr.next();<a name="line.3267"></a>
-<span class="sourceLineNo">3268</span> String tableName = htd.getTableName().getNameAsString();<a name="line.3268"></a>
-<span class="sourceLineNo">3269</span> boolean matched = pattern.matcher(tableName).matches();<a name="line.3269"></a>
-<span class="sourceLineNo">3270</span> if (!matched && htd.getTableName().getNamespaceAsString().equals(defaultNS)) {<a name="line.3270"></a>
-<span class="sourceLineNo">3271</span> matched = pattern.matcher(defaultNS + TableName.NAMESPACE_DELIM + tableName).matches();<a name="line.3271"></a>
-<span class="sourceLineNo">3272</span> }<a name="line.3272"></a>
-<span class="sourceLineNo">3273</span> if (!matched) {<a name="line.3273"></a>
-<span class="sourceLineNo">3274</span> itr.remove();<a name="line.3274"></a>
+<span class="sourceLineNo">3172</span> return lockedResources;<a name="line.3172"></a>
+<span class="sourceLineNo">3173</span> }<a name="line.3173"></a>
+<span class="sourceLineNo">3174</span><a name="line.3174"></a>
+<span class="sourceLineNo">3175</span> /**<a name="line.3175"></a>
+<span class="sourceLineNo">3176</span> * Returns the list of table descriptors that match the specified request<a name="line.3176"></a>
+<span class="sourceLineNo">3177</span> * @param namespace the namespace to query, or null if querying for all<a name="line.3177"></a>
+<span class="sourceLineNo">3178</span> * @param regex The regular expression to match against, or null if querying for all<a name="line.3178"></a>
+<span class="sourceLineNo">3179</span> * @param tableNameList the list of table names, or null if querying for all<a name="line.3179"></a>
+<span class="sourceLineNo">3180</span> * @param includeSysTables False to match only against userspace tables<a name="line.3180"></a>
+<span class="sourceLineNo">3181</span> * @return the list of table descriptors<a name="line.3181"></a>
+<span class="sourceLineNo">3182</span> */<a name="line.3182"></a>
+<span class="sourceLineNo">3183</span> public List<TableDescriptor> listTableDescriptors(final String namespace, final String regex,<a name="line.3183"></a>
+<span class="sourceLineNo">3184</span> final List<TableName> tableNameList, final boolean includeSysTables)<a name="line.3184"></a>
+<span class="sourceLineNo">3185</span> throws IOException {<a name="line.3185"></a>
+<span class="sourceLineNo">3186</span> List<TableDescriptor> htds = new ArrayList<>();<a name="line.3186"></a>
+<span class="sourceLineNo">3187</span> if (cpHost != null) {<a name="line.3187"></a>
+<span class="sourceLineNo">3188</span> cpHost.preGetTableDescriptors(tableNameList, htds, regex);<a name="line.3188"></a>
+<span class="sourceLineNo">3189</span> }<a name="line.3189"></a>
+<span class="sourceLineNo">3190</span> htds = getTableDescriptors(htds, namespace, regex, tableNameList, includeSysTables);<a name="line.3190"></a>
+<span class="sourceLineNo">3191</span> if (cpHost != null) {<a name="line.3191"></a>
+<span class="sourceLineNo">3192</span> cpHost.postGetTableDescriptors(tableNameList, htds, regex);<a name="line.3192"></a>
+<span class="sourceLineNo">3193</span> }<a name="line.3193"></a>
+<span class="sourceLineNo">3194</span> return htds;<a name="line.3194"></a>
+<span class="sourceLineNo">3195</span> }<a name="line.3195"></a>
+<span class="sourceLineNo">3196</span><a name="line.3196"></a>
+<span class="sourceLineNo">3197</span> /**<a name="line.3197"></a>
+<span class="sourceLineNo">3198</span> * Returns the list of table names that match the specified request<a name="line.3198"></a>
+<span class="sourceLineNo">3199</span> * @param regex The regular expression to match against, or null if querying for all<a name="line.3199"></a>
+<span class="sourceLineNo">3200</span> * @param namespace the namespace to query, or null if querying for all<a name="line.3200"></a>
+<span class="sourceLineNo">3201</span> * @param includeSysTables False to match only against userspace tables<a name="line.3201"></a>
+<span class="sourceLineNo">3202</span> * @return the list of table names<a name="line.3202"></a>
+<span class="sourceLineNo">3203</span> */<a name="line.3203"></a>
+<span class="sourceLineNo">3204</span> public List<TableName> listTableNames(final String namespace, final String regex,<a name="line.3204"></a>
+<span class="sourceLineNo">3205</span> final boolean includeSysTables) throws IOException {<a name="line.3205"></a>
+<span class="sourceLineNo">3206</span> List<TableDescriptor> htds = new ArrayList<>();<a name="line.3206"></a>
+<span class="sourceLineNo">3207</span> if (cpHost != null) {<a name="line.3207"></a>
+<span class="sourceLineNo">3208</span> cpHost.preGetTableNames(htds, regex);<a name="line.3208"></a>
+<span class="sourceLineNo">3209</span> }<a name="line.3209"></a>
+<span class="sourceLineNo">3210</span> htds = getTableDescriptors(htds, namespace, regex, null, includeSysTables);<a name="line.3210"></a>
+<span class="sourceLineNo">3211</span> if (cpHost != null) {<a name="line.3211"></a>
+<span class="sourceLineNo">3212</span> cpHost.postGetTableNames(htds, regex);<a name="line.3212"></a>
+<span class="sourceLineNo">3213</span> }<a name="line.3213"></a>
+<span class="sourceLineNo">3214</span> List<TableName> result = new ArrayList<>(htds.size());<a name="line.3214"></a>
+<span class="sourceLineNo">3215</span> for (TableDescriptor htd: htds) result.add(htd.getTableName());<a name="line.3215"></a>
+<span class="sourceLineNo">3216</span> return result;<a name="line.3216"></a>
+<span class="sourceLineNo">3217</span> }<a name="line.3217"></a>
+<span class="sourceLineNo">3218</span><a name="line.3218"></a>
+<span class="sourceLineNo">3219</span> /**<a name="line.3219"></a>
+<span class="sourceLineNo">3220</span> * @return list of table table descriptors after filtering by regex and whether to include system<a name="line.3220"></a>
+<span class="sourceLineNo">3221</span> * tables, etc.<a name="line.3221"></a>
+<span class="sourceLineNo">3222</span> * @throws IOException<a name="line.3222"></a>
+<span class="sourceLineNo">3223</span> */<a name="line.3223"></a>
+<span class="sourceLineNo">3224</span> private List<TableDescriptor> getTableDescriptors(final List<TableDescriptor> htds,<a name="line.3224"></a>
+<span class="sourceLineNo">3225</span> final String namespace, final String regex, final List<TableName> tableNameList,<a name="line.3225"></a>
+<span class="sourceLineNo">3226</span> final boolean includeSysTables)<a name="line.3226"></a>
+<span class="sourceLineNo">3227</span> throws IOException {<a name="line.3227"></a>
+<span class="sourceLineNo">3228</span> if (tableNameList == null || tableNameList.isEmpty()) {<a name="line.3228"></a>
+<span class="sourceLineNo">3229</span> // request for all TableDescriptors<a name="line.3229"></a>
+<span class="sourceLineNo">3230</span> Collection<TableDescriptor> allHtds;<a name="line.3230"></a>
+<span class="sourceLineNo">3231</span> if (namespace != null && namespace.length() > 0) {<a name="line.3231"></a>
+<span class="sourceLineNo">3232</span> // Do a check on the namespace existence. Will fail if does not exist.<a name="line.3232"></a>
+<span class="sourceLineNo">3233</span> this.clusterSchemaService.getNamespace(namespace);<a name="line.3233"></a>
+<span class="sourceLineNo">3234</span> allHtds = tableDescriptors.getByNamespace(namespace).values();<a name="line.3234"></a>
+<span class="sourceLineNo">3235</span> } else {<a name="line.3235"></a>
+<span class="sourceLineNo">3236</span> allHtds = tableDescriptors.getAll().values();<a name="line.3236"></a>
+<span class="sourceLineNo">3237</span> }<a name="line.3237"></a>
+<span class="sourceLineNo">3238</span> for (TableDescriptor desc: allHtds) {<a name="line.3238"></a>
+<span class="sourceLineNo">3239</span> if (tableStateManager.isTablePresent(desc.getTableName())<a name="line.3239"></a>
+<span class="sourceLineNo">3240</span> && (includeSysTables || !desc.getTableName().isSystemTable())) {<a name="line.3240"></a>
+<span class="sourceLineNo">3241</span> htds.add(desc);<a name="line.3241"></a>
+<span class="sourceLineNo">3242</span> }<a name="line.3242"></a>
+<span class="sourceLineNo">3243</span> }<a name="line.3243"></a>
+<span class="sourceLineNo">3244</span> } else {<a name="line.3244"></a>
+<span class="sourceLineNo">3245</span> for (TableName s: tableNameList) {<a name="line.3245"></a>
+<span class="sourceLineNo">3246</span> if (tableStateManager.isTablePresent(s)) {<a name="line.3246"></a>
+<span class="sourceLineNo">3247</span> TableDescriptor desc = tableDescriptors.get(s);<a name="line.3247"></a>
+<span class="sourceLineNo">3248</span> if (desc != null) {<a name="line.3248"></a>
+<span class="sourceLineNo">3249</span> htds.add(desc);<a name="line.3249"></a>
+<span class="sourceLineNo">3250</span> }<a name="line.3250"></a>
+<span class="sourceLineNo">3251</span> }<a name="line.3251"></a>
+<span class="sourceLineNo">3252</span> }<a name="line.3252"></a>
+<span class="sourceLineNo">3253</span> }<a name="line.3253"></a>
+<span class="sourceLineNo">3254</span><a name="line.3254"></a>
+<span class="sourceLineNo">3255</span> // Retains only those matched by regular expression.<a name="line.3255"></a>
+<span class="sourceLineNo">3256</span> if (regex != null) filterTablesByRegex(htds, Pattern.compile(regex));<a name="line.3256"></a>
+<span class="sourceLineNo">3257</span> return htds;<a name="line.3257"></a>
+<span class="sourceLineNo">3258</span> }<a name="line.3258"></a>
+<span class="sourceLineNo">3259</span><a name="line.3259"></a>
+<span class="sourceLineNo">3260</span> /**<a name="line.3260"></a>
+<span class="sourceLineNo">3261</span> * Removes the table descriptors that don't match the pattern.<a name="line.3261"></a>
+<span class="sourceLineNo">3262</span> * @param descriptors list of table descriptors to filter<a name="line.3262"></a>
+<span class="sourceLineNo">3263</span> * @param pattern the regex to use<a name="line.3263"></a>
+<span class="sourceLineNo">3264</span> */<a name="line.3264"></a>
+<span class="sourceLineNo">3265</span> private static void filterTablesByRegex(final Collection<TableDescriptor> descriptors,<a name="line.3265"></a>
+<span class="sourceLineNo">3266</span> final Pattern pattern) {<a name="line.3266"></a>
+<span class="sourceLineNo">3267</span> final String defaultNS = NamespaceDescriptor.DEFAULT_NAMESPACE_NAME_STR;<a name="line.3267"></a>
+<span class="sourceLineNo">3268</span> Iterator<TableDescriptor> itr = descriptors.iterator();<a name="line.3268"></a>
+<span class="sourceLineNo">3269</span> while (itr.hasNext()) {<a name="line.3269"></a>
+<span class="sourceLineNo">3270</span> TableDescriptor htd =
<TRUNCATED>
[13/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html
index 5420d82..6ea3672 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html
@@ -316,687 +316,728 @@
<span class="sourceLineNo">308</span> }<a name="line.308"></a>
<span class="sourceLineNo">309</span> }<a name="line.309"></a>
<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span> public enum ServerState { ONLINE, SPLITTING, OFFLINE }<a name="line.311"></a>
-<span class="sourceLineNo">312</span> public static class ServerStateNode implements Comparable<ServerStateNode> {<a name="line.312"></a>
-<span class="sourceLineNo">313</span> private final ServerReportEvent reportEvent;<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> private final Set<RegionStateNode> regions;<a name="line.315"></a>
-<span class="sourceLineNo">316</span> private final ServerName serverName;<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span> private volatile ServerState state = ServerState.ONLINE;<a name="line.318"></a>
-<span class="sourceLineNo">319</span> private volatile int versionNumber = 0;<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span> public ServerStateNode(final ServerName serverName) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span> this.serverName = serverName;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> this.regions = ConcurrentHashMap.newKeySet();<a name="line.323"></a>
-<span class="sourceLineNo">324</span> this.reportEvent = new ServerReportEvent(serverName);<a name="line.324"></a>
-<span class="sourceLineNo">325</span> }<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> public ServerName getServerName() {<a name="line.327"></a>
-<span class="sourceLineNo">328</span> return serverName;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> }<a name="line.329"></a>
+<span class="sourceLineNo">311</span> /**<a name="line.311"></a>
+<span class="sourceLineNo">312</span> * Server State.<a name="line.312"></a>
+<span class="sourceLineNo">313</span> */<a name="line.313"></a>
+<span class="sourceLineNo">314</span> public enum ServerState {<a name="line.314"></a>
+<span class="sourceLineNo">315</span> /**<a name="line.315"></a>
+<span class="sourceLineNo">316</span> * Initial state. Available.<a name="line.316"></a>
+<span class="sourceLineNo">317</span> */<a name="line.317"></a>
+<span class="sourceLineNo">318</span> ONLINE,<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span> /**<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * Server expired/crashed. Currently undergoing WAL splitting.<a name="line.321"></a>
+<span class="sourceLineNo">322</span> */<a name="line.322"></a>
+<span class="sourceLineNo">323</span> SPLITTING,<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span> /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * WAL splitting done.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> */<a name="line.327"></a>
+<span class="sourceLineNo">328</span> OFFLINE<a name="line.328"></a>
+<span class="sourceLineNo">329</span> }<a name="line.329"></a>
<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> public ServerState getState() {<a name="line.331"></a>
-<span class="sourceLineNo">332</span> return state;<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> public int getVersionNumber() {<a name="line.335"></a>
-<span class="sourceLineNo">336</span> return versionNumber;<a name="line.336"></a>
-<span class="sourceLineNo">337</span> }<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span> public ProcedureEvent<?> getReportEvent() {<a name="line.339"></a>
-<span class="sourceLineNo">340</span> return reportEvent;<a name="line.340"></a>
-<span class="sourceLineNo">341</span> }<a name="line.341"></a>
+<span class="sourceLineNo">331</span> /**<a name="line.331"></a>
+<span class="sourceLineNo">332</span> * State of Server; list of hosted regions, etc.<a name="line.332"></a>
+<span class="sourceLineNo">333</span> */<a name="line.333"></a>
+<span class="sourceLineNo">334</span> public static class ServerStateNode implements Comparable<ServerStateNode> {<a name="line.334"></a>
+<span class="sourceLineNo">335</span> private final ServerReportEvent reportEvent;<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> private final Set<RegionStateNode> regions;<a name="line.337"></a>
+<span class="sourceLineNo">338</span> private final ServerName serverName;<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span> private volatile ServerState state = ServerState.ONLINE;<a name="line.340"></a>
+<span class="sourceLineNo">341</span> private volatile int versionNumber = 0;<a name="line.341"></a>
<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span> public boolean isInState(final ServerState... expected) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span> boolean expectedState = false;<a name="line.344"></a>
-<span class="sourceLineNo">345</span> if (expected != null) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span> for (int i = 0; i < expected.length; ++i) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> expectedState |= (state == expected[i]);<a name="line.347"></a>
-<span class="sourceLineNo">348</span> }<a name="line.348"></a>
-<span class="sourceLineNo">349</span> }<a name="line.349"></a>
-<span class="sourceLineNo">350</span> return expectedState;<a name="line.350"></a>
+<span class="sourceLineNo">343</span> public ServerStateNode(final ServerName serverName) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span> this.serverName = serverName;<a name="line.344"></a>
+<span class="sourceLineNo">345</span> this.regions = ConcurrentHashMap.newKeySet();<a name="line.345"></a>
+<span class="sourceLineNo">346</span> this.reportEvent = new ServerReportEvent(serverName);<a name="line.346"></a>
+<span class="sourceLineNo">347</span> }<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span> public ServerName getServerName() {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> return serverName;<a name="line.350"></a>
<span class="sourceLineNo">351</span> }<a name="line.351"></a>
<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span> public void setState(final ServerState state) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span> this.state = state;<a name="line.354"></a>
+<span class="sourceLineNo">353</span> public ServerState getState() {<a name="line.353"></a>
+<span class="sourceLineNo">354</span> return state;<a name="line.354"></a>
<span class="sourceLineNo">355</span> }<a name="line.355"></a>
<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span> public void setVersionNumber(final int versionNumber) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> this.versionNumber = versionNumber;<a name="line.358"></a>
+<span class="sourceLineNo">357</span> public int getVersionNumber() {<a name="line.357"></a>
+<span class="sourceLineNo">358</span> return versionNumber;<a name="line.358"></a>
<span class="sourceLineNo">359</span> }<a name="line.359"></a>
<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span> public Set<RegionStateNode> getRegions() {<a name="line.361"></a>
-<span class="sourceLineNo">362</span> return regions;<a name="line.362"></a>
+<span class="sourceLineNo">361</span> public ProcedureEvent<?> getReportEvent() {<a name="line.361"></a>
+<span class="sourceLineNo">362</span> return reportEvent;<a name="line.362"></a>
<span class="sourceLineNo">363</span> }<a name="line.363"></a>
<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span> public int getRegionCount() {<a name="line.365"></a>
-<span class="sourceLineNo">366</span> return regions.size();<a name="line.366"></a>
+<span class="sourceLineNo">365</span> public boolean isOffline() {<a name="line.365"></a>
+<span class="sourceLineNo">366</span> return this.state.equals(ServerState.OFFLINE);<a name="line.366"></a>
<span class="sourceLineNo">367</span> }<a name="line.367"></a>
<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span> public ArrayList<RegionInfo> getRegionInfoList() {<a name="line.369"></a>
-<span class="sourceLineNo">370</span> ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(regions.size());<a name="line.370"></a>
-<span class="sourceLineNo">371</span> for (RegionStateNode region: regions) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span> hris.add(region.getRegionInfo());<a name="line.372"></a>
-<span class="sourceLineNo">373</span> }<a name="line.373"></a>
-<span class="sourceLineNo">374</span> return hris;<a name="line.374"></a>
-<span class="sourceLineNo">375</span> }<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span> public void addRegion(final RegionStateNode regionNode) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span> this.regions.add(regionNode);<a name="line.378"></a>
-<span class="sourceLineNo">379</span> }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span> public void removeRegion(final RegionStateNode regionNode) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span> this.regions.remove(regionNode);<a name="line.382"></a>
-<span class="sourceLineNo">383</span> }<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public int compareTo(final ServerStateNode other) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> return getServerName().compareTo(other.getServerName());<a name="line.387"></a>
-<span class="sourceLineNo">388</span> }<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span> @Override<a name="line.390"></a>
-<span class="sourceLineNo">391</span> public int hashCode() {<a name="line.391"></a>
-<span class="sourceLineNo">392</span> return getServerName().hashCode();<a name="line.392"></a>
+<span class="sourceLineNo">369</span> public boolean isInState(final ServerState... expected) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span> boolean expectedState = false;<a name="line.370"></a>
+<span class="sourceLineNo">371</span> if (expected != null) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span> for (int i = 0; i < expected.length; ++i) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> expectedState |= (state == expected[i]);<a name="line.373"></a>
+<span class="sourceLineNo">374</span> }<a name="line.374"></a>
+<span class="sourceLineNo">375</span> }<a name="line.375"></a>
+<span class="sourceLineNo">376</span> return expectedState;<a name="line.376"></a>
+<span class="sourceLineNo">377</span> }<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span> public void setState(final ServerState state) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span> this.state = state;<a name="line.380"></a>
+<span class="sourceLineNo">381</span> }<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span> public void setVersionNumber(final int versionNumber) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span> this.versionNumber = versionNumber;<a name="line.384"></a>
+<span class="sourceLineNo">385</span> }<a name="line.385"></a>
+<span class="sourceLineNo">386</span><a name="line.386"></a>
+<span class="sourceLineNo">387</span> public Set<RegionStateNode> getRegions() {<a name="line.387"></a>
+<span class="sourceLineNo">388</span> return regions;<a name="line.388"></a>
+<span class="sourceLineNo">389</span> }<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span> public int getRegionCount() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span> return regions.size();<a name="line.392"></a>
<span class="sourceLineNo">393</span> }<a name="line.393"></a>
<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
-<span class="sourceLineNo">396</span> public boolean equals(final Object other) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span> if (this == other) return true;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> if (!(other instanceof ServerStateNode)) return false;<a name="line.398"></a>
-<span class="sourceLineNo">399</span> return compareTo((ServerStateNode)other) == 0;<a name="line.399"></a>
-<span class="sourceLineNo">400</span> }<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span> @Override<a name="line.402"></a>
-<span class="sourceLineNo">403</span> public String toString() {<a name="line.403"></a>
-<span class="sourceLineNo">404</span> return String.format("ServerStateNode(%s)", getServerName());<a name="line.404"></a>
+<span class="sourceLineNo">395</span> public ArrayList<RegionInfo> getRegionInfoList() {<a name="line.395"></a>
+<span class="sourceLineNo">396</span> ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(regions.size());<a name="line.396"></a>
+<span class="sourceLineNo">397</span> for (RegionStateNode region: regions) {<a name="line.397"></a>
+<span class="sourceLineNo">398</span> hris.add(region.getRegionInfo());<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span> return hris;<a name="line.400"></a>
+<span class="sourceLineNo">401</span> }<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span> public void addRegion(final RegionStateNode regionNode) {<a name="line.403"></a>
+<span class="sourceLineNo">404</span> this.regions.add(regionNode);<a name="line.404"></a>
<span class="sourceLineNo">405</span> }<a name="line.405"></a>
-<span class="sourceLineNo">406</span> }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span> public final static RegionStateStampComparator REGION_STATE_STAMP_COMPARATOR =<a name="line.408"></a>
-<span class="sourceLineNo">409</span> new RegionStateStampComparator();<a name="line.409"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span> public void removeRegion(final RegionStateNode regionNode) {<a name="line.407"></a>
+<span class="sourceLineNo">408</span> this.regions.remove(regionNode);<a name="line.408"></a>
+<span class="sourceLineNo">409</span> }<a name="line.409"></a>
<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span> // TODO: Replace the ConcurrentSkipListMaps<a name="line.411"></a>
-<span class="sourceLineNo">412</span> /**<a name="line.412"></a>
-<span class="sourceLineNo">413</span> * RegionName -- i.e. RegionInfo.getRegionName() -- as bytes to {@link RegionStateNode}<a name="line.413"></a>
-<span class="sourceLineNo">414</span> */<a name="line.414"></a>
-<span class="sourceLineNo">415</span> private final ConcurrentSkipListMap<byte[], RegionStateNode> regionsMap =<a name="line.415"></a>
-<span class="sourceLineNo">416</span> new ConcurrentSkipListMap<byte[], RegionStateNode>(Bytes.BYTES_COMPARATOR);<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionInTransition =<a name="line.418"></a>
-<span class="sourceLineNo">419</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>(RegionInfo.COMPARATOR);<a name="line.419"></a>
+<span class="sourceLineNo">411</span> @Override<a name="line.411"></a>
+<span class="sourceLineNo">412</span> public int compareTo(final ServerStateNode other) {<a name="line.412"></a>
+<span class="sourceLineNo">413</span> return getServerName().compareTo(other.getServerName());<a name="line.413"></a>
+<span class="sourceLineNo">414</span> }<a name="line.414"></a>
+<span class="sourceLineNo">415</span><a name="line.415"></a>
+<span class="sourceLineNo">416</span> @Override<a name="line.416"></a>
+<span class="sourceLineNo">417</span> public int hashCode() {<a name="line.417"></a>
+<span class="sourceLineNo">418</span> return getServerName().hashCode();<a name="line.418"></a>
+<span class="sourceLineNo">419</span> }<a name="line.419"></a>
<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span> /**<a name="line.421"></a>
-<span class="sourceLineNo">422</span> * Regions marked as offline on a read of hbase:meta. Unused or at least, once<a name="line.422"></a>
-<span class="sourceLineNo">423</span> * offlined, regions have no means of coming on line again. TODO.<a name="line.423"></a>
-<span class="sourceLineNo">424</span> */<a name="line.424"></a>
-<span class="sourceLineNo">425</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionOffline =<a name="line.425"></a>
-<span class="sourceLineNo">426</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>();<a name="line.426"></a>
+<span class="sourceLineNo">421</span> @Override<a name="line.421"></a>
+<span class="sourceLineNo">422</span> public boolean equals(final Object other) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span> if (this == other) return true;<a name="line.423"></a>
+<span class="sourceLineNo">424</span> if (!(other instanceof ServerStateNode)) return false;<a name="line.424"></a>
+<span class="sourceLineNo">425</span> return compareTo((ServerStateNode)other) == 0;<a name="line.425"></a>
+<span class="sourceLineNo">426</span> }<a name="line.426"></a>
<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span> private final ConcurrentSkipListMap<byte[], RegionFailedOpen> regionFailedOpen =<a name="line.428"></a>
-<span class="sourceLineNo">429</span> new ConcurrentSkipListMap<byte[], RegionFailedOpen>(Bytes.BYTES_COMPARATOR);<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span> private final ConcurrentHashMap<ServerName, ServerStateNode> serverMap =<a name="line.431"></a>
-<span class="sourceLineNo">432</span> new ConcurrentHashMap<ServerName, ServerStateNode>();<a name="line.432"></a>
+<span class="sourceLineNo">428</span> @Override<a name="line.428"></a>
+<span class="sourceLineNo">429</span> public String toString() {<a name="line.429"></a>
+<span class="sourceLineNo">430</span> return String.format("ServerStateNode(%s)", getServerName());<a name="line.430"></a>
+<span class="sourceLineNo">431</span> }<a name="line.431"></a>
+<span class="sourceLineNo">432</span> }<a name="line.432"></a>
<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span> public RegionStates() { }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> public void clear() {<a name="line.436"></a>
-<span class="sourceLineNo">437</span> regionsMap.clear();<a name="line.437"></a>
-<span class="sourceLineNo">438</span> regionInTransition.clear();<a name="line.438"></a>
-<span class="sourceLineNo">439</span> regionOffline.clear();<a name="line.439"></a>
-<span class="sourceLineNo">440</span> serverMap.clear();<a name="line.440"></a>
-<span class="sourceLineNo">441</span> }<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span> @VisibleForTesting<a name="line.443"></a>
-<span class="sourceLineNo">444</span> public boolean isRegionInRegionStates(final RegionInfo hri) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span> return (regionsMap.containsKey(hri.getRegionName()) || regionInTransition.containsKey(hri)<a name="line.445"></a>
-<span class="sourceLineNo">446</span> || regionOffline.containsKey(hri));<a name="line.446"></a>
-<span class="sourceLineNo">447</span> }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span> // ==========================================================================<a name="line.449"></a>
-<span class="sourceLineNo">450</span> // RegionStateNode helpers<a name="line.450"></a>
-<span class="sourceLineNo">451</span> // ==========================================================================<a name="line.451"></a>
-<span class="sourceLineNo">452</span> protected RegionStateNode createRegionStateNode(final RegionInfo regionInfo) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> RegionStateNode newNode = new RegionStateNode(regionInfo);<a name="line.453"></a>
-<span class="sourceLineNo">454</span> RegionStateNode oldNode = regionsMap.putIfAbsent(regionInfo.getRegionName(), newNode);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> return oldNode != null ? oldNode : newNode;<a name="line.455"></a>
-<span class="sourceLineNo">456</span> }<a name="line.456"></a>
-<span class="sourceLineNo">457</span><a name="line.457"></a>
-<span class="sourceLineNo">458</span> protected RegionStateNode getOrCreateRegionStateNode(final RegionInfo regionInfo) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> RegionStateNode node = regionsMap.get(regionInfo.getRegionName());<a name="line.459"></a>
-<span class="sourceLineNo">460</span> return node != null ? node : createRegionStateNode(regionInfo);<a name="line.460"></a>
-<span class="sourceLineNo">461</span> }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span> RegionStateNode getRegionStateNodeFromName(final byte[] regionName) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span> return regionsMap.get(regionName);<a name="line.464"></a>
-<span class="sourceLineNo">465</span> }<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span> protected RegionStateNode getRegionStateNode(final RegionInfo regionInfo) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span> return getRegionStateNodeFromName(regionInfo.getRegionName());<a name="line.468"></a>
-<span class="sourceLineNo">469</span> }<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span> public void deleteRegion(final RegionInfo regionInfo) {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> regionsMap.remove(regionInfo.getRegionName());<a name="line.472"></a>
-<span class="sourceLineNo">473</span> // Remove from the offline regions map too if there.<a name="line.473"></a>
-<span class="sourceLineNo">474</span> if (this.regionOffline.containsKey(regionInfo)) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span> if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> this.regionOffline.remove(regionInfo);<a name="line.476"></a>
-<span class="sourceLineNo">477</span> }<a name="line.477"></a>
-<span class="sourceLineNo">478</span> }<a name="line.478"></a>
-<span class="sourceLineNo">479</span><a name="line.479"></a>
-<span class="sourceLineNo">480</span> ArrayList<RegionStateNode> getTableRegionStateNodes(final TableName tableName) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span> final ArrayList<RegionStateNode> regions = new ArrayList<RegionStateNode>();<a name="line.481"></a>
-<span class="sourceLineNo">482</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span> if (!node.getTable().equals(tableName)) break;<a name="line.483"></a>
-<span class="sourceLineNo">484</span> regions.add(node);<a name="line.484"></a>
-<span class="sourceLineNo">485</span> }<a name="line.485"></a>
-<span class="sourceLineNo">486</span> return regions;<a name="line.486"></a>
+<span class="sourceLineNo">434</span> public final static RegionStateStampComparator REGION_STATE_STAMP_COMPARATOR =<a name="line.434"></a>
+<span class="sourceLineNo">435</span> new RegionStateStampComparator();<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span> // TODO: Replace the ConcurrentSkipListMaps<a name="line.437"></a>
+<span class="sourceLineNo">438</span> /**<a name="line.438"></a>
+<span class="sourceLineNo">439</span> * RegionName -- i.e. RegionInfo.getRegionName() -- as bytes to {@link RegionStateNode}<a name="line.439"></a>
+<span class="sourceLineNo">440</span> */<a name="line.440"></a>
+<span class="sourceLineNo">441</span> private final ConcurrentSkipListMap<byte[], RegionStateNode> regionsMap =<a name="line.441"></a>
+<span class="sourceLineNo">442</span> new ConcurrentSkipListMap<byte[], RegionStateNode>(Bytes.BYTES_COMPARATOR);<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionInTransition =<a name="line.444"></a>
+<span class="sourceLineNo">445</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>(RegionInfo.COMPARATOR);<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span> /**<a name="line.447"></a>
+<span class="sourceLineNo">448</span> * Regions marked as offline on a read of hbase:meta. Unused or at least, once<a name="line.448"></a>
+<span class="sourceLineNo">449</span> * offlined, regions have no means of coming on line again. TODO.<a name="line.449"></a>
+<span class="sourceLineNo">450</span> */<a name="line.450"></a>
+<span class="sourceLineNo">451</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionOffline =<a name="line.451"></a>
+<span class="sourceLineNo">452</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>();<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span> private final ConcurrentSkipListMap<byte[], RegionFailedOpen> regionFailedOpen =<a name="line.454"></a>
+<span class="sourceLineNo">455</span> new ConcurrentSkipListMap<byte[], RegionFailedOpen>(Bytes.BYTES_COMPARATOR);<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span> private final ConcurrentHashMap<ServerName, ServerStateNode> serverMap =<a name="line.457"></a>
+<span class="sourceLineNo">458</span> new ConcurrentHashMap<ServerName, ServerStateNode>();<a name="line.458"></a>
+<span class="sourceLineNo">459</span><a name="line.459"></a>
+<span class="sourceLineNo">460</span> public RegionStates() { }<a name="line.460"></a>
+<span class="sourceLineNo">461</span><a name="line.461"></a>
+<span class="sourceLineNo">462</span> public void clear() {<a name="line.462"></a>
+<span class="sourceLineNo">463</span> regionsMap.clear();<a name="line.463"></a>
+<span class="sourceLineNo">464</span> regionInTransition.clear();<a name="line.464"></a>
+<span class="sourceLineNo">465</span> regionOffline.clear();<a name="line.465"></a>
+<span class="sourceLineNo">466</span> serverMap.clear();<a name="line.466"></a>
+<span class="sourceLineNo">467</span> }<a name="line.467"></a>
+<span class="sourceLineNo">468</span><a name="line.468"></a>
+<span class="sourceLineNo">469</span> @VisibleForTesting<a name="line.469"></a>
+<span class="sourceLineNo">470</span> public boolean isRegionInRegionStates(final RegionInfo hri) {<a name="line.470"></a>
+<span class="sourceLineNo">471</span> return (regionsMap.containsKey(hri.getRegionName()) || regionInTransition.containsKey(hri)<a name="line.471"></a>
+<span class="sourceLineNo">472</span> || regionOffline.containsKey(hri));<a name="line.472"></a>
+<span class="sourceLineNo">473</span> }<a name="line.473"></a>
+<span class="sourceLineNo">474</span><a name="line.474"></a>
+<span class="sourceLineNo">475</span> // ==========================================================================<a name="line.475"></a>
+<span class="sourceLineNo">476</span> // RegionStateNode helpers<a name="line.476"></a>
+<span class="sourceLineNo">477</span> // ==========================================================================<a name="line.477"></a>
+<span class="sourceLineNo">478</span> protected RegionStateNode createRegionStateNode(final RegionInfo regionInfo) {<a name="line.478"></a>
+<span class="sourceLineNo">479</span> RegionStateNode newNode = new RegionStateNode(regionInfo);<a name="line.479"></a>
+<span class="sourceLineNo">480</span> RegionStateNode oldNode = regionsMap.putIfAbsent(regionInfo.getRegionName(), newNode);<a name="line.480"></a>
+<span class="sourceLineNo">481</span> return oldNode != null ? oldNode : newNode;<a name="line.481"></a>
+<span class="sourceLineNo">482</span> }<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span> protected RegionStateNode getOrCreateRegionStateNode(final RegionInfo regionInfo) {<a name="line.484"></a>
+<span class="sourceLineNo">485</span> RegionStateNode node = regionsMap.get(regionInfo.getRegionName());<a name="line.485"></a>
+<span class="sourceLineNo">486</span> return node != null ? node : createRegionStateNode(regionInfo);<a name="line.486"></a>
<span class="sourceLineNo">487</span> }<a name="line.487"></a>
<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span> ArrayList<RegionState> getTableRegionStates(final TableName tableName) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>();<a name="line.490"></a>
-<span class="sourceLineNo">491</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span> if (!node.getTable().equals(tableName)) break;<a name="line.492"></a>
-<span class="sourceLineNo">493</span> regions.add(node.toRegionState());<a name="line.493"></a>
-<span class="sourceLineNo">494</span> }<a name="line.494"></a>
-<span class="sourceLineNo">495</span> return regions;<a name="line.495"></a>
-<span class="sourceLineNo">496</span> }<a name="line.496"></a>
-<span class="sourceLineNo">497</span><a name="line.497"></a>
-<span class="sourceLineNo">498</span> ArrayList<RegionInfo> getTableRegionsInfo(final TableName tableName) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span> final ArrayList<RegionInfo> regions = new ArrayList<RegionInfo>();<a name="line.499"></a>
-<span class="sourceLineNo">500</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span> if (!node.getTable().equals(tableName)) break;<a name="line.501"></a>
-<span class="sourceLineNo">502</span> regions.add(node.getRegionInfo());<a name="line.502"></a>
+<span class="sourceLineNo">489</span> RegionStateNode getRegionStateNodeFromName(final byte[] regionName) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span> return regionsMap.get(regionName);<a name="line.490"></a>
+<span class="sourceLineNo">491</span> }<a name="line.491"></a>
+<span class="sourceLineNo">492</span><a name="line.492"></a>
+<span class="sourceLineNo">493</span> protected RegionStateNode getRegionStateNode(final RegionInfo regionInfo) {<a name="line.493"></a>
+<span class="sourceLineNo">494</span> return getRegionStateNodeFromName(regionInfo.getRegionName());<a name="line.494"></a>
+<span class="sourceLineNo">495</span> }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span> public void deleteRegion(final RegionInfo regionInfo) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span> regionsMap.remove(regionInfo.getRegionName());<a name="line.498"></a>
+<span class="sourceLineNo">499</span> // Remove from the offline regions map too if there.<a name="line.499"></a>
+<span class="sourceLineNo">500</span> if (this.regionOffline.containsKey(regionInfo)) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span> if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.501"></a>
+<span class="sourceLineNo">502</span> this.regionOffline.remove(regionInfo);<a name="line.502"></a>
<span class="sourceLineNo">503</span> }<a name="line.503"></a>
-<span class="sourceLineNo">504</span> return regions;<a name="line.504"></a>
-<span class="sourceLineNo">505</span> }<a name="line.505"></a>
-<span class="sourceLineNo">506</span><a name="line.506"></a>
-<span class="sourceLineNo">507</span> Collection<RegionStateNode> getRegionStateNodes() {<a name="line.507"></a>
-<span class="sourceLineNo">508</span> return regionsMap.values();<a name="line.508"></a>
-<span class="sourceLineNo">509</span> }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span> public ArrayList<RegionState> getRegionStates() {<a name="line.511"></a>
-<span class="sourceLineNo">512</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>(regionsMap.size());<a name="line.512"></a>
-<span class="sourceLineNo">513</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span> regions.add(node.toRegionState());<a name="line.514"></a>
-<span class="sourceLineNo">515</span> }<a name="line.515"></a>
-<span class="sourceLineNo">516</span> return regions;<a name="line.516"></a>
-<span class="sourceLineNo">517</span> }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span> // ==========================================================================<a name="line.519"></a>
-<span class="sourceLineNo">520</span> // RegionState helpers<a name="line.520"></a>
-<span class="sourceLineNo">521</span> // ==========================================================================<a name="line.521"></a>
-<span class="sourceLineNo">522</span> public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span> RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.523"></a>
-<span class="sourceLineNo">524</span> return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.524"></a>
-<span class="sourceLineNo">525</span> }<a name="line.525"></a>
-<span class="sourceLineNo">526</span><a name="line.526"></a>
-<span class="sourceLineNo">527</span> public RegionState getRegionState(final String encodedRegionName) {<a name="line.527"></a>
-<span class="sourceLineNo">528</span> // TODO: Need a map <encodedName, ...> but it is just dispatch merge...<a name="line.528"></a>
-<span class="sourceLineNo">529</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.529"></a>
-<span class="sourceLineNo">530</span> if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span> return node.toRegionState();<a name="line.531"></a>
-<span class="sourceLineNo">532</span> }<a name="line.532"></a>
-<span class="sourceLineNo">533</span> }<a name="line.533"></a>
-<span class="sourceLineNo">534</span> return null;<a name="line.534"></a>
+<span class="sourceLineNo">504</span> }<a name="line.504"></a>
+<span class="sourceLineNo">505</span><a name="line.505"></a>
+<span class="sourceLineNo">506</span> ArrayList<RegionStateNode> getTableRegionStateNodes(final TableName tableName) {<a name="line.506"></a>
+<span class="sourceLineNo">507</span> final ArrayList<RegionStateNode> regions = new ArrayList<RegionStateNode>();<a name="line.507"></a>
+<span class="sourceLineNo">508</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.508"></a>
+<span class="sourceLineNo">509</span> if (!node.getTable().equals(tableName)) break;<a name="line.509"></a>
+<span class="sourceLineNo">510</span> regions.add(node);<a name="line.510"></a>
+<span class="sourceLineNo">511</span> }<a name="line.511"></a>
+<span class="sourceLineNo">512</span> return regions;<a name="line.512"></a>
+<span class="sourceLineNo">513</span> }<a name="line.513"></a>
+<span class="sourceLineNo">514</span><a name="line.514"></a>
+<span class="sourceLineNo">515</span> ArrayList<RegionState> getTableRegionStates(final TableName tableName) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>();<a name="line.516"></a>
+<span class="sourceLineNo">517</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.517"></a>
+<span class="sourceLineNo">518</span> if (!node.getTable().equals(tableName)) break;<a name="line.518"></a>
+<span class="sourceLineNo">519</span> regions.add(node.toRegionState());<a name="line.519"></a>
+<span class="sourceLineNo">520</span> }<a name="line.520"></a>
+<span class="sourceLineNo">521</span> return regions;<a name="line.521"></a>
+<span class="sourceLineNo">522</span> }<a name="line.522"></a>
+<span class="sourceLineNo">523</span><a name="line.523"></a>
+<span class="sourceLineNo">524</span> ArrayList<RegionInfo> getTableRegionsInfo(final TableName tableName) {<a name="line.524"></a>
+<span class="sourceLineNo">525</span> final ArrayList<RegionInfo> regions = new ArrayList<RegionInfo>();<a name="line.525"></a>
+<span class="sourceLineNo">526</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span> if (!node.getTable().equals(tableName)) break;<a name="line.527"></a>
+<span class="sourceLineNo">528</span> regions.add(node.getRegionInfo());<a name="line.528"></a>
+<span class="sourceLineNo">529</span> }<a name="line.529"></a>
+<span class="sourceLineNo">530</span> return regions;<a name="line.530"></a>
+<span class="sourceLineNo">531</span> }<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span> Collection<RegionStateNode> getRegionStateNodes() {<a name="line.533"></a>
+<span class="sourceLineNo">534</span> return regionsMap.values();<a name="line.534"></a>
<span class="sourceLineNo">535</span> }<a name="line.535"></a>
<span class="sourceLineNo">536</span><a name="line.536"></a>
-<span class="sourceLineNo">537</span> // ============================================================================================<a name="line.537"></a>
-<span class="sourceLineNo">538</span> // TODO: helpers<a name="line.538"></a>
-<span class="sourceLineNo">539</span> // ============================================================================================<a name="line.539"></a>
-<span class="sourceLineNo">540</span> public boolean hasTableRegionStates(final TableName tableName) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span> // TODO<a name="line.541"></a>
-<span class="sourceLineNo">542</span> return !getTableRegionStates(tableName).isEmpty();<a name="line.542"></a>
+<span class="sourceLineNo">537</span> public ArrayList<RegionState> getRegionStates() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>(regionsMap.size());<a name="line.538"></a>
+<span class="sourceLineNo">539</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span> regions.add(node.toRegionState());<a name="line.540"></a>
+<span class="sourceLineNo">541</span> }<a name="line.541"></a>
+<span class="sourceLineNo">542</span> return regions;<a name="line.542"></a>
<span class="sourceLineNo">543</span> }<a name="line.543"></a>
<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span> /**<a name="line.545"></a>
-<span class="sourceLineNo">546</span> * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.546"></a>
-<span class="sourceLineNo">547</span> */<a name="line.547"></a>
-<span class="sourceLineNo">548</span> public List<RegionInfo> getRegionsOfTable(final TableName table) {<a name="line.548"></a>
-<span class="sourceLineNo">549</span> return getRegionsOfTable(table, false);<a name="line.549"></a>
-<span class="sourceLineNo">550</span> }<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span> /**<a name="line.552"></a>
-<span class="sourceLineNo">553</span> * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.553"></a>
-<span class="sourceLineNo">554</span> * <code>offline</code> to true. Does not include regions that are in the<a name="line.554"></a>
-<span class="sourceLineNo">555</span> * {@link State#SPLIT} state.<a name="line.555"></a>
-<span class="sourceLineNo">556</span> */<a name="line.556"></a>
-<span class="sourceLineNo">557</span> public List<RegionInfo> getRegionsOfTable(final TableName table, final boolean offline) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span> final ArrayList<RegionStateNode> nodes = getTableRegionStateNodes(table);<a name="line.558"></a>
-<span class="sourceLineNo">559</span> final ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(nodes.size());<a name="line.559"></a>
-<span class="sourceLineNo">560</span> for (RegionStateNode node: nodes) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span> if (include(node, offline)) hris.add(node.getRegionInfo());<a name="line.561"></a>
-<span class="sourceLineNo">562</span> }<a name="line.562"></a>
-<span class="sourceLineNo">563</span> return hris;<a name="line.563"></a>
-<span class="sourceLineNo">564</span> }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span> /**<a name="line.566"></a>
-<span class="sourceLineNo">567</span> * Utility. Whether to include region in list of regions. Default is to<a name="line.567"></a>
-<span class="sourceLineNo">568</span> * weed out split and offline regions.<a name="line.568"></a>
-<span class="sourceLineNo">569</span> * @return True if we should include the <code>node</code> (do not include<a name="line.569"></a>
-<span class="sourceLineNo">570</span> * if split or offline unless <code>offline</code> is set to true.<a name="line.570"></a>
-<span class="sourceLineNo">571</span> */<a name="line.571"></a>
-<span class="sourceLineNo">572</span> boolean include(final RegionStateNode node, final boolean offline) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span> if (LOG.isTraceEnabled()) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span> LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.574"></a>
-<span class="sourceLineNo">575</span> }<a name="line.575"></a>
-<span class="sourceLineNo">576</span> if (node.isInState(State.SPLIT)) return false;<a name="line.576"></a>
-<span class="sourceLineNo">577</span> if (node.isInState(State.OFFLINE) && !offline) return false;<a name="line.577"></a>
-<span class="sourceLineNo">578</span> final RegionInfo hri = node.getRegionInfo();<a name="line.578"></a>
-<span class="sourceLineNo">579</span> return (!hri.isOffline() && !hri.isSplit()) ||<a name="line.579"></a>
-<span class="sourceLineNo">580</span> ((hri.isOffline() || hri.isSplit()) && offline);<a name="line.580"></a>
-<span class="sourceLineNo">581</span> }<a name="line.581"></a>
-<span class="sourceLineNo">582</span><a name="line.582"></a>
-<span class="sourceLineNo">583</span> /**<a name="line.583"></a>
-<span class="sourceLineNo">584</span> * Returns the set of regions hosted by the specified server<a name="line.584"></a>
-<span class="sourceLineNo">585</span> * @param serverName the server we are interested in<a name="line.585"></a>
-<span class="sourceLineNo">586</span> * @return set of RegionInfo hosted by the specified server<a name="line.586"></a>
-<span class="sourceLineNo">587</span> */<a name="line.587"></a>
-<span class="sourceLineNo">588</span> public List<RegionInfo> getServerRegionInfoSet(final ServerName serverName) {<a name="line.588"></a>
-<span class="sourceLineNo">589</span> final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.589"></a>
-<span class="sourceLineNo">590</span> if (serverInfo == null) return Collections.emptyList();<a name="line.590"></a>
+<span class="sourceLineNo">545</span> // ==========================================================================<a name="line.545"></a>
+<span class="sourceLineNo">546</span> // RegionState helpers<a name="line.546"></a>
+<span class="sourceLineNo">547</span> // ==========================================================================<a name="line.547"></a>
+<span class="sourceLineNo">548</span> public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.548"></a>
+<span class="sourceLineNo">549</span> RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.549"></a>
+<span class="sourceLineNo">550</span> return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.550"></a>
+<span class="sourceLineNo">551</span> }<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span> public RegionState getRegionState(final String encodedRegionName) {<a name="line.553"></a>
+<span class="sourceLineNo">554</span> // TODO: Need a map <encodedName, ...> but it is just dispatch merge...<a name="line.554"></a>
+<span class="sourceLineNo">555</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.555"></a>
+<span class="sourceLineNo">556</span> if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span> return node.toRegionState();<a name="line.557"></a>
+<span class="sourceLineNo">558</span> }<a name="line.558"></a>
+<span class="sourceLineNo">559</span> }<a name="line.559"></a>
+<span class="sourceLineNo">560</span> return null;<a name="line.560"></a>
+<span class="sourceLineNo">561</span> }<a name="line.561"></a>
+<span class="sourceLineNo">562</span><a name="line.562"></a>
+<span class="sourceLineNo">563</span> // ============================================================================================<a name="line.563"></a>
+<span class="sourceLineNo">564</span> // TODO: helpers<a name="line.564"></a>
+<span class="sourceLineNo">565</span> // ============================================================================================<a name="line.565"></a>
+<span class="sourceLineNo">566</span> public boolean hasTableRegionStates(final TableName tableName) {<a name="line.566"></a>
+<span class="sourceLineNo">567</span> // TODO<a name="line.567"></a>
+<span class="sourceLineNo">568</span> return !getTableRegionStates(tableName).isEmpty();<a name="line.568"></a>
+<span class="sourceLineNo">569</span> }<a name="line.569"></a>
+<span class="sourceLineNo">570</span><a name="line.570"></a>
+<span class="sourceLineNo">571</span> /**<a name="line.571"></a>
+<span class="sourceLineNo">572</span> * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.572"></a>
+<span class="sourceLineNo">573</span> */<a name="line.573"></a>
+<span class="sourceLineNo">574</span> public List<RegionInfo> getRegionsOfTable(final TableName table) {<a name="line.574"></a>
+<span class="sourceLineNo">575</span> return getRegionsOfTable(table, false);<a name="line.575"></a>
+<span class="sourceLineNo">576</span> }<a name="line.576"></a>
+<span class="sourceLineNo">577</span><a name="line.577"></a>
+<span class="sourceLineNo">578</span> /**<a name="line.578"></a>
+<span class="sourceLineNo">579</span> * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.579"></a>
+<span class="sourceLineNo">580</span> * <code>offline</code> to true. Does not include regions that are in the<a name="line.580"></a>
+<span class="sourceLineNo">581</span> * {@link State#SPLIT} state.<a name="line.581"></a>
+<span class="sourceLineNo">582</span> */<a name="line.582"></a>
+<span class="sourceLineNo">583</span> public List<RegionInfo> getRegionsOfTable(final TableName table, final boolean offline) {<a name="line.583"></a>
+<span class="sourceLineNo">584</span> final ArrayList<RegionStateNode> nodes = getTableRegionStateNodes(table);<a name="line.584"></a>
+<span class="sourceLineNo">585</span> final ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(nodes.size());<a name="line.585"></a>
+<span class="sourceLineNo">586</span> for (RegionStateNode node: nodes) {<a name="line.586"></a>
+<span class="sourceLineNo">587</span> if (include(node, offline)) hris.add(node.getRegionInfo());<a name="line.587"></a>
+<span class="sourceLineNo">588</span> }<a name="line.588"></a>
+<span class="sourceLineNo">589</span> return hris;<a name="line.589"></a>
+<span class="sourceLineNo">590</span> }<a name="line.590"></a>
<span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span> synchronized (serverInfo) {<a name="line.592"></a>
-<span class="sourceLineNo">593</span> return serverInfo.getRegionInfoList();<a name="line.593"></a>
-<span class="sourceLineNo">594</span> }<a name="line.594"></a>
-<span class="sourceLineNo">595</span> }<a name="line.595"></a>
-<span class="sourceLineNo">596</span><a name="line.596"></a>
-<span class="sourceLineNo">597</span> // ============================================================================================<a name="line.597"></a>
-<span class="sourceLineNo">598</span> // TODO: split helpers<a name="line.598"></a>
-<span class="sourceLineNo">599</span> // ============================================================================================<a name="line.599"></a>
-<span class="sourceLineNo">600</span> public void logSplit(final ServerName serverName) {<a name="line.600"></a>
-<span class="sourceLineNo">601</span> final ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.601"></a>
-<span class="sourceLineNo">602</span> synchronized (serverNode) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span> serverNode.setState(ServerState.SPLITTING);<a name="line.603"></a>
-<span class="sourceLineNo">604</span> /* THIS HAS TO BE WRONG. THIS IS SPLITTING OF REGION, NOT SPLITTING WALs.<a name="line.604"></a>
-<span class="sourceLineNo">605</span> for (RegionStateNode regionNode: serverNode.getRegions()) {<a name="line.605"></a>
-<span class="sourceLineNo">606</span> synchronized (regionNode) {<a name="line.606"></a>
-<span class="sourceLineNo">607</span> // TODO: Abort procedure if present<a name="line.607"></a>
-<span class="sourceLineNo">608</span> regionNode.setState(State.SPLITTING);<a name="line.608"></a>
-<span class="sourceLineNo">609</span> }<a name="line.609"></a>
-<span class="sourceLineNo">610</span> }*/<a name="line.610"></a>
-<span class="sourceLineNo">611</span> }<a name="line.611"></a>
-<span class="sourceLineNo">612</span> }<a name="line.612"></a>
-<span class="sourceLineNo">613</span><a name="line.613"></a>
-<span class="sourceLineNo">614</span> public void logSplit(final RegionInfo regionInfo) {<a name="line.614"></a>
-<span class="sourceLineNo">615</span> final RegionStateNode regionNode = getRegionStateNode(regionInfo);<a name="line.615"></a>
-<span class="sourceLineNo">616</span> synchronized (regionNode) {<a name="line.616"></a>
-<span class="sourceLineNo">617</span> regionNode.setState(State.SPLIT);<a name="line.617"></a>
-<span class="sourceLineNo">618</span> }<a name="line.618"></a>
-<span class="sourceLineNo">619</span> }<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span> @VisibleForTesting<a name="line.621"></a>
-<span class="sourceLineNo">622</span> public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span> final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.623"></a>
-<span class="sourceLineNo">624</span> synchronized (regionNode) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span> regionNode.setState(state);<a name="line.625"></a>
-<span class="sourceLineNo">626</span> }<a name="line.626"></a>
-<span class="sourceLineNo">627</span> }<a name="line.627"></a>
-<span class="sourceLineNo">628</span><a name="line.628"></a>
-<span class="sourceLineNo">629</span> // ============================================================================================<a name="line.629"></a>
-<span class="sourceLineNo">630</span> // TODO:<a name="line.630"></a>
-<span class="sourceLineNo">631</span> // ============================================================================================<a name="line.631"></a>
-<span class="sourceLineNo">632</span> public List<RegionInfo> getAssignedRegions() {<a name="line.632"></a>
-<span class="sourceLineNo">633</span> final List<RegionInfo> result = new ArrayList<RegionInfo>();<a name="line.633"></a>
-<span class="sourceLineNo">634</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span> if (!node.isInTransition()) {<a name="line.635"></a>
-<span class="sourceLineNo">636</span> result.add(node.getRegionInfo());<a name="line.636"></a>
-<span class="sourceLineNo">637</span> }<a name="line.637"></a>
-<span class="sourceLineNo">638</span> }<a name="line.638"></a>
-<span class="sourceLineNo">639</span> return result;<a name="line.639"></a>
-<span class="sourceLineNo">640</span> }<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span> public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.643"></a>
-<span class="sourceLineNo">644</span> if (region != null) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span> synchronized (region) {<a name="line.645"></a>
-<span class="sourceLineNo">646</span> return region.isInState(state);<a name="line.646"></a>
-<span class="sourceLineNo">647</span> }<a name="line.647"></a>
-<span class="sourceLineNo">648</span> }<a name="line.648"></a>
-<span class="sourceLineNo">649</span> return false;<a name="line.649"></a>
-<span class="sourceLineNo">650</span> }<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span> public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span> return isRegionInState(regionInfo, State.OPEN);<a name="line.653"></a>
+<span class="sourceLineNo">592</span> /**<a name="line.592"></a>
+<span class="sourceLineNo">593</span> * Utility. Whether to include region in list of regions. Default is to<a name="line.593"></a>
+<span class="sourceLineNo">594</span> * weed out split and offline regions.<a name="line.594"></a>
+<span class="sourceLineNo">595</span> * @return True if we should include the <code>node</code> (do not include<a name="line.595"></a>
+<span class="sourceLineNo">596</span> * if split or offline unless <code>offline</code> is set to true.<a name="line.596"></a>
+<span class="sourceLineNo">597</span> */<a name="line.597"></a>
+<span class="sourceLineNo">598</span> boolean include(final RegionStateNode node, final boolean offline) {<a name="line.598"></a>
+<span class="sourceLineNo">599</span> if (LOG.isTraceEnabled()) {<a name="line.599"></a>
+<span class="sourceLineNo">600</span> LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.600"></a>
+<span class="sourceLineNo">601</span> }<a name="line.601"></a>
+<span class="sourceLineNo">602</span> if (node.isInState(State.SPLIT)) return false;<a name="line.602"></a>
+<span class="sourceLineNo">603</span> if (node.isInState(State.OFFLINE) && !offline) return false;<a name="line.603"></a>
+<span class="sourceLineNo">604</span> final RegionInfo hri = node.getRegionInfo();<a name="line.604"></a>
+<span class="sourceLineNo">605</span> return (!hri.isOffline() && !hri.isSplit()) ||<a name="line.605"></a>
+<span class="sourceLineNo">606</span> ((hri.isOffline() || hri.isSplit()) && offline);<a name="line.606"></a>
+<span class="sourceLineNo">607</span> }<a name="line.607"></a>
+<span class="sourceLineNo">608</span><a name="line.608"></a>
+<span class="sourceLineNo">609</span> /**<a name="line.609"></a>
+<span class="sourceLineNo">610</span> * Returns the set of regions hosted by the specified server<a name="line.610"></a>
+<span class="sourceLineNo">611</span> * @param serverName the server we are interested in<a name="line.611"></a>
+<span class="sourceLineNo">612</span> * @return set of RegionInfo hosted by the specified server<a name="line.612"></a>
+<span class="sourceLineNo">613</span> */<a name="line.613"></a>
+<span class="sourceLineNo">614</span> public List<RegionInfo> getServerRegionInfoSet(final ServerName serverName) {<a name="line.614"></a>
+<span class="sourceLineNo">615</span> final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.615"></a>
+<span class="sourceLineNo">616</span> if (serverInfo == null) return Collections.emptyList();<a name="line.616"></a>
+<span class="sourceLineNo">617</span><a name="line.617"></a>
+<span class="sourceLineNo">618</span> synchronized (serverInfo) {<a name="line.618"></a>
+<span class="sourceLineNo">619</span> return serverInfo.getRegionInfoList();<a name="line.619"></a>
+<span class="sourceLineNo">620</span> }<a name="line.620"></a>
+<span class="sourceLineNo">621</span> }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span> // ============================================================================================<a name="line.623"></a>
+<span class="sourceLineNo">624</span> // TODO: split helpers<a name="line.624"></a>
+<span class="sourceLineNo">625</span> // ============================================================================================<a name="line.625"></a>
+<span class="sourceLineNo">626</span><a name="line.626"></a>
+<span class="sourceLineNo">627</span> /**<a name="line.627"></a>
+<span class="sourceLineNo">628</span> * Call this when we start log splitting a crashed Server.<a name="line.628"></a>
+<span class="sourceLineNo">629</span> * @see #logSplit(ServerName)<a name="line.629"></a>
+<span class="sourceLineNo">630</span> */<a name="line.630"></a>
+<span class="sourceLineNo">631</span> public void logSplitting(final ServerName serverName) {<a name="line.631"></a>
+<span class="sourceLineNo">632</span> final ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.632"></a>
+<span class="sourceLineNo">633</span> synchronized (serverNode) {<a name="line.633"></a>
+<span class="sourceLineNo">634</span> serverNode.setState(ServerState.SPLITTING);<a name="line.634"></a>
+<span class="sourceLineNo">635</span> }<a name="line.635"></a>
+<span class="sourceLineNo">636</span> }<a name="line.636"></a>
+<span class="sourceLineNo">637</span><a name="line.637"></a>
+<span class="sourceLineNo">638</span> /**<a name="line.638"></a>
+<span class="sourceLineNo">639</span> * Called after we've split all logs on a crashed Server.<a name="line.639"></a>
+<span class="sourceLineNo">640</span> * @see #logSplitting(ServerName)<a name="line.640"></a>
+<span class="sourceLineNo">641</span> */<a name="line.641"></a>
+<span class="sourceLineNo">642</span> public void logSplit(final ServerName serverName) {<a name="line.642"></a>
+<span class="sourceLineNo">643</span> final ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.643"></a>
+<span class="sourceLineNo">644</span> synchronized (serverNode) {<a name="line.644"></a>
+<span class="sourceLineNo">645</span> serverNode.setState(ServerState.OFFLINE);<a name="line.645"></a>
+<span class="sourceLineNo">646</span> }<a name="line.646"></a>
+<span class="sourceLineNo">647</span> }<a name="line.647"></a>
+<span class="sourceLineNo">648</span><a name="line.648"></a>
+<span class="sourceLineNo">649</span> public void logSplit(final RegionInfo regionInfo) {<a name="line.649"></a>
+<span class="sourceLineNo">650</span> final RegionStateNode regionNode = getRegionStateNode(regionInfo);<a name="line.650"></a>
+<span class="sourceLineNo">651</span> synchronized (regionNode) {<a name="line.651"></a>
+<span class="sourceLineNo">652</span> regionNode.setState(State.SPLIT);<a name="line.652"></a>
+<span class="sourceLineNo">653</span> }<a name="line.653"></a>
<span class="sourceLineNo">654</span> }<a name="line.654"></a>
<span class="sourceLineNo">655</span><a name="line.655"></a>
-<span class="sourceLineNo">656</span> /**<a name="line.656"></a>
-<span class="sourceLineNo">657</span> * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.657"></a>
-<span class="sourceLineNo">658</span> */<a name="line.658"></a>
-<span class="sourceLineNo">659</span> public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.659"></a>
-<span class="sourceLineNo">660</span> return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.660"></a>
-<span class="sourceLineNo">661</span> }<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span> public Map<ServerName, List<RegionInfo>> getSnapShotOfAssignment(<a name="line.663"></a>
-<span class="sourceLineNo">664</span> final Collection<RegionInfo> regions) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span> final Map<ServerName, List<RegionInfo>> result = new HashMap<ServerName, List<RegionInfo>>();<a name="line.665"></a>
-<span class="sourceLineNo">666</span> for (RegionInfo hri: regions) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span> final RegionStateNode node = getRegionStateNode(hri);<a name="line.667"></a>
-<span class="sourceLineNo">668</span> if (node == null) continue;<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span> // TODO: State.OPEN<a name="line.670"></a>
-<span class="sourceLineNo">671</span> final ServerName serverName = node.getRegionLocation();<a name="line.671"></a>
-<span class="sourceLineNo">672</span> if (serverName == null) continue;<a name="line.672"></a>
-<span class="sourceLineNo">673</span><a name="line.673"></a>
-<span class="sourceLineNo">674</span> List<RegionInfo> serverRegions = result.get(serverName);<a name="line.674"></a>
-<span class="sourceLineNo">675</span> if (serverRegions == null) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span> serverRegions = new ArrayList<RegionInfo>();<a name="line.676"></a>
-<span class="sourceLineNo">677</span> result.put(serverName, serverRegions);<a name="line.677"></a>
-<span class="sourceLineNo">678</span> }<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span> serverRegions.add(node.getRegionInfo());<a name="line.680"></a>
-<span class="sourceLineNo">681</span> }<a name="line.681"></a>
-<span class="sourceLineNo">682</span> return result;<a name="line.682"></a>
-<span class="sourceLineNo">683</span> }<a name="line.683"></a>
-<span class="sourceLineNo">684</span><a name="line.684"></a>
-<span class="sourceLineNo">685</span> public Map<RegionInfo, ServerName> getRegionAssignments() {<a name="line.685"></a>
-<span class="sourceLineNo">686</span> final HashMap<RegionInfo, ServerName> assignments = new HashMap<RegionInfo, ServerName>();<a name="line.686"></a>
-<span class="sourceLineNo">687</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.687"></a>
-<span class="sourceLineNo">688</span> assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.688"></a>
-<span class="sourceLineNo">689</span> }<a name="line.689"></a>
-<span class="sourceLineNo">690</span> return assignments;<a name="line.690"></a>
-<span class="sourceLineNo">691</span> }<a name="line.691"></a>
-<span class="sourceLineNo">692</span><a name="line.692"></a>
-<span class="sourceLineNo">693</span> public Map<RegionState.State, List<RegionInfo>> getRegionByStateOfTable(TableName tableName) {<a name="line.693"></a>
-<span class="sourceLineNo">694</span> final State[] states = State.values();<a name="line.694"></a>
-<span class="sourceLineNo">695</span> final Map<RegionState.State, List<RegionInfo>> tableRegions =<a name="line.695"></a>
-<span class="sourceLineNo">696</span> new HashMap<State, List<RegionInfo>>(states.length);<a name="line.696"></a>
-<span class="sourceLineNo">697</span> for (int i = 0; i < states.length; ++i) {<a name="line.697"></a>
-<span class="sourceLineNo">698</span> tableRegions.put(states[i], new ArrayList<RegionInfo>());<a name="line.698"></a>
-<span class="sourceLineNo">699</span> }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span> if (node.getTable().equals(tableName)) {<a name="line.702"></a>
-<span class="sourceLineNo">703</span> tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.703"></a>
-<span class="sourceLineNo">704</span> }<a name="line.704"></a>
-<span class="sourceLineNo">705</span> }<a name="line.705"></a>
-<span class="sourceLineNo">706</span> return tableRegions;<a name="line.706"></a>
-<span class="sourceLineNo">707</span> }<a name="line.707"></a>
+<span class="sourceLineNo">656</span> @VisibleForTesting<a name="line.656"></a>
+<span class="sourceLineNo">657</span> public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.657"></a>
+<span class="sourceLineNo">658</span> final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.658"></a>
+<span class="sourceLineNo">659</span> synchronized (regionNode) {<a name="line.659"></a>
+<span class="sourceLineNo">660</span> regionNode.setState(state);<a name="line.660"></a>
+<span class="sourceLineNo">661</span> }<a name="line.661"></a>
+<span class="sourceLineNo">662</span> }<a name="line.662"></a>
+<span class="sourceLineNo">663</span><a name="line.663"></a>
+<span class="sourceLineNo">664</span> // ============================================================================================<a name="line.664"></a>
+<span class="sourceLineNo">665</span> // TODO:<a name="line.665"></a>
+<span class="sourceLineNo">666</span> // ============================================================================================<a name="line.666"></a>
+<span class="sourceLineNo">667</span> public List<RegionInfo> getAssignedRegions() {<a name="line.667"></a>
+<span class="sourceLineNo">668</span> final List<RegionInfo> result = new ArrayList<RegionInfo>();<a name="line.668"></a>
+<span class="sourceLineNo">669</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.669"></a>
+<span class="sourceLineNo">670</span> if (!node.isInTransition()) {<a name="line.670"></a>
+<span class="sourceLineNo">671</span> result.add(node.getRegionInfo());<a name="line.671"></a>
+<span class="sourceLineNo">672</span> }<a name="line.672"></a>
+<span class="sourceLineNo">673</span> }<a name="line.673"></a>
+<span class="sourceLineNo">674</span> return result;<a name="line.674"></a>
+<span class="sourceLineNo">675</span> }<a name="line.675"></a>
+<span class="sourceLineNo">676</span><a name="line.676"></a>
+<span class="sourceLineNo">677</span> public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.677"></a>
+<span class="sourceLineNo">678</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.678"></a>
+<span class="sourceLineNo">679</span> if (region != null) {<a name="line.679"></a>
+<span class="sourceLineNo">680</span> synchronized (region) {<a name="line.680"></a>
+<span class="sourceLineNo">681</span> return region.isInState(state);<a name="line.681"></a>
+<span class="sourceLineNo">682</span> }<a name="line.682"></a>
+<span class="sourceLineNo">683</span> }<a name="line.683"></a>
+<span class="sourceLineNo">684</span> return false;<a name="line.684"></a>
+<span class="sourceLineNo">685</span> }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span> public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.687"></a>
+<span class="sourceLineNo">688</span> return isRegionInState(regionInfo, State.OPEN);<a name="line.688"></a>
+<span class="sourceLineNo">689</span> }<a name="line.689"></a>
+<span class="sourceLineNo">690</span><a name="line.690"></a>
+<span class="sourceLineNo">691</span> /**<a name="line.691"></a>
+<span class="sourceLineNo">692</span> * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.692"></a>
+<span class="sourceLineNo">693</span> */<a name="line.693"></a>
+<span class="sourceLineNo">694</span> public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.694"></a>
+<span class="sourceLineNo">695</span> return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.695"></a>
+<span class="sourceLineNo">696</span> }<a name="line.696"></a>
+<span class="sourceLineNo">697</span><a name="line.697"></a>
+<span class="sourceLineNo">698</span> public Map<ServerName, List<RegionInfo>> getSnapShotOfAssignment(<a name="line.698"></a>
+<span class="sourceLineNo">699</span> final Collection<RegionInfo> regions) {<a name="line.699"></a>
+<span class="sourceLineNo">700</span> final Map<ServerName, List<RegionInfo>> result = new HashMap<ServerName, List<RegionInfo>>();<a name="line.700"></a>
+<span class="sourceLineNo">701</span> for (RegionInfo hri: regions) {<a name="line.701"></a>
+<span class="sourceLineNo">702</span> final RegionStateNode node = getRegionStateNode(hri);<a name="line.702"></a>
+<span class="sourceLineNo">703</span> if (node == null) continue;<a name="line.703"></a>
+<span class="sourceLineNo">704</span><a name="line.704"></a>
+<span class="sourceLineNo">705</span> // TODO: State.OPEN<a name="line.705"></a>
+<span class="sourceLineNo">706</span> final ServerName serverName = node.getRegionLocation();<a name="line.706"></a>
+<span class="sourceLineNo">707</span> if (serverName == null) continue;<a name="line.707"></a>
<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span> public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.709"></a>
-<span class="sourceLineNo">710</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.710"></a>
-<span class="sourceLineNo">711</span> if (region != null) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span> synchronized (region) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span> ServerName server = region.getRegionLocation();<a name="line.713"></a>
-<span class="sourceLineNo">714</span> return server != null ? server : region.getLastHost();<a name="line.714"></a>
-<span class="sourceLineNo">715</span> }<a name="line.715"></a>
+<span class="sourceLineNo">709</span> List<RegionInfo> serverRegions = result.get(serverName);<a name="line.709"></a>
+<span class="sourceLineNo">710</span> if (serverRegions == null) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span> serverRegions = new ArrayList<RegionInfo>();<a name="line.711"></a>
+<span class="sourceLineNo">712</span> result.put(serverName, serverRegions);<a name="line.712"></a>
+<span class="sourceLineNo">713</span> }<a name="line.713"></a>
+<span class="sourceLineNo">714</span><a name="line.714"></a>
+<span class="sourceLineNo">715</span> serverRegions.add(node.getRegionInfo());<a name="line.715"></a>
<span class="sourceLineNo">716</span> }<a name="line.716"></a>
-<span class="sourceLineNo">717</span> return null;<a name="line.717"></a>
+<span class="sourceLineNo">717</span> return result;<a name="line.717"></a>
<span class="sourceLineNo">718</span> }<a name="line.718"></a>
<span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span> /**<a name="line.720"></a>
-<span class="sourceLineNo">721</span> * This is an EXPENSIVE clone. Cloning though is the safest thing to do.<a name="line.721"></a>
-<span class="sourceLineNo">722</span> * Can't let out original since it can change and at least the load balancer<a name="line.722"></a>
-<span class="sourceLineNo">723</span> * wants to iterate this exported list. We need to synchronize on regions<a name="line.723"></a>
-<span class="sourceLineNo">724</span> * since all access to this.servers is under a lock on this.regions.<a name="line.724"></a>
-<span class="sourceLineNo">725</span> * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.725"></a>
-<span class="sourceLineNo">726</span> * @return A clone of current assignments by table.<a name="line.726"></a>
-<span class="sourceLineNo">727</span> */<a name="line.727"></a>
-<span class="sourceLineNo">728</span> public Map<TableName, Map<ServerName, List<RegionInfo>>> getAssignmentsByTable(<a name="line.728"></a>
-<span class="sourceLineNo">729</span> final boolean forceByCluster) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span> if (!forceByCluster) return getAssignmentsByTable();<a name="line.730"></a>
-<span class="sourceLineNo">731</span><a name="line.731"></a>
-<span class="sourceLineNo">732</span> final HashMap<ServerName, List<RegionInfo>> ensemble =<a name="line.732"></a>
-<span class="sourceLineNo">733</span> new HashMap<ServerName, List<RegionInfo>>(serverMap.size());<a name="line.733"></a>
-<span class="sourceLineNo">734</span> for (ServerStateNode serverNode: serverMap.values()) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span> ensemble.put(serverNode.getServerName(), serverNode.getRegionInfoList());<a name="line.735"></a>
-<span class="sourceLineNo">736</span> }<a name="line.736"></a>
-<span class="sourceLineNo">737</span><a name="line.737"></a>
-<span class="sourceLineNo">738</span> // TODO: can we use Collections.singletonMap(HConstants.ENSEMBLE_TABLE_NAME, ensemble)?<a name="line.738"></a>
-<span class="sourceLineNo">739</span> final Map<TableName, Map<ServerName, List<RegionInfo>>> result =<a name="line.739"></a>
-<span class="sourceLineNo">740</span> new HashMap<TableName, Map<ServerName, List<RegionInfo>>>(1);<a name="line.740"></a>
-<span class="sourceLineNo">741</span> result.put(HConstants.ENSEMBLE_TABLE_NAME, ensemble);<a name="line.741"></a>
-<span class="sourceLineNo">742</span> return result;<a name="line.742"></a>
-<span class="sourceLineNo">743</span> }<a name="line.743"></a>
-<span class="sourceLineNo">744</span><a name="line.744"></a>
-<span class="sourceLineNo">745</span> public Map<TableName, Map<ServerName, List<RegionInfo>>> getAssignmentsByTable() {<a name="line.745"></a>
-<span class="sourceLineNo">746</span> final Map<TableName, Map<ServerName, List<RegionInfo>>> result = new HashMap<>();<a name="line.746"></a>
-<span class="sourceLineNo">747</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span> Map<ServerName, List<RegionInfo>> tableResult = result.get(node.getTable());<a name="line.748"></a>
-<span class="sourceLineNo">749</span> if (tableResult == null) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span> tableResult = new HashMap<ServerName, List<RegionInfo>>();<a name="line.750"></a>
-<span class="sourceLineNo">751</span> result.put(node.getTable(), tableResult);<a name="line.751"></a>
-<span class="sourceLineNo">752</span> }<a name="line.752"></a>
-<span class="sourceLineNo">753</span><a name="line.753"></a>
-<span class="sourceLineNo">754</span> final ServerName serverName = node.getRegionLocation();<a name="line.754"></a>
-<span class="sourceLineNo">755</span> if (serverName == null) {<a name="line.755"></a>
-<span class="sourceLineNo">756</span> LOG.info("Skipping, no server for " + node);<a name="line.756"></a>
-<span class="sourceLineNo">757</span> continue;<a name="line.757"></a>
-<span class="sourceLineNo">758</span> }<a name="line.758"></a>
-<span class="sourceLineNo">759</span> List<RegionInfo> serverResult = tableResult.get(serverName);<a name="line.759"></a>
-<span class="sourceLineNo">760</span> if (serverResult == null) {<a name="line.760"></a>
-<span class="sourceLineNo">761</span> serverResult = new ArrayList<RegionInfo>();<a name="line.761"></a>
-<span class="sourceLineNo">762</span> tableResult.put(serverName, serverResult);<a name="line.762"></a>
-<span class="sourceLineNo">763</span> }<a name="line.763"></a>
-<span class="sourceLineNo">764</span><a name="line.764"></a>
-<span class="sourceLineNo">765</span> serverResult.add(node.getRegionInfo());<a name="line.765"></a>
-<span class="sourceLineNo">766</span> }<a name="line.766"></a>
-<span class="sourceLineNo">767</span> // Add online servers with no assignment for the table.<a name="line.767"></a>
-<span class="sourceLineNo">768</span> for (Map<ServerName, List<RegionInfo>> table: result.values()) {<a name="line.768"></a>
-<span class="sourceLineNo">769</span> for (ServerName svr : serverMap.keySet()) {<a name="line.769"></a>
-<span class="sourceLineNo">770</span> if (!table.containsKey(svr)) {<a name="line.770"></a>
-<span class="sourceLineNo">771</span> table.put(svr, new ArrayList<RegionInfo>());<a name="line.771"></a>
-<span class="sourceLineNo">772</span> }<a name="line.772"></a>
-<span class="sourceLineNo">773</span> }<a name="line.773"></a>
-<span class="sourceLineNo">774</span> }<a name="line.774"></a>
-<span class="sourceLineNo">775</span> return result;<a name="line.775"></a>
-<span class="sourceLineNo">776</span> }<a name="line.776"></a>
-<span class="sourceLineNo">777</span><a name="line.777"></a>
-<span class="sourceLineNo">778</span> // ==========================================================================<a name="line.778"></a>
-<span class="sourceLineNo">779</span> // Region in transition helpers<a name="line.779"></a>
-<span class="sourceLineNo">780</span> // ==========================================================================<a name="line.780"></a>
-<span class="sourceLineNo">781</span> protected boolean addRegionInTransition(final RegionStateNode regionNode,<a name="line.781"></a>
-<span class="sourceLineNo">782</span> final RegionTransitionProcedure procedure) {<a name="line.782"></a>
-<span class="sourceLineNo">783</span> if (procedure != null && !regionNode.setProcedure(procedure)) return false;<a name="line.783"></a>
-<span class="sourceLineNo">784</span><a name="line.784"></a>
-<span class="sourceLineNo">785</span> regionInTransition.put(regionNode.getRegionInfo(), regionNode);<a name="line.785"></a>
-<span class="sourceLineNo">786</span> return true;<a name="line.786"></a>
-<span class="sourceLineNo">787</span> }<a name="line.787"></a>
+<span class="sourceLineNo">720</span> public Map<RegionInfo, ServerName> getRegionAssignments() {<a name="line.720"></a>
+<span class="sourceLineNo">721</span> final HashMap<RegionInfo, ServerName> assignments = new HashMap<RegionInfo, ServerName>();<a name="line.721"></a>
+<span class="sourceLineNo">722</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span> assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.723"></a>
+<span class="sourceLineNo">724</span> }<a name="line.724"></a>
+<span class="sourceLineNo">725</span> return assignments;<a name="line.725"></a>
+<span class="sourceLineNo">726</span> }<a name="line.726"></a>
+<span class="sourceLineNo">727</span><a name="line.727"></a>
+<span class="sourceLineNo">728</span> public Map<RegionState.State, List<RegionInfo>> getRegionByStateOfTable(TableName tableName) {<a name="line.728"></a>
+<span class="sourceLineNo">729</span> final State[] states = State.values();<a name="line.729"></a>
+<span class="sourceLineNo">730</span> final Map<RegionState.State, List<RegionInfo>> tableRegions =<a name="line.730"></a>
+<span class="sourceLineNo">731</span> new HashMap<State, List<RegionInfo>>(states.length);<a name="line.731"></a>
+<span class="sourceLineNo">732</span> for (int i = 0; i < states.length; ++i) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span> tableRegions.put(states[i], new ArrayList<RegionInfo>());<a name="line.733"></a>
+<span class="sourceLineNo">734</span> }<a name="line.734"></a>
+<span class="sourceLineNo">735</span><a name="line.735"></a>
+<span class="sourceLineNo">736</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.736"></a>
+<span class="sourceLineNo">737</span> if (node.getTable().equals(tableName)) {<a name="line.737"></a>
+<span class="sourceLineNo">738</span> tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.738"></a>
+<span class="sourceLineNo">739</span> }<a name="line.739"></a>
+<span class="sourceLineNo">740</span> }<a name="line.740"></a>
+<span class="sourceLineNo">741</span> return tableRegions;<a name="line.741"></a>
+<span class="sourceLineNo">742</span> }<a name="line.742"></a>
+<span class="sourceLineNo">743</span><a name="line.743"></a>
+<span class="sourceLineNo">744</span> public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.744"></a>
+<span class="sourceLineNo">745</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.745"></a>
+<span class="sourceLineNo">746</span> if (region != null) {<a name="line.746"></a>
+<span class="sourceLineNo">747</span> synchronized (region) {<a name="line.747"></a>
+<span class="sourceLineNo">748</span> ServerName server = region.getRegionLocation();<a name="line.748"></a>
+<span class="sourceLineNo">749</span> return server != null ? server : region.getLastHost();<a name="line.749"></a>
+<span class="sourceLineNo">750</span> }<a name="line.750"></a>
+<span class="sourceLineNo">751</span> }<a name="line.751"></a>
+<span class="sourceLineNo">752</span> return null;<a name="line.752"></a>
+<span class="sourceLineNo">753</span> }<a name="line.753"></a>
+<span class="sourceLineNo">754</span><a name="line.754"></a>
+<span class="sourceLineNo">755</span> /**<a name="line.755"></a>
+<span class="sourceLineNo">756</span> * This is an EXPENSIVE clone. Cloning though is the safest thing to do.<a name="line.756"></a>
+<span class="sourceLineNo">757</span> * Can't let out original since it can change and at least the load balancer<a name="line.757"></a>
+<span class="sourceLineNo">758</span> * wants to iterate this exported list. We need to synchronize on regions<a name="line.758"></a>
+<span class="sourceLineNo">759</span> * since all access to this.servers is under a lock on this.regions.<a name="line.759"></a>
+<span class="sourceLineNo">760</span> * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.760"></a>
+<span class="sourceLineNo">761</span> * @return A clone of current assignments by table.<a name="line.761"></a>
+<span class="sourceLineNo">762</span> */<a name="line.762"></a>
+<span class="sourceLineNo">763</span> public Map<TableName, Map<ServerName, List<RegionInfo>>> getAssignmentsByTable(<a name="line.763"></a>
+<span class="sourceLineNo">764</span> final boolean forceByCluster) {<a name="line.764"></a>
+<span class="sourceLi
<TRUNCATED>
[39/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.html
index 87df2e7..55e47d6 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.html
@@ -18,7 +18,7 @@
catch(err) {
}
//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":9,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":9,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -157,11 +157,15 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static class </code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerState</a></span></code> </td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerState</a></span></code>
+<div class="block">Server State.</div>
+</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static class </code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a></span></code> </td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a></span></code>
+<div class="block">State of Server; list of hosted regions, etc.</div>
+</td>
</tr>
</table>
</li>
@@ -307,7 +311,9 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
</tr>
<tr id="i13" class="rowColor">
<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#getOrCreateServer-org.apache.hadoop.hbase.ServerName-">getOrCreateServer</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code> </td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#getOrCreateServer-org.apache.hadoop.hbase.ServerName-">getOrCreateServer</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code>
+<div class="block">Be judicious calling this method.</div>
+</td>
</tr>
<tr id="i14" class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>></code></td>
@@ -452,35 +458,43 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
</tr>
<tr id="i47" class="rowColor">
<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#logSplit-org.apache.hadoop.hbase.ServerName-">logSplit</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code> </td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#logSplit-org.apache.hadoop.hbase.ServerName-">logSplit</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code>
+<div class="block">Called after we've split all logs on a crashed Server.</div>
+</td>
</tr>
<tr id="i48" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#logSplitting-org.apache.hadoop.hbase.ServerName-">logSplitting</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code>
+<div class="block">Call this when we start log splitting a crashed Server.</div>
+</td>
+</tr>
+<tr id="i49" class="rowColor">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#regionNamesToString-java.util.Collection-">regionNamesToString</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><byte[]> regions)</code> </td>
</tr>
-<tr id="i49" class="rowColor">
+<tr id="i50" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#removeFromFailedOpen-org.apache.hadoop.hbase.client.RegionInfo-">removeFromFailedOpen</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</code> </td>
</tr>
-<tr id="i50" class="altColor">
+<tr id="i51" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#removeFromOfflineRegions-org.apache.hadoop.hbase.client.RegionInfo-">removeFromOfflineRegions</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</code> </td>
</tr>
-<tr id="i51" class="rowColor">
+<tr id="i52" class="altColor">
<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#removeRegionFromServer-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">removeRegionFromServer</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</code> </td>
</tr>
-<tr id="i52" class="altColor">
+<tr id="i53" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#removeRegionInTransition-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-org.apache.hadoop.hbase.master.assignment.RegionTransitionProcedure-">removeRegionInTransition</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionTransitionProcedure</a> procedure)</code> </td>
</tr>
-<tr id="i53" class="rowColor">
+<tr id="i54" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#removeServer-org.apache.hadoop.hbase.ServerName-">removeServer</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code> </td>
</tr>
-<tr id="i54" class="altColor">
+<tr id="i55" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#updateRegionState-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.master.RegionState.State-">updateRegionState</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo,
<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master">RegionState.State</a> state)</code> </td>
@@ -540,7 +554,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>REGION_STATE_STAMP_COMPARATOR</h4>
-<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateStampComparator.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateStampComparator</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.408">REGION_STATE_STAMP_COMPARATOR</a></pre>
+<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateStampComparator.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateStampComparator</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.434">REGION_STATE_STAMP_COMPARATOR</a></pre>
</li>
</ul>
<a name="regionsMap">
@@ -549,7 +563,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>regionsMap</h4>
-<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentSkipListMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentSkipListMap</a><byte[],<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.415">regionsMap</a></pre>
+<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentSkipListMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentSkipListMap</a><byte[],<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.441">regionsMap</a></pre>
<div class="block">RegionName -- i.e. RegionInfo.getRegionName() -- as bytes to <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment"><code>RegionStates.RegionStateNode</code></a></div>
</li>
</ul>
@@ -559,7 +573,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>regionInTransition</h4>
-<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentSkipListMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentSkipListMap</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.418">regionInTransition</a></pre>
+<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentSkipListMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentSkipListMap</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.444">regionInTransition</a></pre>
</li>
</ul>
<a name="regionOffline">
@@ -568,7 +582,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>regionOffline</h4>
-<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentSkipListMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentSkipListMap</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.425">regionOffline</a></pre>
+<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentSkipListMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentSkipListMap</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.451">regionOffline</a></pre>
<div class="block">Regions marked as offline on a read of hbase:meta. Unused or at least, once
offlined, regions have no means of coming on line again. TODO.</div>
</li>
@@ -579,7 +593,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>regionFailedOpen</h4>
-<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentSkipListMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentSkipListMap</a><byte[],<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionFailedOpen</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.428">regionFailedOpen</a></pre>
+<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentSkipListMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentSkipListMap</a><byte[],<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionFailedOpen</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.454">regionFailedOpen</a></pre>
</li>
</ul>
<a name="serverMap">
@@ -588,7 +602,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>serverMap</h4>
-<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentHashMap</a><<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.431">serverMap</a></pre>
+<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentHashMap</a><<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.457">serverMap</a></pre>
</li>
</ul>
</li>
@@ -605,7 +619,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>RegionStates</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.434">RegionStates</a>()</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.460">RegionStates</a>()</pre>
</li>
</ul>
</li>
@@ -622,7 +636,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>clear</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.436">clear</a>()</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.462">clear</a>()</pre>
</li>
</ul>
<a name="isRegionInRegionStates-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -631,7 +645,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>isRegionInRegionStates</h4>
-<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.444">isRegionInRegionStates</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> hri)</pre>
+<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.470">isRegionInRegionStates</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> hri)</pre>
</li>
</ul>
<a name="createRegionStateNode-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -640,7 +654,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>createRegionStateNode</h4>
-<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.452">createRegionStateNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.478">createRegionStateNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
</li>
</ul>
<a name="getOrCreateRegionStateNode-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -649,7 +663,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getOrCreateRegionStateNode</h4>
-<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.458">getOrCreateRegionStateNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.484">getOrCreateRegionStateNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
</li>
</ul>
<a name="getRegionStateNodeFromName-byte:A-">
@@ -658,7 +672,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getRegionStateNodeFromName</h4>
-<pre><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.463">getRegionStateNodeFromName</a>(byte[] regionName)</pre>
+<pre><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.489">getRegionStateNodeFromName</a>(byte[] regionName)</pre>
</li>
</ul>
<a name="getRegionStateNode-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -667,7 +681,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getRegionStateNode</h4>
-<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.467">getRegionStateNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.493">getRegionStateNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
</li>
</ul>
<a name="deleteRegion-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -676,7 +690,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>deleteRegion</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.471">deleteRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.497">deleteRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
</li>
</ul>
<a name="getTableRegionStateNodes-org.apache.hadoop.hbase.TableName-">
@@ -685,7 +699,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getTableRegionStateNodes</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a><<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.480">getTableRegionStateNodes</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a><<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.506">getTableRegionStateNodes</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)</pre>
</li>
</ul>
<a name="getTableRegionStates-org.apache.hadoop.hbase.TableName-">
@@ -694,7 +708,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getTableRegionStates</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a><<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.489">getTableRegionStates</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a><<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.515">getTableRegionStates</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)</pre>
</li>
</ul>
<a name="getTableRegionsInfo-org.apache.hadoop.hbase.TableName-">
@@ -703,7 +717,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getTableRegionsInfo</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.498">getTableRegionsInfo</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.524">getTableRegionsInfo</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)</pre>
</li>
</ul>
<a name="getRegionStateNodes--">
@@ -712,7 +726,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getRegionStateNodes</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.507">getRegionStateNodes</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.533">getRegionStateNodes</a>()</pre>
</li>
</ul>
<a name="getRegionStates--">
@@ -721,7 +735,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getRegionStates</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a><<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.511">getRegionStates</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a><<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.537">getRegionStates</a>()</pre>
</li>
</ul>
<a name="getRegionState-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -730,7 +744,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getRegionState</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.522">getRegionState</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.548">getRegionState</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
</li>
</ul>
<a name="getRegionState-java.lang.String-">
@@ -739,7 +753,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getRegionState</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.527">getRegionState</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> encodedRegionName)</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.553">getRegionState</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> encodedRegionName)</pre>
</li>
</ul>
<a name="hasTableRegionStates-org.apache.hadoop.hbase.TableName-">
@@ -748,7 +762,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>hasTableRegionStates</h4>
-<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.540">hasTableRegionStates</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)</pre>
+<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.566">hasTableRegionStates</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)</pre>
</li>
</ul>
<a name="getRegionsOfTable-org.apache.hadoop.hbase.TableName-">
@@ -757,7 +771,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getRegionsOfTable</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.548">getRegionsOfTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> table)</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.574">getRegionsOfTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> table)</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Return online regions of table; does not include OFFLINE or SPLITTING regions.</dd>
@@ -770,7 +784,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getRegionsOfTable</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.557">getRegionsOfTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> table,
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.583">getRegionsOfTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> table,
boolean offline)</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -786,7 +800,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>include</h4>
-<pre>boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.572">include</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> node,
+<pre>boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.598">include</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> node,
boolean offline)</pre>
<div class="block">Utility. Whether to include region in list of regions. Default is to
weed out split and offline regions.</div>
@@ -803,7 +817,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getServerRegionInfoSet</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.588">getServerRegionInfoSet</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.614">getServerRegionInfoSet</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
<div class="block">Returns the set of regions hosted by the specified server</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -813,13 +827,32 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
</dl>
</li>
</ul>
+<a name="logSplitting-org.apache.hadoop.hbase.ServerName-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>logSplitting</h4>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.631">logSplitting</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
+<div class="block">Call this when we start log splitting a crashed Server.</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#logSplit-org.apache.hadoop.hbase.ServerName-"><code>logSplit(ServerName)</code></a></dd>
+</dl>
+</li>
+</ul>
<a name="logSplit-org.apache.hadoop.hbase.ServerName-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>logSplit</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.600">logSplit</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.642">logSplit</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
+<div class="block">Called after we've split all logs on a crashed Server.</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#logSplitting-org.apache.hadoop.hbase.ServerName-"><code>logSplitting(ServerName)</code></a></dd>
+</dl>
</li>
</ul>
<a name="logSplit-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -828,7 +861,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>logSplit</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.614">logSplit</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.649">logSplit</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
</li>
</ul>
<a name="updateRegionState-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.master.RegionState.State-">
@@ -837,7 +870,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>updateRegionState</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.622">updateRegionState</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo,
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.657">updateRegionState</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo,
<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master">RegionState.State</a> state)</pre>
</li>
</ul>
@@ -847,7 +880,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getAssignedRegions</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.632">getAssignedRegions</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.667">getAssignedRegions</a>()</pre>
</li>
</ul>
<a name="isRegionInState-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.master.RegionState.State...-">
@@ -856,7 +889,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>isRegionInState</h4>
-<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.642">isRegionInState</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo,
+<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.677">isRegionInState</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo,
<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master">RegionState.State</a>... state)</pre>
</li>
</ul>
@@ -866,7 +899,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>isRegionOnline</h4>
-<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.652">isRegionOnline</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
+<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.687">isRegionOnline</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
</li>
</ul>
<a name="isRegionOffline-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -875,7 +908,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>isRegionOffline</h4>
-<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.659">isRegionOffline</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
+<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.694">isRegionOffline</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>True if region is offline (In OFFLINE or CLOSED state).</dd>
@@ -888,7 +921,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getSnapShotOfAssignment</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.663">getSnapShotOfAssignment</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionI
nfo</a>> regions)</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.698">getSnapShotOfAssignment</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionI
nfo</a>> regions)</pre>
</li>
</ul>
<a name="getRegionAssignments--">
@@ -897,7 +930,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getRegionAssignments</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.685">getRegionAssignments</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.720">getRegionAssignments</a>()</pre>
</li>
</ul>
<a name="getRegionByStateOfTable-org.apache.hadoop.hbase.TableName-">
@@ -906,7 +939,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getRegionByStateOfTable</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master">RegionState.State</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.693">getRegionByStateOfTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master">RegionState.State</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.728">getRegionByStateOfTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)</pre>
</li>
</ul>
<a name="getRegionServerOfRegion-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -915,7 +948,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getRegionServerOfRegion</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.709">getRegionServerOfRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.744">getRegionServerOfRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
</li>
</ul>
<a name="getAssignmentsByTable-boolean-">
@@ -924,7 +957,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getAssignmentsByTable</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>>>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.728">getAssignmentsByTable</a>(boolean forceByClus
ter)</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>>>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.763">getAssignmentsByTable</a>(boolean forceByClus
ter)</pre>
<div class="block">This is an EXPENSIVE clone. Cloning though is the safest thing to do.
Can't let out original since it can change and at least the load balancer
wants to iterate this exported list. We need to synchronize on regions
@@ -943,7 +976,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getAssignmentsByTable</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>>>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.745">getAssignmentsByTable</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>>>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.780">getAssignmentsByTable</a>()</pre>
</li>
</ul>
<a name="addRegionInTransition-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-org.apache.hadoop.hbase.master.assignment.RegionTransitionProcedure-">
@@ -952,7 +985,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>addRegionInTransition</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.781">addRegionInTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode,
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.816">addRegionInTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionTransitionProcedure</a> procedure)</pre>
</li>
</ul>
@@ -962,7 +995,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>removeRegionInTransition</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.789">removeRegionInTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode,
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.824">removeRegionInTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionTransitionProcedure</a> procedure)</pre>
</li>
</ul>
@@ -972,7 +1005,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>hasRegionsInTransition</h4>
-<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.795">hasRegionsInTransition</a>()</pre>
+<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.830">hasRegionsInTransition</a>()</pre>
</li>
</ul>
<a name="isRegionInTransition-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -981,7 +1014,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>isRegionInTransition</h4>
-<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.799">isRegionInTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
+<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.834">isRegionInTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
</li>
</ul>
<a name="getRegionTransitionProcedure-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -990,7 +1023,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getRegionTransitionProcedure</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionTransitionProcedure</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.807">getRegionTransitionProcedure</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> hri)</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionTransitionProcedure</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.842">getRegionTransitionProcedure</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> hri)</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>If a procedure-in-transition for <code>hri</code>, return it else null.</dd>
@@ -1003,7 +1036,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getRegionTransitionState</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.813">getRegionTransitionState</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> hri)</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.848">getRegionTransitionState</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> hri)</pre>
</li>
</ul>
<a name="getRegionsInTransition--">
@@ -1012,7 +1045,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getRegionsInTransition</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.822">getRegionsInTransition</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.857">getRegionsInTransition</a>()</pre>
</li>
</ul>
<a name="getRegionsInTransitionCount--">
@@ -1021,7 +1054,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getRegionsInTransitionCount</h4>
-<pre>public int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.829">getRegionsInTransitionCount</a>()</pre>
+<pre>public int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.864">getRegionsInTransitionCount</a>()</pre>
<div class="block">Get the number of regions in transition.</div>
</li>
</ul>
@@ -1031,7 +1064,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getRegionsStateInTransition</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.833">getRegionsStateInTransition</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.868">getRegionsStateInTransition</a>()</pre>
</li>
</ul>
<a name="getRegionsInTransitionOrderedByTimestamp--">
@@ -1040,7 +1073,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getRegionsInTransitionOrderedByTimestamp</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a><<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.841">getRegionsInTransitionOrderedByTimestamp</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a><<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.876">getRegionsInTransitionOrderedByTimestamp</a>()</pre>
</li>
</ul>
<a name="addToOfflineRegions-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">
@@ -1049,7 +1082,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>addToOfflineRegions</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.853">addToOfflineRegions</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.888">addToOfflineRegions</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</pre>
</li>
</ul>
<a name="removeFromOfflineRegions-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -1058,7 +1091,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>removeFromOfflineRegions</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.859">removeFromOfflineRegions</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.894">removeFromOfflineRegions</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
</li>
</ul>
<a name="addToFailedOpen-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">
@@ -1067,7 +1100,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>addToFailedOpen</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionFailedOpen</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.901">addToFailedOpen</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionFailedOpen</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.936">addToFailedOpen</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</pre>
</li>
</ul>
<a name="getFailedOpen-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -1076,7 +1109,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getFailedOpen</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionFailedOpen</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.912">getFailedOpen</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionFailedOpen</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.947">getFailedOpen</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
</li>
</ul>
<a name="removeFromFailedOpen-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -1085,7 +1118,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>removeFromFailedOpen</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.916">removeFromFailedOpen</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.951">removeFromFailedOpen</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
</li>
</ul>
<a name="getRegionFailedOpen--">
@@ -1094,7 +1127,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getRegionFailedOpen</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.920">getRegionFailedOpen</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.955">getRegionFailedOpen</a>()</pre>
</li>
</ul>
<a name="getOrCreateServer-org.apache.hadoop.hbase.ServerName-">
@@ -1103,7 +1136,10 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getOrCreateServer</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.933">getOrCreateServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.974">getOrCreateServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
+<div class="block">Be judicious calling this method. Do it on server register ONLY otherwise
+ you could mess up online server accounting. TOOD: Review usage and convert
+ to <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#getServerNode-org.apache.hadoop.hbase.ServerName-"><code>getServerNode(ServerName)</code></a> where we can.</div>
</li>
</ul>
<a name="removeServer-org.apache.hadoop.hbase.ServerName-">
@@ -1112,7 +1148,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>removeServer</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.943">removeServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.984">removeServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
</li>
</ul>
<a name="getServerNode-org.apache.hadoop.hbase.ServerName-">
@@ -1121,7 +1157,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getServerNode</h4>
-<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.947">getServerNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.988">getServerNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
</li>
</ul>
<a name="getAverageLoad--">
@@ -1130,7 +1166,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getAverageLoad</h4>
-<pre>public double <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.951">getAverageLoad</a>()</pre>
+<pre>public double <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.992">getAverageLoad</a>()</pre>
</li>
</ul>
<a name="addRegionToServer-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">
@@ -1139,7 +1175,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>addRegionToServer</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.961">addRegionToServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.1002">addRegionToServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</pre>
</li>
</ul>
<a name="removeRegionFromServer-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">
@@ -1148,7 +1184,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>removeRegionFromServer</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.967">removeRegionFromServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.1008">removeRegionFromServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</pre>
</li>
</ul>
@@ -1158,7 +1194,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>regionNamesToString</h4>
-<pre>public static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.977">regionNamesToString</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><byte[]> regions)</pre>
+<pre>public static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.1018">regionNamesToString</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><byte[]> regions)</pre>
</li>
</ul>
</li>
[47/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index ee0f491..8e289b6 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -25,8 +25,8 @@ under the License.
<language>en-us</language>
<copyright>©2007 - 2018 The Apache Software Foundation</copyright>
<item>
- <title>File: 3621,
- Errors: 16261,
+ <title>File: 3626,
+ Errors: 16252,
Warnings: 0,
Infos: 0
</title>
@@ -6444,6 +6444,20 @@ under the License.
</tr>
<tr>
<td>
+ <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestServerCrashProcedureStuck.java">org/apache/hadoop/hbase/master/TestServerCrashProcedureStuck.java</a>
+ </td>
+ <td>
+ 0
+ </td>
+ <td>
+ 0
+ </td>
+ <td>
+ 0
+ </td>
+ </tr>
+ <tr>
+ <td>
<a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestAsyncSingleRequestRpcRetryingCaller.java">org/apache/hadoop/hbase/client/TestAsyncSingleRequestRpcRetryingCaller.java</a>
</td>
<td>
@@ -11022,6 +11036,20 @@ under the License.
</tr>
<tr>
<td>
+ <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure2.NoNodeDispatchException.java">org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.java</a>
+ </td>
+ <td>
+ 0
+ </td>
+ <td>
+ 0
+ </td>
+ <td>
+ 0
+ </td>
+ </tr>
+ <tr>
+ <td>
<a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.java</a>
</td>
<td>
@@ -17737,7 +17765,7 @@ under the License.
0
</td>
<td>
- 16
+ 6
</td>
</tr>
<tr>
@@ -18288,6 +18316,20 @@ under the License.
</tr>
<tr>
<td>
+ <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure2.NoServerDispatchException.java">org/apache/hadoop/hbase/procedure2/NoServerDispatchException.java</a>
+ </td>
+ <td>
+ 0
+ </td>
+ <td>
+ 0
+ </td>
+ <td>
+ 0
+ </td>
+ </tr>
+ <tr>
+ <td>
<a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestIllegalTableDescriptor.java">org/apache/hadoop/hbase/client/TestIllegalTableDescriptor.java</a>
</td>
<td>
@@ -34402,6 +34444,20 @@ under the License.
</tr>
<tr>
<td>
+ <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.SnapshotSegmentScanner.java">org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.java</a>
+ </td>
+ <td>
+ 0
+ </td>
+ <td>
+ 0
+ </td>
+ <td>
+ 0
+ </td>
+ </tr>
+ <tr>
+ <td>
<a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.MetricsRegionWrapper.java">org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.java</a>
</td>
<td>
@@ -35209,7 +35265,7 @@ under the License.
0
</td>
<td>
- 4
+ 5
</td>
</tr>
<tr>
@@ -45014,20 +45070,6 @@ under the License.
</tr>
<tr>
<td>
- <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.assignment.FailedRemoteDispatchException.java">org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.java</a>
- </td>
- <td>
- 0
- </td>
- <td>
- 0
- </td>
- <td>
- 0
- </td>
- </tr>
- <tr>
- <td>
<a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.util.FSRegionScanner.java">org/apache/hadoop/hbase/util/FSRegionScanner.java</a>
</td>
<td>
@@ -49900,6 +49942,20 @@ under the License.
</tr>
<tr>
<td>
+ <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure2.NullTargetServerDispatchException.java">org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.java</a>
+ </td>
+ <td>
+ 0
+ </td>
+ <td>
+ 0
+ </td>
+ <td>
+ 0
+ </td>
+ </tr>
+ <tr>
+ <td>
<a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.metrics.impl.MetricRegistriesImpl.java">org/apache/hadoop/hbase/metrics/impl/MetricRegistriesImpl.java</a>
</td>
<td>
@@ -50404,6 +50460,20 @@ under the License.
</tr>
<tr>
<td>
+ <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure2.FailedRemoteDispatchException.java">org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.java</a>
+ </td>
+ <td>
+ 0
+ </td>
+ <td>
+ 0
+ </td>
+ <td>
+ 0
+ </td>
+ </tr>
+ <tr>
+ <td>
<a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.Attributes.java">org/apache/hadoop/hbase/client/Attributes.java</a>
</td>
<td>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index 5d29bb7..f9b4c32 100644
--- a/coc.html
+++ b/coc.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180604" />
+ <meta name="Date-Revision-yyyymmdd" content="20180605" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase –
Code of Conduct Policy
@@ -375,7 +375,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-06-04</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-06-05</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index 9d9951d..49e7fc2 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180604" />
+ <meta name="Date-Revision-yyyymmdd" content="20180605" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Project Dependencies</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -440,7 +440,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-06-04</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-06-05</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index eaf0756..90968db 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180604" />
+ <meta name="Date-Revision-yyyymmdd" content="20180605" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Reactor Dependency Convergence</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -1105,7 +1105,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-06-04</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-06-05</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index 94d1ba4..90ee53f 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180604" />
+ <meta name="Date-Revision-yyyymmdd" content="20180605" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Dependency Information</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -313,7 +313,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-06-04</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-06-05</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index c742271..31bc06e 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180604" />
+ <meta name="Date-Revision-yyyymmdd" content="20180605" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Project Dependency Management</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -969,7 +969,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-06-04</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-06-05</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/allclasses-frame.html b/devapidocs/allclasses-frame.html
index a9f611b..8064dcd 100644
--- a/devapidocs/allclasses-frame.html
+++ b/devapidocs/allclasses-frame.html
@@ -832,7 +832,7 @@
<li><a href="org/apache/hadoop/hbase/ExtendedCellBuilderImpl.html" title="class in org.apache.hadoop.hbase" target="classFrame">ExtendedCellBuilderImpl</a></li>
<li><a href="org/apache/hadoop/hbase/backup/FailedArchiveException.html" title="class in org.apache.hadoop.hbase.backup" target="classFrame">FailedArchiveException</a></li>
<li><a href="org/apache/hadoop/hbase/regionserver/wal/FailedLogCloseException.html" title="class in org.apache.hadoop.hbase.regionserver.wal" target="classFrame">FailedLogCloseException</a></li>
-<li><a href="org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">FailedRemoteDispatchException</a></li>
+<li><a href="org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2" target="classFrame">FailedRemoteDispatchException</a></li>
<li><a href="org/apache/hadoop/hbase/exceptions/FailedSanityCheckException.html" title="class in org.apache.hadoop.hbase.exceptions" target="classFrame">FailedSanityCheckException</a></li>
<li><a href="org/apache/hadoop/hbase/ipc/FailedServerException.html" title="class in org.apache.hadoop.hbase.ipc" target="classFrame">FailedServerException</a></li>
<li><a href="org/apache/hadoop/hbase/ipc/FailedServers.html" title="class in org.apache.hadoop.hbase.ipc" target="classFrame">FailedServers</a></li>
@@ -1706,6 +1706,7 @@
<li><a href="org/apache/hadoop/hbase/io/encoding/NoneEncoder.html" title="class in org.apache.hadoop.hbase.io.encoding" target="classFrame">NoneEncoder</a></li>
<li><a href="org/apache/hadoop/hbase/regionserver/NonLazyKeyValueScanner.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">NonLazyKeyValueScanner</a></li>
<li><a href="org/apache/hadoop/hbase/security/visibility/expression/NonLeafExpressionNode.html" title="class in org.apache.hadoop.hbase.security.visibility.expression" target="classFrame">NonLeafExpressionNode</a></li>
+<li><a href="org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2" target="classFrame">NoNodeDispatchException</a></li>
<li><a href="org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">NonReversedNonLazyKeyValueScanner</a></li>
<li><a href="org/apache/hadoop/hbase/regionserver/NonThreadSafeMemStoreSizing.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">NonThreadSafeMemStoreSizing</a></li>
<li><a href="org/apache/hadoop/hbase/io/hfile/NoOpDataBlockEncoder.html" title="class in org.apache.hadoop.hbase.io.hfile" target="classFrame">NoOpDataBlockEncoder</a></li>
@@ -1719,6 +1720,7 @@
<li><a href="org/apache/hadoop/hbase/master/normalizer/NormalizationPlan.html" title="interface in org.apache.hadoop.hbase.master.normalizer" target="classFrame"><span class="interfaceName">NormalizationPlan</span></a></li>
<li><a href="org/apache/hadoop/hbase/master/normalizer/NormalizationPlan.PlanType.html" title="enum in org.apache.hadoop.hbase.master.normalizer" target="classFrame">NormalizationPlan.PlanType</a></li>
<li><a href="org/apache/hadoop/hbase/regionserver/querymatcher/NormalUserScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver.querymatcher" target="classFrame">NormalUserScanQueryMatcher</a></li>
+<li><a href="org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2" target="classFrame">NoServerDispatchException</a></li>
<li><a href="org/apache/hadoop/hbase/client/NoServerForRegionException.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">NoServerForRegionException</a></li>
<li><a href="org/apache/hadoop/hbase/regionserver/NoSuchColumnFamilyException.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">NoSuchColumnFamilyException</a></li>
<li><a href="org/apache/hadoop/hbase/master/NoSuchProcedureException.html" title="class in org.apache.hadoop.hbase.master" target="classFrame">NoSuchProcedureException</a></li>
@@ -1730,6 +1732,7 @@
<li><a href="org/apache/hadoop/hbase/quotas/policies/NoWritesCompactionsViolationPolicyEnforcement.html" title="class in org.apache.hadoop.hbase.quotas.policies" target="classFrame">NoWritesCompactionsViolationPolicyEnforcement</a></li>
<li><a href="org/apache/hadoop/hbase/quotas/policies/NoWritesViolationPolicyEnforcement.html" title="class in org.apache.hadoop.hbase.quotas.policies" target="classFrame">NoWritesViolationPolicyEnforcement</a></li>
<li><a href="org/apache/hadoop/hbase/filter/NullComparator.html" title="class in org.apache.hadoop.hbase.filter" target="classFrame">NullComparator</a></li>
+<li><a href="org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2" target="classFrame">NullTargetServerDispatchException</a></li>
<li><a href="org/apache/hadoop/hbase/util/ObjectIntPair.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">ObjectIntPair</a></li>
<li><a href="org/apache/hadoop/hbase/util/ObjectPool.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">ObjectPool</a></li>
<li><a href="org/apache/hadoop/hbase/util/ObjectPool.ObjectFactory.html" title="interface in org.apache.hadoop.hbase.util" target="classFrame"><span class="interfaceName">ObjectPool.ObjectFactory</span></a></li>
@@ -2502,6 +2505,7 @@
<li><a href="org/apache/hadoop/hbase/snapshot/SnapshotReferenceUtil.html" title="class in org.apache.hadoop.hbase.snapshot" target="classFrame">SnapshotReferenceUtil</a></li>
<li><a href="org/apache/hadoop/hbase/snapshot/SnapshotReferenceUtil.SnapshotVisitor.html" title="interface in org.apache.hadoop.hbase.snapshot" target="classFrame"><span class="interfaceName">SnapshotReferenceUtil.SnapshotVisitor</span></a></li>
<li><a href="org/apache/hadoop/hbase/snapshot/SnapshotReferenceUtil.StoreFileVisitor.html" title="interface in org.apache.hadoop.hbase.snapshot" target="classFrame"><span class="interfaceName">SnapshotReferenceUtil.StoreFileVisitor</span></a></li>
+<li><a href="org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">SnapshotSegmentScanner</a></li>
<li><a href="org/apache/hadoop/hbase/master/SnapshotSentinel.html" title="interface in org.apache.hadoop.hbase.master" target="classFrame"><span class="interfaceName">SnapshotSentinel</span></a></li>
<li><a href="org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client" target="classFrame">SnapshotType</a></li>
<li><a href="org/apache/hadoop/hbase/util/SoftObjectPool.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">SoftObjectPool</a></li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/devapidocs/allclasses-noframe.html b/devapidocs/allclasses-noframe.html
index 131c809..4db3f7b 100644
--- a/devapidocs/allclasses-noframe.html
+++ b/devapidocs/allclasses-noframe.html
@@ -832,7 +832,7 @@
<li><a href="org/apache/hadoop/hbase/ExtendedCellBuilderImpl.html" title="class in org.apache.hadoop.hbase">ExtendedCellBuilderImpl</a></li>
<li><a href="org/apache/hadoop/hbase/backup/FailedArchiveException.html" title="class in org.apache.hadoop.hbase.backup">FailedArchiveException</a></li>
<li><a href="org/apache/hadoop/hbase/regionserver/wal/FailedLogCloseException.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FailedLogCloseException</a></li>
-<li><a href="org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.master.assignment">FailedRemoteDispatchException</a></li>
+<li><a href="org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">FailedRemoteDispatchException</a></li>
<li><a href="org/apache/hadoop/hbase/exceptions/FailedSanityCheckException.html" title="class in org.apache.hadoop.hbase.exceptions">FailedSanityCheckException</a></li>
<li><a href="org/apache/hadoop/hbase/ipc/FailedServerException.html" title="class in org.apache.hadoop.hbase.ipc">FailedServerException</a></li>
<li><a href="org/apache/hadoop/hbase/ipc/FailedServers.html" title="class in org.apache.hadoop.hbase.ipc">FailedServers</a></li>
@@ -1706,6 +1706,7 @@
<li><a href="org/apache/hadoop/hbase/io/encoding/NoneEncoder.html" title="class in org.apache.hadoop.hbase.io.encoding">NoneEncoder</a></li>
<li><a href="org/apache/hadoop/hbase/regionserver/NonLazyKeyValueScanner.html" title="class in org.apache.hadoop.hbase.regionserver">NonLazyKeyValueScanner</a></li>
<li><a href="org/apache/hadoop/hbase/security/visibility/expression/NonLeafExpressionNode.html" title="class in org.apache.hadoop.hbase.security.visibility.expression">NonLeafExpressionNode</a></li>
+<li><a href="org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NoNodeDispatchException</a></li>
<li><a href="org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.html" title="class in org.apache.hadoop.hbase.regionserver">NonReversedNonLazyKeyValueScanner</a></li>
<li><a href="org/apache/hadoop/hbase/regionserver/NonThreadSafeMemStoreSizing.html" title="class in org.apache.hadoop.hbase.regionserver">NonThreadSafeMemStoreSizing</a></li>
<li><a href="org/apache/hadoop/hbase/io/hfile/NoOpDataBlockEncoder.html" title="class in org.apache.hadoop.hbase.io.hfile">NoOpDataBlockEncoder</a></li>
@@ -1719,6 +1720,7 @@
<li><a href="org/apache/hadoop/hbase/master/normalizer/NormalizationPlan.html" title="interface in org.apache.hadoop.hbase.master.normalizer"><span class="interfaceName">NormalizationPlan</span></a></li>
<li><a href="org/apache/hadoop/hbase/master/normalizer/NormalizationPlan.PlanType.html" title="enum in org.apache.hadoop.hbase.master.normalizer">NormalizationPlan.PlanType</a></li>
<li><a href="org/apache/hadoop/hbase/regionserver/querymatcher/NormalUserScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver.querymatcher">NormalUserScanQueryMatcher</a></li>
+<li><a href="org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NoServerDispatchException</a></li>
<li><a href="org/apache/hadoop/hbase/client/NoServerForRegionException.html" title="class in org.apache.hadoop.hbase.client">NoServerForRegionException</a></li>
<li><a href="org/apache/hadoop/hbase/regionserver/NoSuchColumnFamilyException.html" title="class in org.apache.hadoop.hbase.regionserver">NoSuchColumnFamilyException</a></li>
<li><a href="org/apache/hadoop/hbase/master/NoSuchProcedureException.html" title="class in org.apache.hadoop.hbase.master">NoSuchProcedureException</a></li>
@@ -1730,6 +1732,7 @@
<li><a href="org/apache/hadoop/hbase/quotas/policies/NoWritesCompactionsViolationPolicyEnforcement.html" title="class in org.apache.hadoop.hbase.quotas.policies">NoWritesCompactionsViolationPolicyEnforcement</a></li>
<li><a href="org/apache/hadoop/hbase/quotas/policies/NoWritesViolationPolicyEnforcement.html" title="class in org.apache.hadoop.hbase.quotas.policies">NoWritesViolationPolicyEnforcement</a></li>
<li><a href="org/apache/hadoop/hbase/filter/NullComparator.html" title="class in org.apache.hadoop.hbase.filter">NullComparator</a></li>
+<li><a href="org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NullTargetServerDispatchException</a></li>
<li><a href="org/apache/hadoop/hbase/util/ObjectIntPair.html" title="class in org.apache.hadoop.hbase.util">ObjectIntPair</a></li>
<li><a href="org/apache/hadoop/hbase/util/ObjectPool.html" title="class in org.apache.hadoop.hbase.util">ObjectPool</a></li>
<li><a href="org/apache/hadoop/hbase/util/ObjectPool.ObjectFactory.html" title="interface in org.apache.hadoop.hbase.util"><span class="interfaceName">ObjectPool.ObjectFactory</span></a></li>
@@ -2502,6 +2505,7 @@
<li><a href="org/apache/hadoop/hbase/snapshot/SnapshotReferenceUtil.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotReferenceUtil</a></li>
<li><a href="org/apache/hadoop/hbase/snapshot/SnapshotReferenceUtil.SnapshotVisitor.html" title="interface in org.apache.hadoop.hbase.snapshot"><span class="interfaceName">SnapshotReferenceUtil.SnapshotVisitor</span></a></li>
<li><a href="org/apache/hadoop/hbase/snapshot/SnapshotReferenceUtil.StoreFileVisitor.html" title="interface in org.apache.hadoop.hbase.snapshot"><span class="interfaceName">SnapshotReferenceUtil.StoreFileVisitor</span></a></li>
+<li><a href="org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">SnapshotSegmentScanner</a></li>
<li><a href="org/apache/hadoop/hbase/master/SnapshotSentinel.html" title="interface in org.apache.hadoop.hbase.master"><span class="interfaceName">SnapshotSentinel</span></a></li>
<li><a href="org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client">SnapshotType</a></li>
<li><a href="org/apache/hadoop/hbase/util/SoftObjectPool.html" title="class in org.apache.hadoop.hbase.util">SoftObjectPool</a></li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index 27c41aa..d8ec292 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3768,21 +3768,21 @@
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/Version.html#date">date</a></code></td>
-<td class="colLast"><code>"Mon Jun 4 14:39:33 UTC 2018"</code></td>
+<td class="colLast"><code>"Tue Jun 5 14:39:21 UTC 2018"</code></td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/Version.html#revision">revision</a></code></td>
-<td class="colLast"><code>"7da0015a3b58a28ccbae0b03ba7de9ce62b751e1"</code></td>
+<td class="colLast"><code>"7d3750bd9fc9747623549c242cc4171e224b3eaf"</code></td>
</tr>
<tr class="altColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.Version.srcChecksum">
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/Version.html#srcChecksum">srcChecksum</a></code></td>
-<td class="colLast"><code>"989bd889a2d1d1df7f1398541236c61a"</code></td>
+<td class="colLast"><code>"e9b6cda5f76e49e801042c444f21287b"</code></td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.Version.url">
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/deprecated-list.html
----------------------------------------------------------------------
diff --git a/devapidocs/deprecated-list.html b/devapidocs/deprecated-list.html
index 4eae62b..7961ce7 100644
--- a/devapidocs/deprecated-list.html
+++ b/devapidocs/deprecated-list.html
@@ -2911,7 +2911,7 @@
</tr>
<tr class="altColor">
<td class="colOne"><a href="org/apache/hadoop/hbase/client/Scan.html#setStopRow-byte:A-">org.apache.hadoop.hbase.client.Scan.setStopRow(byte[])</a>
-<div class="block"><span class="deprecationComment">use <a href="org/apache/hadoop/hbase/client/Scan.html#withStartRow-byte:A-"><code>Scan.withStartRow(byte[])</code></a> instead. This method may change the inclusive of
+<div class="block"><span class="deprecationComment">use <a href="org/apache/hadoop/hbase/client/Scan.html#withStopRow-byte:A-"><code>Scan.withStopRow(byte[])</code></a> instead. This method may change the inclusive of
the stop row to keep compatible with the old behavior.</span></div>
</td>
</tr>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index b027209..69d331c 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -12777,6 +12777,8 @@
<dd>
<div class="block">Close the KeyValue scanner.</div>
</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#close--">close()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">SnapshotSegmentScanner</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/StoreFileReader.html#close-boolean-">close(boolean)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/StoreFileReader.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileReader</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#close--">close()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a></dt>
@@ -19722,6 +19724,8 @@
</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.html#createIO-org.apache.hadoop.hbase.io.MetricsIOWrapper-">createIO(MetricsIOWrapper)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServerSourceFactoryImpl</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#createIterator-org.apache.hadoop.hbase.regionserver.Segment-">createIterator(Segment)</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">SnapshotSegmentScanner</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/JarFinder.html#createJar-java.io.File-java.io.File-">createJar(File, File)</a></span> - Static method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/JarFinder.html" title="class in org.apache.hadoop.hbase.mapreduce">JarFinder</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/AbstractHBaseSaslRpcClient.html#createKerberosSaslClient-java.lang.String:A-java.lang.String-java.lang.String-">createKerberosSaslClient(String[], String, String)</a></span> - Method in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/AbstractHBaseSaslRpcClient.html" title="class in org.apache.hadoop.hbase.security">AbstractHBaseSaslRpcClient</a></dt>
@@ -21174,6 +21178,8 @@
</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/SegmentScanner.html#current">current</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/SegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">SegmentScanner</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#current">current</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">SnapshotSegmentScanner</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/AvlUtil.AvlTreeIterator.html#current">current</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/AvlUtil.AvlTreeIterator.html" title="class in org.apache.hadoop.hbase.util">AvlUtil.AvlTreeIterator</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/CollectionBackedScanner.html#current">current</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/CollectionBackedScanner.html" title="class in org.apache.hadoop.hbase.util">CollectionBackedScanner</a></dt>
@@ -29723,12 +29729,12 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html#FailedProcedure-long-java.lang.String-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.util.NonceKey-java.io.IOException-">FailedProcedure(long, String, User, NonceKey, IOException)</a></span> - Constructor for class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/ProcedureExecutor.FailedProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.FailedProcedure</a></dt>
<dd> </dd>
-<dt><a href="org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">FailedRemoteDispatchException</span></a> - Exception in <a href="org/apache/hadoop/hbase/master/assignment/package-summary.html">org.apache.hadoop.hbase.master.assignment</a></dt>
+<dt><a href="org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">FailedRemoteDispatchException</span></a> - Exception in <a href="org/apache/hadoop/hbase/procedure2/package-summary.html">org.apache.hadoop.hbase.procedure2</a></dt>
<dd>
<div class="block">Used internally signaling failed queue of a remote procedure
operation.</div>
</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html#FailedRemoteDispatchException-java.lang.String-">FailedRemoteDispatchException(String)</a></span> - Constructor for exception org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.master.assignment">FailedRemoteDispatchException</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html#FailedRemoteDispatchException-java.lang.String-">FailedRemoteDispatchException(String)</a></span> - Constructor for exception org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">FailedRemoteDispatchException</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HRegion.ObservedExceptionsInBatch.html#failedSanityCheck">failedSanityCheck</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HRegion.ObservedExceptionsInBatch.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.ObservedExceptionsInBatch</a></dt>
<dd> </dd>
@@ -44211,7 +44217,9 @@
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/RegionStates.html#getOrCreateRegionStateNode-org.apache.hadoop.hbase.client.RegionInfo-">getOrCreateRegionStateNode(RegionInfo)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/RegionStates.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/RegionStates.html#getOrCreateServer-org.apache.hadoop.hbase.ServerName-">getOrCreateServer(ServerName)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/RegionStates.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates</a></dt>
-<dd> </dd>
+<dd>
+<div class="block">Be judicious calling this method.</div>
+</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/MetricsTableLatenciesImpl.html#getOrCreateTableHistogram-java.lang.String-">getOrCreateTableHistogram(String)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MetricsTableLatenciesImpl.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsTableLatenciesImpl</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/ColumnFamilyDescriptorBuilder.ModifyableColumnFamilyDescriptor.html#getOrDefault-org.apache.hadoop.hbase.util.Bytes-java.util.function.Function-T-">getOrDefault(Bytes, Function<byte[], T>, T)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/ColumnFamilyDescriptorBuilder.ModifyableColumnFamilyDescriptor.html" title="class in org.apache.hadoop.hbase.client">ColumnFamilyDescriptorBuilder.ModifyableColumnFamilyDescriptor</a></dt>
@@ -48106,6 +48114,8 @@
<dd>
<div class="block">Get the order of this KeyValueScanner.</div>
</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#getScannerOrder--">getScannerOrder()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">SnapshotSegmentScanner</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#getScannerOrder--">getScannerOrder()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/TableResource.html#getScannerResource--">getScannerResource()</a></span> - Method in class org.apache.hadoop.hbase.rest.<a href="org/apache/hadoop/hbase/rest/TableResource.html" title="class in org.apache.hadoop.hbase.rest">TableResource</a></dt>
@@ -49135,6 +49145,10 @@
<dd>
<div class="block">Fetches all <a href="org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshot.html" title="class in org.apache.hadoop.hbase.quotas"><code>SpaceQuotaSnapshot</code></a> objects from the <code>hbase:quota</code> table.</div>
</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html#getSnapshotScanners--">getSnapshotScanners()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html" title="class in org.apache.hadoop.hbase.regionserver">CompositeImmutableSegment</a></dt>
+<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#getSnapshotScanners--">getSnapshotScanners()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/ImmutableSegment.html" title="class in org.apache.hadoop.hbase.regionserver">ImmutableSegment</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/SnapshotDescriptionUtils.html#getSnapshotsDir-org.apache.hadoop.fs.Path-">getSnapshotsDir(Path)</a></span> - Static method in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/SnapshotDescriptionUtils.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotDescriptionUtils</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/SnapshotInfo.html#getSnapshotsFilesMap-org.apache.hadoop.conf.Configuration-java.util.concurrent.atomic.AtomicLong-java.util.concurrent.atomic.AtomicLong-java.util.concurrent.atomic.AtomicLong-">getSnapshotsFilesMap(Configuration, AtomicLong, AtomicLong, AtomicLong)</a></span> - Static method in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/SnapshotInfo.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotInfo</a></dt>
@@ -61468,6 +61482,10 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/DeadServer.html#isDeadServer-org.apache.hadoop.hbase.ServerName-">isDeadServer(ServerName)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/DeadServer.html" title="class in org.apache.hadoop.hbase.master">DeadServer</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#isDeadServerProcessed-org.apache.hadoop.hbase.ServerName-">isDeadServerProcessed(ServerName)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a></dt>
+<dd>
+<div class="block">This is a very particular check.</div>
+</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/HFile.Reader.html#isDecodeMemStoreTS--">isDecodeMemStoreTS()</a></span> - Method in interface org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/HFile.Reader.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFile.Reader</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.html#isDecodeMemStoreTS--">isDecodeMemStoreTS()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileReaderImpl</a></dt>
@@ -62665,6 +62683,8 @@
<dd>
<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#isOffline--">isOffline()</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/RegionState.html#isOffline--">isOffline()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html#isOffPeak--">isOffPeak()</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.compactions.<a href="org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html" title="interface in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequest</a></dt>
@@ -63217,6 +63237,11 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/RecoverMetaProcedure.html#isRunRequired--">isRunRequired()</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/RecoverMetaProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">RecoverMetaProcedure</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#isSafeToProceed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-java.io.IOException-">isSafeToProceed(MasterProcedureEnv, RegionStates.RegionStateNode, IOException)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">UnassignProcedure</a></dt>
+<dd>
+<div class="block">Our remote call failed but there are a few states where it is safe to proceed with the
+ unassign; e.g.</div>
+</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ServerName.html#isSameAddress-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.ServerName-">isSameAddress(ServerName, ServerName)</a></span> - Static method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/FSHDFSUtils.html#isSameHdfs-org.apache.hadoop.conf.Configuration-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.FileSystem-">isSameHdfs(Configuration, FileSystem, FileSystem)</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/FSHDFSUtils.html" title="class in org.apache.hadoop.hbase.util">FSHDFSUtils</a></dt>
@@ -63960,6 +63985,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/SegmentScanner.html#iter">iter</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/SegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">SegmentScanner</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#iter">iter</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">SnapshotSegmentScanner</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/client/RemoteHTable.Scanner.Iter.html#Iter--">Iter()</a></span> - Constructor for class org.apache.hadoop.hbase.rest.client.<a href="org/apache/hadoop/hbase/rest/client/RemoteHTable.Scanner.Iter.html" title="class in org.apache.hadoop.hbase.rest.client">RemoteHTable.Scanner.Iter</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/CollectionBackedScanner.html#iter">iter</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/CollectionBackedScanner.html" title="class in org.apache.hadoop.hbase.util">CollectionBackedScanner</a></dt>
@@ -68750,9 +68777,15 @@
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/SnapshotInfo.SnapshotStats.html#logsMissing">logsMissing</a></span> - Variable in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/SnapshotInfo.SnapshotStats.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotInfo.SnapshotStats</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/RegionStates.html#logSplit-org.apache.hadoop.hbase.ServerName-">logSplit(ServerName)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/RegionStates.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates</a></dt>
-<dd> </dd>
+<dd>
+<div class="block">Called after we've split all logs on a crashed Server.</div>
+</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/RegionStates.html#logSplit-org.apache.hadoop.hbase.client.RegionInfo-">logSplit(RegionInfo)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/RegionStates.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/RegionStates.html#logSplitting-org.apache.hadoop.hbase.ServerName-">logSplitting(ServerName)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/RegionStates.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates</a></dt>
+<dd>
+<div class="block">Call this when we start log splitting a crashed Server.</div>
+</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/bucket/BucketAllocator.html#logStatistics--">logStatistics()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="org/apache/hadoop/hbase/io/hfile/bucket/BucketAllocator.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketAllocator</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#logStats--">logStats()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache</a></dt>
@@ -76084,6 +76117,8 @@
<dd>
<div class="block">Return the next Cell in this scanner, iterating the scanner</div>
</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#next--">next()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">SnapshotSegmentScanner</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#next--">next()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/StoreScanner.html#next--">next()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></dt>
@@ -76717,6 +76752,12 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AsyncRegionLocator.html#nonMetaRegionLocator">nonMetaRegionLocator</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AsyncRegionLocator.html" title="class in org.apache.hadoop.hbase.client">AsyncRegionLocator</a></dt>
<dd> </dd>
+<dt><a href="org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">NoNodeDispatchException</span></a> - Exception in <a href="org/apache/hadoop/hbase/procedure2/package-summary.html">org.apache.hadoop.hbase.procedure2</a></dt>
+<dd>
+<div class="block">Used internally signaling failed queue of a remote procedure operation.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html#NoNodeDispatchException-java.lang.String-">NoNodeDispatchException(String)</a></span> - Constructor for exception org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NoNodeDispatchException</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/StripeStoreFileManager.html#nonOpenRowCompare-byte:A-byte:A-">nonOpenRowCompare(byte[], byte[])</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/StripeStoreFileManager.html" title="class in org.apache.hadoop.hbase.regionserver">StripeStoreFileManager</a></dt>
<dd>
<div class="block">Compare two keys.</div>
@@ -76877,6 +76918,12 @@
</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/querymatcher/NormalUserScanQueryMatcher.html#NormalUserScanQueryMatcher-org.apache.hadoop.hbase.client.Scan-org.apache.hadoop.hbase.regionserver.ScanInfo-org.apache.hadoop.hbase.regionserver.querymatcher.ColumnTracker-boolean-org.apache.hadoop.hbase.regionserver.querymatcher.DeleteTracker-long-long-">NormalUserScanQueryMatcher(Scan, ScanInfo, ColumnTracker, boolean, DeleteTracker, long, long)</a></span> - Constructor for class org.apache.hadoop.hbase.regionserver.querymatcher.<a href="org/apache/hadoop/hbase/regionserver/querymatcher/NormalUserScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver.querymatcher">NormalUserScanQueryMatcher</a></dt>
<dd> </dd>
+<dt><a href="org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">NoServerDispatchException</span></a> - Exception in <a href="org/apache/hadoop/hbase/procedure2/package-summary.html">org.apache.hadoop.hbase.procedure2</a></dt>
+<dd>
+<div class="block">Used internally signaling failed queue of a remote procedure operation.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html#NoServerDispatchException-java.lang.String-">NoServerDispatchException(String)</a></span> - Constructor for exception org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NoServerDispatchException</a></dt>
+<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/client/NoServerForRegionException.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">NoServerForRegionException</span></a> - Exception in <a href="org/apache/hadoop/hbase/client/package-summary.html">org.apache.hadoop.hbase.client</a></dt>
<dd>
<div class="block">Thrown when no region server can be found for a region</div>
@@ -77135,6 +77182,12 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/AbstractProcedureScheduler.html#nullPollCalls">nullPollCalls</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/AbstractProcedureScheduler.html" title="class in org.apache.hadoop.hbase.procedure2">AbstractProcedureScheduler</a></dt>
<dd> </dd>
+<dt><a href="org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">NullTargetServerDispatchException</span></a> - Exception in <a href="org/apache/hadoop/hbase/procedure2/package-summary.html">org.apache.hadoop.hbase.procedure2</a></dt>
+<dd>
+<div class="block">Used internally signaling failed queue of a remote procedure operation.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html#NullTargetServerDispatchException-java.lang.String-">NullTargetServerDispatchException(String)</a></span> - Constructor for exception org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NullTargetServerDispatchException</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/coprocessor/AsyncAggregationClient.html#nullToEmpty-byte:A-">nullToEmpty(byte[])</a></span> - Static method in class org.apache.hadoop.hbase.client.coprocessor.<a href="org/apache/hadoop/hbase/client/coprocessor/AsyncAggregationClient.html" title="class in org.apache.hadoop.hbase.client.coprocessor">AsyncAggregationClient</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ipc/MetricsHBaseServerSource.html#NUM_ACTIVE_GENERAL_HANDLER_DESC">NUM_ACTIVE_GENERAL_HANDLER_DESC</a></span> - Static variable in interface org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/MetricsHBaseServerSource.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerSource</a></dt>
@@ -80137,6 +80190,8 @@ service.</div>
<dd>
<div class="block">Look at the next Cell in this scanner, but do not iterate the scanner</div>
</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#peek--">peek()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">SnapshotSegmentScanner</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#peek--">peek()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/StoreScanner.html#peek--">peek()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></dt>
@@ -84432,6 +84487,10 @@ service.</div>
<dd>
<div class="block">Constructor</div>
</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#proceed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">proceed(MasterProcedureEnv, RegionStates.RegionStateNode)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">UnassignProcedure</a></dt>
+<dd>
+<div class="block">Set it up so when procedure is unsuspended, we'll move to the procedure finish.</div>
+</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/ServerNonceManager.OperationContext.html#PROCEED">PROCEED</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/ServerNonceManager.OperationContext.html" title="class in org.apache.hadoop.hbase.regionserver">ServerNonceManager.OperationContext</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/filter/RestCsrfPreventionFilter.HttpInteraction.html#proceed--">proceed()</a></span> - Method in interface org.apache.hadoop.hbase.rest.filter.<a href="org/apache/hadoop/hbase/rest/filter/RestCsrfPreventionFilter.HttpInteraction.html" title="interface in org.apache.hadoop.hbase.rest.filter">RestCsrfPreventionFilter.HttpInteraction</a></dt>
@@ -89519,9 +89578,13 @@ service.</div>
<dt><a href="org/apache/hadoop/hbase/master/assignment/RegionStates.ServerReportEvent.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">RegionStates.ServerReportEvent</span></a> - Class in <a href="org/apache/hadoop/hbase/master/assignment/package-summary.html">org.apache.hadoop.hbase.master.assignment</a></dt>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">RegionStates.ServerState</span></a> - Enum in <a href="org/apache/hadoop/hbase/master/assignment/package-summary.html">org.apache.hadoop.hbase.master.assignment</a></dt>
-<dd> </dd>
+<dd>
+<div class="block">Server State.</div>
+</dd>
<dt><a href="org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">RegionStates.ServerStateNode</span></a> - Class in <a href="org/apache/hadoop/hbase/master/assignment/package-summary.html">org.apache.hadoop.hbase.master.assignment</a></dt>
-<dd> </dd>
+<dd>
+<div class="block">State of Server; list of hosted regions, etc.</div>
+</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateStampComparator.html#RegionStateStampComparator--">RegionStateStampComparator()</a></span> - Constructor for class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateStampComparator.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateStampComparator</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#regionStateStore">regionStateStore</a></span> - Variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a></dt>
@@ -92401,6 +92464,8 @@ service.</div>
<dd>
<div class="block">Reseek the scanner at or after the specified KeyValue.</div>
</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#reseek-org.apache.hadoop.hbase.Cell-">reseek(Cell)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">SnapshotSegmentScanner</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#reseek-org.apache.hadoop.hbase.Cell-">reseek(Cell)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/StoreScanner.html#reseek-org.apache.hadoop.hbase.Cell-">reseek(Cell)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></dt>
@@ -97114,6 +97179,8 @@ service.</div>
<dd>
<div class="block">Seek the scanner at or after the specified Cell.</div>
</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#seek-org.apache.hadoop.hbase.Cell-">seek(Cell)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">SnapshotSegmentScanner</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#seek-org.apache.hadoop.hbase.Cell-">seek(Cell)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/StoreScanner.html#seek-org.apache.hadoop.hbase.Cell-">seek(Cell)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></dt>
@@ -97281,6 +97348,8 @@ service.</div>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/SegmentScanner.html#segment">segment</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/SegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">SegmentScanner</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#segment">segment</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">SnapshotSegmentScanner</a></dt>
+<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/regionserver/SegmentFactory.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SegmentFactory</span></a> - Class in <a href="org/apache/hadoop/hbase/regionserver/package-summary.html">org.apache.hadoop.hbase.regionserver</a></dt>
<dd>
<div class="block">A singleton store segment factory.</div>
@@ -102458,7 +102527,7 @@ service.</div>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Scan.html#setStopRow-byte:A-">setStopRow(byte[])</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></dt>
<dd>
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
-<div class="block"><span class="deprecationComment">use <a href="org/apache/hadoop/hbase/client/Scan.html#withStartRow-byte:A-"><code>Scan.withStartRow(byte[])</code></a> instead. This method may change the inclusive of
+<div class="block"><span class="deprecationComment">use <a href="org/apache/hadoop/hbase/client/Scan.html#withStopRow-byte:A-"><code>Scan.withStopRow(byte[])</code></a> instead. This method may change the inclusive of
the stop row to keep compatible with the old behavior.</span></div>
</div>
</dd>
@@ -105693,6 +105762,14 @@ service.</div>
</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/ActivePolicyEnforcement.html#snapshots">snapshots</a></span> - Variable in class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/ActivePolicyEnforcement.html" title="class in org.apache.hadoop.hbase.quotas">ActivePolicyEnforcement</a></dt>
<dd> </dd>
+<dt><a href="org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SnapshotSegmentScanner</span></a> - Class in <a href="org/apache/hadoop/hbase/regionserver/package-summary.html">org.apache.hadoop.hbase.regionserver</a></dt>
+<dd>
+<div class="block">A basic SegmentScanner used against an ImmutableScanner snapshot
+ Used flushing where we do a single pass, no reverse scanning or
+ inserts happening.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#SnapshotSegmentScanner-org.apache.hadoop.hbase.regionserver.ImmutableSegment-">SnapshotSegmentScanner(ImmutableSegment)</a></span> - Constructor for class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">SnapshotSegmentScanner</a></dt>
+<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/master/SnapshotSentinel.html" title="interface in org.apache.hadoop.hbase.master"><span class="typeNameLink">SnapshotSentinel</span></a> - Interface in <a href="org/apache/hadoop/hbase/master/package-summary.html">org.apache.hadoop.hbase.master</a></dt>
<dd>
<div class="block">Watch the current snapshot under process</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/HBaseIOException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/HBaseIOException.html b/devapidocs/org/apache/hadoop/hbase/HBaseIOException.html
index 9c768fc..a561511 100644
--- a/devapidocs/org/apache/hadoop/hbase/HBaseIOException.html
+++ b/devapidocs/org/apache/hadoop/hbase/HBaseIOException.html
@@ -122,7 +122,7 @@
</dl>
<dl>
<dt>Direct Known Subclasses:</dt>
-<dd><a href="../../../../org/apache/hadoop/hbase/backup/impl/BackupException.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupException</a>, <a href="../../../../org/apache/hadoop/hbase/procedure2/BadProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2">BadProcedureException</a>, <a href="../../../../org/apache/hadoop/hbase/ipc/CallCancelledException.html" title="class in org.apache.hadoop.hbase.ipc">CallCancelledException</a>, <a href="../../../../org/apache/hadoop/hbase/ipc/CallTimeoutException.html" title="class in org.apache.hadoop.hbase.ipc">CallTimeoutException</a>, <a href="../../../../org/apache/hadoop/hbase/ipc/CellScannerButNoCodecException.html" title="class in org.apache.hadoop.hbase.ipc">CellScannerButNoCodecException</a>, <a href="../../../../org/apache/hadoop/hbase/master/ClusterSchemaException.html" title="class in org.apache.hadoop.hbase.master">ClusterSchemaException</a>, <a href="../../../../org/apache/hadoop/hbase/codec/Code
cException.html" title="class in org.apache.hadoop.hbase.codec">CodecException</a>, <a href="../../../../org/apache/hadoop/hbase/procedure2/store/wal/CorruptedWALProcedureStoreException.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">CorruptedWALProcedureStoreException</a>, <a href="../../../../org/apache/hadoop/hbase/regionserver/wal/DamagedWALException.html" title="class in org.apache.hadoop.hbase.regionserver.wal">DamagedWALException</a>, <a href="../../../../org/apache/hadoop/hbase/DoNotRetryIOException.html" title="class in org.apache.hadoop.hbase">DoNotRetryIOException</a>, <a href="../../../../org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.master.assignment">FailedRemoteDispatchException</a>, <a href="../../../../org/apache/hadoop/hbase/ipc/FailedServerException.html" title="class in org.apache.hadoop.hbase.ipc">FailedServerException</a>, <a href="../../../../org/apache/hadoop/hbase/ipc
/FallbackDisallowedException.html" title="class in org.apache.hadoop.hbase.ipc">FallbackDisallowedException</a>, <a href="../../../../org/apache/hadoop/hbase/util/LeaseNotRecoveredException.html" title="class in org.apache.hadoop.hbase.util">LeaseNotRecoveredException</a>, <a href="../../../../org/apache/hadoop/hbase/MasterNotRunningException.html" title="class in org.apache.hadoop.hbase">MasterNotRunningException</a>, <a href="../../../../org/apache/hadoop/hbase/master/NoSuchProcedureException.html" title="class in org.apache.hadoop.hbase.master">NoSuchProcedureException</a>, <a href="../../../../org/apache/hadoop/hbase/PleaseHoldException.html" title="class in org.apache.hadoop.hbase">PleaseHoldException</a>, <a href="../../../../org/apache/hadoop/hbase/RegionException.html" title="class in org.apache.hadoop.hbase">RegionException</a>, <a href="../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.html" title="class in org.apache.hadoop.hbase.quotas">RpcThrottlingExcep
tion</a>, <a href="../../../../org/apache/hadoop/hbase/master/procedure/ServerCrashException.html" title="class in org.apache.hadoop.hbase.master.procedure">ServerCrashException</a>, <a href="../../../../org/apache/hadoop/hbase/ServiceNotRunningException.html" title="class in org.apache.hadoop.hbase">ServiceNotRunningException</a>, <a href="../../../../org/apache/hadoop/hbase/ipc/StoppedRpcClientException.html" title="class in org.apache.hadoop.hbase.ipc">StoppedRpcClientException</a>, <a href="../../../../org/apache/hadoop/hbase/TableInfoMissingException.html" title="class in org.apache.hadoop.hbase">TableInfoMissingException</a>, <a href="../../../../org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.exceptions">UnexpectedStateException</a>, <a href="../../../../org/apache/hadoop/hbase/client/WrongRowIOException.html" title="class in org.apache.hadoop.hbase.client">WrongRowIOException</a></dd>
+<dd><a href="../../../../org/apache/hadoop/hbase/backup/impl/BackupException.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupException</a>, <a href="../../../../org/apache/hadoop/hbase/procedure2/BadProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2">BadProcedureException</a>, <a href="../../../../org/apache/hadoop/hbase/ipc/CallCancelledException.html" title="class in org.apache.hadoop.hbase.ipc">CallCancelledException</a>, <a href="../../../../org/apache/hadoop/hbase/ipc/CallTimeoutException.html" title="class in org.apache.hadoop.hbase.ipc">CallTimeoutException</a>, <a href="../../../../org/apache/hadoop/hbase/ipc/CellScannerButNoCodecException.html" title="class in org.apache.hadoop.hbase.ipc">CellScannerButNoCodecException</a>, <a href="../../../../org/apache/hadoop/hbase/master/ClusterSchemaException.html" title="class in org.apache.hadoop.hbase.master">ClusterSchemaException</a>, <a href="../../../../org/apache/hadoop/hbase/codec/Code
cException.html" title="class in org.apache.hadoop.hbase.codec">CodecException</a>, <a href="../../../../org/apache/hadoop/hbase/procedure2/store/wal/CorruptedWALProcedureStoreException.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">CorruptedWALProcedureStoreException</a>, <a href="../../../../org/apache/hadoop/hbase/regionserver/wal/DamagedWALException.html" title="class in org.apache.hadoop.hbase.regionserver.wal">DamagedWALException</a>, <a href="../../../../org/apache/hadoop/hbase/DoNotRetryIOException.html" title="class in org.apache.hadoop.hbase">DoNotRetryIOException</a>, <a href="../../../../org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">FailedRemoteDispatchException</a>, <a href="../../../../org/apache/hadoop/hbase/ipc/FailedServerException.html" title="class in org.apache.hadoop.hbase.ipc">FailedServerException</a>, <a href="../../../../org/apache/hadoop/hbase/ipc/FallbackDisal
lowedException.html" title="class in org.apache.hadoop.hbase.ipc">FallbackDisallowedException</a>, <a href="../../../../org/apache/hadoop/hbase/util/LeaseNotRecoveredException.html" title="class in org.apache.hadoop.hbase.util">LeaseNotRecoveredException</a>, <a href="../../../../org/apache/hadoop/hbase/MasterNotRunningException.html" title="class in org.apache.hadoop.hbase">MasterNotRunningException</a>, <a href="../../../../org/apache/hadoop/hbase/master/NoSuchProcedureException.html" title="class in org.apache.hadoop.hbase.master">NoSuchProcedureException</a>, <a href="../../../../org/apache/hadoop/hbase/PleaseHoldException.html" title="class in org.apache.hadoop.hbase">PleaseHoldException</a>, <a href="../../../../org/apache/hadoop/hbase/RegionException.html" title="class in org.apache.hadoop.hbase">RegionException</a>, <a href="../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.html" title="class in org.apache.hadoop.hbase.quotas">RpcThrottlingException</a>, <a h
ref="../../../../org/apache/hadoop/hbase/master/procedure/ServerCrashException.html" title="class in org.apache.hadoop.hbase.master.procedure">ServerCrashException</a>, <a href="../../../../org/apache/hadoop/hbase/ServiceNotRunningException.html" title="class in org.apache.hadoop.hbase">ServiceNotRunningException</a>, <a href="../../../../org/apache/hadoop/hbase/ipc/StoppedRpcClientException.html" title="class in org.apache.hadoop.hbase.ipc">StoppedRpcClientException</a>, <a href="../../../../org/apache/hadoop/hbase/TableInfoMissingException.html" title="class in org.apache.hadoop.hbase">TableInfoMissingException</a>, <a href="../../../../org/apache/hadoop/hbase/exceptions/UnexpectedStateException.html" title="class in org.apache.hadoop.hbase.exceptions">UnexpectedStateException</a>, <a href="../../../../org/apache/hadoop/hbase/client/WrongRowIOException.html" title="class in org.apache.hadoop.hbase.client">WrongRowIOException</a></dd>
</dl>
<hr>
<br>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index f2790ae..f6f0e87 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -167,10 +167,10 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
</ul>
</li>
</ul>
[04/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html
index 594ef24..17d5c40 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html
@@ -170,241 +170,242 @@
<span class="sourceLineNo">162</span> }<a name="line.162"></a>
<span class="sourceLineNo">163</span><a name="line.163"></a>
<span class="sourceLineNo">164</span> /**<a name="line.164"></a>
-<span class="sourceLineNo">165</span> * Add a remote rpc. Be sure to check result for successful add.<a name="line.165"></a>
+<span class="sourceLineNo">165</span> * Add a remote rpc.<a name="line.165"></a>
<span class="sourceLineNo">166</span> * @param key the node identifier<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * @return True if we successfully added the operation.<a name="line.167"></a>
-<span class="sourceLineNo">168</span> */<a name="line.168"></a>
-<span class="sourceLineNo">169</span> public boolean addOperationToNode(final TRemote key, RemoteProcedure rp) {<a name="line.169"></a>
+<span class="sourceLineNo">167</span> */<a name="line.167"></a>
+<span class="sourceLineNo">168</span> public void addOperationToNode(final TRemote key, RemoteProcedure rp)<a name="line.168"></a>
+<span class="sourceLineNo">169</span> throws NullTargetServerDispatchException, NoServerDispatchException, NoNodeDispatchException {<a name="line.169"></a>
<span class="sourceLineNo">170</span> if (key == null) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span> // Key is remote server name. Be careful. It could have been nulled by a concurrent<a name="line.171"></a>
-<span class="sourceLineNo">172</span> // ServerCrashProcedure shutting down outstanding RPC requests. See remoteCallFailed.<a name="line.172"></a>
-<span class="sourceLineNo">173</span> return false;<a name="line.173"></a>
-<span class="sourceLineNo">174</span> }<a name="line.174"></a>
-<span class="sourceLineNo">175</span> assert key != null : "found null key for node";<a name="line.175"></a>
-<span class="sourceLineNo">176</span> BufferNode node = nodeMap.get(key);<a name="line.176"></a>
-<span class="sourceLineNo">177</span> if (node == null) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span> return false;<a name="line.178"></a>
-<span class="sourceLineNo">179</span> }<a name="line.179"></a>
-<span class="sourceLineNo">180</span> node.add(rp);<a name="line.180"></a>
-<span class="sourceLineNo">181</span> // Check our node still in the map; could have been removed by #removeNode.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> return nodeMap.containsValue(node);<a name="line.182"></a>
-<span class="sourceLineNo">183</span> }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span> /**<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * Remove a remote node<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * @param key the node identifier<a name="line.187"></a>
-<span class="sourceLineNo">188</span> */<a name="line.188"></a>
-<span class="sourceLineNo">189</span> public boolean removeNode(final TRemote key) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span> final BufferNode node = nodeMap.remove(key);<a name="line.190"></a>
-<span class="sourceLineNo">191</span> if (node == null) return false;<a name="line.191"></a>
-<span class="sourceLineNo">192</span> node.abortOperationsInQueue();<a name="line.192"></a>
-<span class="sourceLineNo">193</span> return true;<a name="line.193"></a>
-<span class="sourceLineNo">194</span> }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span> // ============================================================================================<a name="line.196"></a>
-<span class="sourceLineNo">197</span> // Task Helpers<a name="line.197"></a>
-<span class="sourceLineNo">198</span> // ============================================================================================<a name="line.198"></a>
-<span class="sourceLineNo">199</span> protected Future<Void> submitTask(Callable<Void> task) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span> return threadPool.submit(task);<a name="line.200"></a>
-<span class="sourceLineNo">201</span> }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span> protected Future<Void> submitTask(Callable<Void> task, long delay, TimeUnit unit) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span> final FutureTask<Void> futureTask = new FutureTask(task);<a name="line.204"></a>
-<span class="sourceLineNo">205</span> timeoutExecutor.add(new DelayedTask(futureTask, delay, unit));<a name="line.205"></a>
-<span class="sourceLineNo">206</span> return futureTask;<a name="line.206"></a>
-<span class="sourceLineNo">207</span> }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span> protected abstract void remoteDispatch(TRemote key, Set<RemoteProcedure> operations);<a name="line.209"></a>
-<span class="sourceLineNo">210</span> protected abstract void abortPendingOperations(TRemote key, Set<RemoteProcedure> operations);<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span> /**<a name="line.212"></a>
-<span class="sourceLineNo">213</span> * Data structure with reference to remote operation.<a name="line.213"></a>
-<span class="sourceLineNo">214</span> */<a name="line.214"></a>
-<span class="sourceLineNo">215</span> public static abstract class RemoteOperation {<a name="line.215"></a>
-<span class="sourceLineNo">216</span> private final RemoteProcedure remoteProcedure;<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span> protected RemoteOperation(final RemoteProcedure remoteProcedure) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span> this.remoteProcedure = remoteProcedure;<a name="line.219"></a>
-<span class="sourceLineNo">220</span> }<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span> public RemoteProcedure getRemoteProcedure() {<a name="line.222"></a>
-<span class="sourceLineNo">223</span> return remoteProcedure;<a name="line.223"></a>
-<span class="sourceLineNo">224</span> }<a name="line.224"></a>
-<span class="sourceLineNo">225</span> }<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span> /**<a name="line.227"></a>
-<span class="sourceLineNo">228</span> * Remote procedure reference.<a name="line.228"></a>
-<span class="sourceLineNo">229</span> */<a name="line.229"></a>
-<span class="sourceLineNo">230</span> public interface RemoteProcedure<TEnv, TRemote> {<a name="line.230"></a>
-<span class="sourceLineNo">231</span> /**<a name="line.231"></a>
-<span class="sourceLineNo">232</span> * For building the remote operation.<a name="line.232"></a>
-<span class="sourceLineNo">233</span> */<a name="line.233"></a>
-<span class="sourceLineNo">234</span> RemoteOperation remoteCallBuild(TEnv env, TRemote remote);<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span> /**<a name="line.236"></a>
-<span class="sourceLineNo">237</span> * Called when the executeProcedure call is failed.<a name="line.237"></a>
-<span class="sourceLineNo">238</span> */<a name="line.238"></a>
-<span class="sourceLineNo">239</span> void remoteCallFailed(TEnv env, TRemote remote, IOException exception);<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span> /**<a name="line.241"></a>
-<span class="sourceLineNo">242</span> * Called when RS tells the remote procedure is succeeded through the<a name="line.242"></a>
-<span class="sourceLineNo">243</span> * {@code reportProcedureDone} method.<a name="line.243"></a>
-<span class="sourceLineNo">244</span> */<a name="line.244"></a>
-<span class="sourceLineNo">245</span> void remoteOperationCompleted(TEnv env);<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span> /**<a name="line.247"></a>
-<span class="sourceLineNo">248</span> * Called when RS tells the remote procedure is failed through the {@code reportProcedureDone}<a name="line.248"></a>
-<span class="sourceLineNo">249</span> * method.<a name="line.249"></a>
-<span class="sourceLineNo">250</span> */<a name="line.250"></a>
-<span class="sourceLineNo">251</span> void remoteOperationFailed(TEnv env, RemoteProcedureException error);<a name="line.251"></a>
-<span class="sourceLineNo">252</span> }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span> /**<a name="line.254"></a>
-<span class="sourceLineNo">255</span> * Account of what procedures are running on remote node.<a name="line.255"></a>
-<span class="sourceLineNo">256</span> * @param <TEnv><a name="line.256"></a>
-<span class="sourceLineNo">257</span> * @param <TRemote><a name="line.257"></a>
-<span class="sourceLineNo">258</span> */<a name="line.258"></a>
-<span class="sourceLineNo">259</span> public interface RemoteNode<TEnv, TRemote> {<a name="line.259"></a>
-<span class="sourceLineNo">260</span> TRemote getKey();<a name="line.260"></a>
-<span class="sourceLineNo">261</span> void add(RemoteProcedure<TEnv, TRemote> operation);<a name="line.261"></a>
-<span class="sourceLineNo">262</span> void dispatch();<a name="line.262"></a>
-<span class="sourceLineNo">263</span> }<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span> protected ArrayListMultimap<Class<?>, RemoteOperation> buildAndGroupRequestByType(final TEnv env,<a name="line.265"></a>
-<span class="sourceLineNo">266</span> final TRemote remote, final Set<RemoteProcedure> remoteProcedures) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span> final ArrayListMultimap<Class<?>, RemoteOperation> requestByType = ArrayListMultimap.create();<a name="line.267"></a>
-<span class="sourceLineNo">268</span> for (RemoteProcedure proc: remoteProcedures) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span> RemoteOperation operation = proc.remoteCallBuild(env, remote);<a name="line.269"></a>
-<span class="sourceLineNo">270</span> requestByType.put(operation.getClass(), operation);<a name="line.270"></a>
-<span class="sourceLineNo">271</span> }<a name="line.271"></a>
-<span class="sourceLineNo">272</span> return requestByType;<a name="line.272"></a>
-<span class="sourceLineNo">273</span> }<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span> protected <T extends RemoteOperation> List<T> fetchType(<a name="line.275"></a>
-<span class="sourceLineNo">276</span> final ArrayListMultimap<Class<?>, RemoteOperation> requestByType, final Class<T> type) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span> return (List<T>)requestByType.removeAll(type);<a name="line.277"></a>
-<span class="sourceLineNo">278</span> }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span> // ============================================================================================<a name="line.280"></a>
-<span class="sourceLineNo">281</span> // Timeout Helpers<a name="line.281"></a>
-<span class="sourceLineNo">282</span> // ============================================================================================<a name="line.282"></a>
-<span class="sourceLineNo">283</span> private final class TimeoutExecutorThread extends Thread {<a name="line.283"></a>
-<span class="sourceLineNo">284</span> private final DelayQueue<DelayedWithTimeout> queue = new DelayQueue<DelayedWithTimeout>();<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span> public TimeoutExecutorThread() {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> super("ProcedureDispatcherTimeoutThread");<a name="line.287"></a>
-<span class="sourceLineNo">288</span> }<a name="line.288"></a>
-<span class="sourceLineNo">289</span><a name="line.289"></a>
-<span class="sourceLineNo">290</span> @Override<a name="line.290"></a>
-<span class="sourceLineNo">291</span> public void run() {<a name="line.291"></a>
-<span class="sourceLineNo">292</span> while (running.get()) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span> final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.293"></a>
-<span class="sourceLineNo">294</span> if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span> // the executor may be shutting down, and the task is just the shutdown request<a name="line.295"></a>
-<span class="sourceLineNo">296</span> continue;<a name="line.296"></a>
-<span class="sourceLineNo">297</span> }<a name="line.297"></a>
-<span class="sourceLineNo">298</span> if (task instanceof DelayedTask) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span> threadPool.execute(((DelayedTask)task).getObject());<a name="line.299"></a>
-<span class="sourceLineNo">300</span> } else {<a name="line.300"></a>
-<span class="sourceLineNo">301</span> ((BufferNode)task).dispatch();<a name="line.301"></a>
-<span class="sourceLineNo">302</span> }<a name="line.302"></a>
-<span class="sourceLineNo">303</span> }<a name="line.303"></a>
-<span class="sourceLineNo">304</span> }<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span> public void add(final DelayedWithTimeout delayed) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span> queue.add(delayed);<a name="line.307"></a>
-<span class="sourceLineNo">308</span> }<a name="line.308"></a>
-<span class="sourceLineNo">309</span><a name="line.309"></a>
-<span class="sourceLineNo">310</span> public void remove(final DelayedWithTimeout delayed) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span> queue.remove(delayed);<a name="line.311"></a>
-<span class="sourceLineNo">312</span> }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span> public void sendStopSignal() {<a name="line.314"></a>
-<span class="sourceLineNo">315</span> queue.add(DelayedUtil.DELAYED_POISON);<a name="line.315"></a>
-<span class="sourceLineNo">316</span> }<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span> public void awaitTermination() {<a name="line.318"></a>
-<span class="sourceLineNo">319</span> try {<a name="line.319"></a>
-<span class="sourceLineNo">320</span> final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.320"></a>
-<span class="sourceLineNo">321</span> for (int i = 0; isAlive(); ++i) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span> sendStopSignal();<a name="line.322"></a>
-<span class="sourceLineNo">323</span> join(250);<a name="line.323"></a>
-<span class="sourceLineNo">324</span> if (i > 0 && (i % 8) == 0) {<a name="line.324"></a>
-<span class="sourceLineNo">325</span> LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.325"></a>
-<span class="sourceLineNo">326</span> StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.326"></a>
-<span class="sourceLineNo">327</span> }<a name="line.327"></a>
-<span class="sourceLineNo">328</span> }<a name="line.328"></a>
-<span class="sourceLineNo">329</span> } catch (InterruptedException e) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span> LOG.warn(getName() + " join wait got interrupted", e);<a name="line.330"></a>
-<span class="sourceLineNo">331</span> }<a name="line.331"></a>
-<span class="sourceLineNo">332</span> }<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> // ============================================================================================<a name="line.335"></a>
-<span class="sourceLineNo">336</span> // Internals Helpers<a name="line.336"></a>
-<span class="sourceLineNo">337</span> // ============================================================================================<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span> /**<a name="line.339"></a>
-<span class="sourceLineNo">340</span> * Node that contains a set of RemoteProcedures<a name="line.340"></a>
-<span class="sourceLineNo">341</span> */<a name="line.341"></a>
-<span class="sourceLineNo">342</span> protected final class BufferNode extends DelayedContainerWithTimestamp<TRemote><a name="line.342"></a>
-<span class="sourceLineNo">343</span> implements RemoteNode<TEnv, TRemote> {<a name="line.343"></a>
-<span class="sourceLineNo">344</span> private Set<RemoteProcedure> operations;<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span> protected BufferNode(final TRemote key) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> super(key, 0);<a name="line.347"></a>
-<span class="sourceLineNo">348</span> }<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span> @Override<a name="line.350"></a>
-<span class="sourceLineNo">351</span> public TRemote getKey() {<a name="line.351"></a>
-<span class="sourceLineNo">352</span> return getObject();<a name="line.352"></a>
-<span class="sourceLineNo">353</span> }<a name="line.353"></a>
-<span class="sourceLineNo">354</span><a name="line.354"></a>
-<span class="sourceLineNo">355</span> @Override<a name="line.355"></a>
-<span class="sourceLineNo">356</span> public synchronized void add(final RemoteProcedure operation) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span> if (this.operations == null) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> this.operations = new HashSet<>();<a name="line.358"></a>
-<span class="sourceLineNo">359</span> setTimeout(EnvironmentEdgeManager.currentTime() + operationDelay);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> timeoutExecutor.add(this);<a name="line.360"></a>
-<span class="sourceLineNo">361</span> }<a name="line.361"></a>
-<span class="sourceLineNo">362</span> this.operations.add(operation);<a name="line.362"></a>
-<span class="sourceLineNo">363</span> if (this.operations.size() > queueMaxSize) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span> timeoutExecutor.remove(this);<a name="line.364"></a>
-<span class="sourceLineNo">365</span> dispatch();<a name="line.365"></a>
-<span class="sourceLineNo">366</span> }<a name="line.366"></a>
-<span class="sourceLineNo">367</span> }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span> @Override<a name="line.369"></a>
-<span class="sourceLineNo">370</span> public synchronized void dispatch() {<a name="line.370"></a>
-<span class="sourceLineNo">371</span> if (operations != null) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span> remoteDispatch(getKey(), operations);<a name="line.372"></a>
-<span class="sourceLineNo">373</span> this.operations = null;<a name="line.373"></a>
-<span class="sourceLineNo">374</span> }<a name="line.374"></a>
-<span class="sourceLineNo">375</span> }<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span> public synchronized void abortOperationsInQueue() {<a name="line.377"></a>
-<span class="sourceLineNo">378</span> if (operations != null) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span> abortPendingOperations(getKey(), operations);<a name="line.379"></a>
-<span class="sourceLineNo">380</span> this.operations = null;<a name="line.380"></a>
-<span class="sourceLineNo">381</span> }<a name="line.381"></a>
-<span class="sourceLineNo">382</span> }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span> @Override<a name="line.384"></a>
-<span class="sourceLineNo">385</span> public String toString() {<a name="line.385"></a>
-<span class="sourceLineNo">386</span> return super.toString() + ", operations=" + this.operations;<a name="line.386"></a>
-<span class="sourceLineNo">387</span> }<a name="line.387"></a>
-<span class="sourceLineNo">388</span> }<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span> /**<a name="line.390"></a>
-<span class="sourceLineNo">391</span> * Delayed object that holds a FutureTask.<a name="line.391"></a>
-<span class="sourceLineNo">392</span> * used to submit something later to the thread-pool.<a name="line.392"></a>
-<span class="sourceLineNo">393</span> */<a name="line.393"></a>
-<span class="sourceLineNo">394</span> private static final class DelayedTask extends DelayedContainerWithTimestamp<FutureTask<Void>> {<a name="line.394"></a>
-<span class="sourceLineNo">395</span> public DelayedTask(final FutureTask<Void> task, final long delay, final TimeUnit unit) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span> super(task, EnvironmentEdgeManager.currentTime() + unit.toMillis(delay));<a name="line.396"></a>
-<span class="sourceLineNo">397</span> }<a name="line.397"></a>
-<span class="sourceLineNo">398</span> }<a name="line.398"></a>
-<span class="sourceLineNo">399</span>}<a name="line.399"></a>
+<span class="sourceLineNo">171</span> throw new NullTargetServerDispatchException(rp.toString());<a name="line.171"></a>
+<span class="sourceLineNo">172</span> }<a name="line.172"></a>
+<span class="sourceLineNo">173</span> BufferNode node = nodeMap.get(key);<a name="line.173"></a>
+<span class="sourceLineNo">174</span> if (node == null) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span> // If null here, it means node has been removed because it crashed. This happens when server<a name="line.175"></a>
+<span class="sourceLineNo">176</span> // is expired in ServerManager. ServerCrashProcedure may or may not have run.<a name="line.176"></a>
+<span class="sourceLineNo">177</span> throw new NoServerDispatchException(key.toString() + "; " + rp.toString());<a name="line.177"></a>
+<span class="sourceLineNo">178</span> }<a name="line.178"></a>
+<span class="sourceLineNo">179</span> node.add(rp);<a name="line.179"></a>
+<span class="sourceLineNo">180</span> // Check our node still in the map; could have been removed by #removeNode.<a name="line.180"></a>
+<span class="sourceLineNo">181</span> if (!nodeMap.containsValue(node)) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span> throw new NoNodeDispatchException(key.toString() + "; " + rp.toString());<a name="line.182"></a>
+<span class="sourceLineNo">183</span> }<a name="line.183"></a>
+<span class="sourceLineNo">184</span> }<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span> /**<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * Remove a remote node<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * @param key the node identifier<a name="line.188"></a>
+<span class="sourceLineNo">189</span> */<a name="line.189"></a>
+<span class="sourceLineNo">190</span> public boolean removeNode(final TRemote key) {<a name="line.190"></a>
+<span class="sourceLineNo">191</span> final BufferNode node = nodeMap.remove(key);<a name="line.191"></a>
+<span class="sourceLineNo">192</span> if (node == null) return false;<a name="line.192"></a>
+<span class="sourceLineNo">193</span> node.abortOperationsInQueue();<a name="line.193"></a>
+<span class="sourceLineNo">194</span> return true;<a name="line.194"></a>
+<span class="sourceLineNo">195</span> }<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span> // ============================================================================================<a name="line.197"></a>
+<span class="sourceLineNo">198</span> // Task Helpers<a name="line.198"></a>
+<span class="sourceLineNo">199</span> // ============================================================================================<a name="line.199"></a>
+<span class="sourceLineNo">200</span> protected Future<Void> submitTask(Callable<Void> task) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span> return threadPool.submit(task);<a name="line.201"></a>
+<span class="sourceLineNo">202</span> }<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span> protected Future<Void> submitTask(Callable<Void> task, long delay, TimeUnit unit) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span> final FutureTask<Void> futureTask = new FutureTask(task);<a name="line.205"></a>
+<span class="sourceLineNo">206</span> timeoutExecutor.add(new DelayedTask(futureTask, delay, unit));<a name="line.206"></a>
+<span class="sourceLineNo">207</span> return futureTask;<a name="line.207"></a>
+<span class="sourceLineNo">208</span> }<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span> protected abstract void remoteDispatch(TRemote key, Set<RemoteProcedure> operations);<a name="line.210"></a>
+<span class="sourceLineNo">211</span> protected abstract void abortPendingOperations(TRemote key, Set<RemoteProcedure> operations);<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span> /**<a name="line.213"></a>
+<span class="sourceLineNo">214</span> * Data structure with reference to remote operation.<a name="line.214"></a>
+<span class="sourceLineNo">215</span> */<a name="line.215"></a>
+<span class="sourceLineNo">216</span> public static abstract class RemoteOperation {<a name="line.216"></a>
+<span class="sourceLineNo">217</span> private final RemoteProcedure remoteProcedure;<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span> protected RemoteOperation(final RemoteProcedure remoteProcedure) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span> this.remoteProcedure = remoteProcedure;<a name="line.220"></a>
+<span class="sourceLineNo">221</span> }<a name="line.221"></a>
+<span class="sourceLineNo">222</span><a name="line.222"></a>
+<span class="sourceLineNo">223</span> public RemoteProcedure getRemoteProcedure() {<a name="line.223"></a>
+<span class="sourceLineNo">224</span> return remoteProcedure;<a name="line.224"></a>
+<span class="sourceLineNo">225</span> }<a name="line.225"></a>
+<span class="sourceLineNo">226</span> }<a name="line.226"></a>
+<span class="sourceLineNo">227</span><a name="line.227"></a>
+<span class="sourceLineNo">228</span> /**<a name="line.228"></a>
+<span class="sourceLineNo">229</span> * Remote procedure reference.<a name="line.229"></a>
+<span class="sourceLineNo">230</span> */<a name="line.230"></a>
+<span class="sourceLineNo">231</span> public interface RemoteProcedure<TEnv, TRemote> {<a name="line.231"></a>
+<span class="sourceLineNo">232</span> /**<a name="line.232"></a>
+<span class="sourceLineNo">233</span> * For building the remote operation.<a name="line.233"></a>
+<span class="sourceLineNo">234</span> */<a name="line.234"></a>
+<span class="sourceLineNo">235</span> RemoteOperation remoteCallBuild(TEnv env, TRemote remote);<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span> /**<a name="line.237"></a>
+<span class="sourceLineNo">238</span> * Called when the executeProcedure call is failed.<a name="line.238"></a>
+<span class="sourceLineNo">239</span> */<a name="line.239"></a>
+<span class="sourceLineNo">240</span> void remoteCallFailed(TEnv env, TRemote remote, IOException exception);<a name="line.240"></a>
+<span class="sourceLineNo">241</span><a name="line.241"></a>
+<span class="sourceLineNo">242</span> /**<a name="line.242"></a>
+<span class="sourceLineNo">243</span> * Called when RS tells the remote procedure is succeeded through the<a name="line.243"></a>
+<span class="sourceLineNo">244</span> * {@code reportProcedureDone} method.<a name="line.244"></a>
+<span class="sourceLineNo">245</span> */<a name="line.245"></a>
+<span class="sourceLineNo">246</span> void remoteOperationCompleted(TEnv env);<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span> /**<a name="line.248"></a>
+<span class="sourceLineNo">249</span> * Called when RS tells the remote procedure is failed through the {@code reportProcedureDone}<a name="line.249"></a>
+<span class="sourceLineNo">250</span> * method.<a name="line.250"></a>
+<span class="sourceLineNo">251</span> */<a name="line.251"></a>
+<span class="sourceLineNo">252</span> void remoteOperationFailed(TEnv env, RemoteProcedureException error);<a name="line.252"></a>
+<span class="sourceLineNo">253</span> }<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span> /**<a name="line.255"></a>
+<span class="sourceLineNo">256</span> * Account of what procedures are running on remote node.<a name="line.256"></a>
+<span class="sourceLineNo">257</span> * @param <TEnv><a name="line.257"></a>
+<span class="sourceLineNo">258</span> * @param <TRemote><a name="line.258"></a>
+<span class="sourceLineNo">259</span> */<a name="line.259"></a>
+<span class="sourceLineNo">260</span> public interface RemoteNode<TEnv, TRemote> {<a name="line.260"></a>
+<span class="sourceLineNo">261</span> TRemote getKey();<a name="line.261"></a>
+<span class="sourceLineNo">262</span> void add(RemoteProcedure<TEnv, TRemote> operation);<a name="line.262"></a>
+<span class="sourceLineNo">263</span> void dispatch();<a name="line.263"></a>
+<span class="sourceLineNo">264</span> }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span> protected ArrayListMultimap<Class<?>, RemoteOperation> buildAndGroupRequestByType(final TEnv env,<a name="line.266"></a>
+<span class="sourceLineNo">267</span> final TRemote remote, final Set<RemoteProcedure> remoteProcedures) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span> final ArrayListMultimap<Class<?>, RemoteOperation> requestByType = ArrayListMultimap.create();<a name="line.268"></a>
+<span class="sourceLineNo">269</span> for (RemoteProcedure proc: remoteProcedures) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span> RemoteOperation operation = proc.remoteCallBuild(env, remote);<a name="line.270"></a>
+<span class="sourceLineNo">271</span> requestByType.put(operation.getClass(), operation);<a name="line.271"></a>
+<span class="sourceLineNo">272</span> }<a name="line.272"></a>
+<span class="sourceLineNo">273</span> return requestByType;<a name="line.273"></a>
+<span class="sourceLineNo">274</span> }<a name="line.274"></a>
+<span class="sourceLineNo">275</span><a name="line.275"></a>
+<span class="sourceLineNo">276</span> protected <T extends RemoteOperation> List<T> fetchType(<a name="line.276"></a>
+<span class="sourceLineNo">277</span> final ArrayListMultimap<Class<?>, RemoteOperation> requestByType, final Class<T> type) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span> return (List<T>)requestByType.removeAll(type);<a name="line.278"></a>
+<span class="sourceLineNo">279</span> }<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span> // ============================================================================================<a name="line.281"></a>
+<span class="sourceLineNo">282</span> // Timeout Helpers<a name="line.282"></a>
+<span class="sourceLineNo">283</span> // ============================================================================================<a name="line.283"></a>
+<span class="sourceLineNo">284</span> private final class TimeoutExecutorThread extends Thread {<a name="line.284"></a>
+<span class="sourceLineNo">285</span> private final DelayQueue<DelayedWithTimeout> queue = new DelayQueue<DelayedWithTimeout>();<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span> public TimeoutExecutorThread() {<a name="line.287"></a>
+<span class="sourceLineNo">288</span> super("ProcedureDispatcherTimeoutThread");<a name="line.288"></a>
+<span class="sourceLineNo">289</span> }<a name="line.289"></a>
+<span class="sourceLineNo">290</span><a name="line.290"></a>
+<span class="sourceLineNo">291</span> @Override<a name="line.291"></a>
+<span class="sourceLineNo">292</span> public void run() {<a name="line.292"></a>
+<span class="sourceLineNo">293</span> while (running.get()) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span> final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.294"></a>
+<span class="sourceLineNo">295</span> if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.295"></a>
+<span class="sourceLineNo">296</span> // the executor may be shutting down, and the task is just the shutdown request<a name="line.296"></a>
+<span class="sourceLineNo">297</span> continue;<a name="line.297"></a>
+<span class="sourceLineNo">298</span> }<a name="line.298"></a>
+<span class="sourceLineNo">299</span> if (task instanceof DelayedTask) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span> threadPool.execute(((DelayedTask)task).getObject());<a name="line.300"></a>
+<span class="sourceLineNo">301</span> } else {<a name="line.301"></a>
+<span class="sourceLineNo">302</span> ((BufferNode)task).dispatch();<a name="line.302"></a>
+<span class="sourceLineNo">303</span> }<a name="line.303"></a>
+<span class="sourceLineNo">304</span> }<a name="line.304"></a>
+<span class="sourceLineNo">305</span> }<a name="line.305"></a>
+<span class="sourceLineNo">306</span><a name="line.306"></a>
+<span class="sourceLineNo">307</span> public void add(final DelayedWithTimeout delayed) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span> queue.add(delayed);<a name="line.308"></a>
+<span class="sourceLineNo">309</span> }<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span> public void remove(final DelayedWithTimeout delayed) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span> queue.remove(delayed);<a name="line.312"></a>
+<span class="sourceLineNo">313</span> }<a name="line.313"></a>
+<span class="sourceLineNo">314</span><a name="line.314"></a>
+<span class="sourceLineNo">315</span> public void sendStopSignal() {<a name="line.315"></a>
+<span class="sourceLineNo">316</span> queue.add(DelayedUtil.DELAYED_POISON);<a name="line.316"></a>
+<span class="sourceLineNo">317</span> }<a name="line.317"></a>
+<span class="sourceLineNo">318</span><a name="line.318"></a>
+<span class="sourceLineNo">319</span> public void awaitTermination() {<a name="line.319"></a>
+<span class="sourceLineNo">320</span> try {<a name="line.320"></a>
+<span class="sourceLineNo">321</span> final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.321"></a>
+<span class="sourceLineNo">322</span> for (int i = 0; isAlive(); ++i) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span> sendStopSignal();<a name="line.323"></a>
+<span class="sourceLineNo">324</span> join(250);<a name="line.324"></a>
+<span class="sourceLineNo">325</span> if (i > 0 && (i % 8) == 0) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span> LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.326"></a>
+<span class="sourceLineNo">327</span> StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.327"></a>
+<span class="sourceLineNo">328</span> }<a name="line.328"></a>
+<span class="sourceLineNo">329</span> }<a name="line.329"></a>
+<span class="sourceLineNo">330</span> } catch (InterruptedException e) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span> LOG.warn(getName() + " join wait got interrupted", e);<a name="line.331"></a>
+<span class="sourceLineNo">332</span> }<a name="line.332"></a>
+<span class="sourceLineNo">333</span> }<a name="line.333"></a>
+<span class="sourceLineNo">334</span> }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span> // ============================================================================================<a name="line.336"></a>
+<span class="sourceLineNo">337</span> // Internals Helpers<a name="line.337"></a>
+<span class="sourceLineNo">338</span> // ============================================================================================<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span> /**<a name="line.340"></a>
+<span class="sourceLineNo">341</span> * Node that contains a set of RemoteProcedures<a name="line.341"></a>
+<span class="sourceLineNo">342</span> */<a name="line.342"></a>
+<span class="sourceLineNo">343</span> protected final class BufferNode extends DelayedContainerWithTimestamp<TRemote><a name="line.343"></a>
+<span class="sourceLineNo">344</span> implements RemoteNode<TEnv, TRemote> {<a name="line.344"></a>
+<span class="sourceLineNo">345</span> private Set<RemoteProcedure> operations;<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span> protected BufferNode(final TRemote key) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span> super(key, 0);<a name="line.348"></a>
+<span class="sourceLineNo">349</span> }<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span> @Override<a name="line.351"></a>
+<span class="sourceLineNo">352</span> public TRemote getKey() {<a name="line.352"></a>
+<span class="sourceLineNo">353</span> return getObject();<a name="line.353"></a>
+<span class="sourceLineNo">354</span> }<a name="line.354"></a>
+<span class="sourceLineNo">355</span><a name="line.355"></a>
+<span class="sourceLineNo">356</span> @Override<a name="line.356"></a>
+<span class="sourceLineNo">357</span> public synchronized void add(final RemoteProcedure operation) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span> if (this.operations == null) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span> this.operations = new HashSet<>();<a name="line.359"></a>
+<span class="sourceLineNo">360</span> setTimeout(EnvironmentEdgeManager.currentTime() + operationDelay);<a name="line.360"></a>
+<span class="sourceLineNo">361</span> timeoutExecutor.add(this);<a name="line.361"></a>
+<span class="sourceLineNo">362</span> }<a name="line.362"></a>
+<span class="sourceLineNo">363</span> this.operations.add(operation);<a name="line.363"></a>
+<span class="sourceLineNo">364</span> if (this.operations.size() > queueMaxSize) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span> timeoutExecutor.remove(this);<a name="line.365"></a>
+<span class="sourceLineNo">366</span> dispatch();<a name="line.366"></a>
+<span class="sourceLineNo">367</span> }<a name="line.367"></a>
+<span class="sourceLineNo">368</span> }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span> @Override<a name="line.370"></a>
+<span class="sourceLineNo">371</span> public synchronized void dispatch() {<a name="line.371"></a>
+<span class="sourceLineNo">372</span> if (operations != null) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> remoteDispatch(getKey(), operations);<a name="line.373"></a>
+<span class="sourceLineNo">374</span> this.operations = null;<a name="line.374"></a>
+<span class="sourceLineNo">375</span> }<a name="line.375"></a>
+<span class="sourceLineNo">376</span> }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span> public synchronized void abortOperationsInQueue() {<a name="line.378"></a>
+<span class="sourceLineNo">379</span> if (operations != null) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span> abortPendingOperations(getKey(), operations);<a name="line.380"></a>
+<span class="sourceLineNo">381</span> this.operations = null;<a name="line.381"></a>
+<span class="sourceLineNo">382</span> }<a name="line.382"></a>
+<span class="sourceLineNo">383</span> }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
+<span class="sourceLineNo">386</span> public String toString() {<a name="line.386"></a>
+<span class="sourceLineNo">387</span> return super.toString() + ", operations=" + this.operations;<a name="line.387"></a>
+<span class="sourceLineNo">388</span> }<a name="line.388"></a>
+<span class="sourceLineNo">389</span> }<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span> /**<a name="line.391"></a>
+<span class="sourceLineNo">392</span> * Delayed object that holds a FutureTask.<a name="line.392"></a>
+<span class="sourceLineNo">393</span> * used to submit something later to the thread-pool.<a name="line.393"></a>
+<span class="sourceLineNo">394</span> */<a name="line.394"></a>
+<span class="sourceLineNo">395</span> private static final class DelayedTask extends DelayedContainerWithTimestamp<FutureTask<Void>> {<a name="line.395"></a>
+<span class="sourceLineNo">396</span> public DelayedTask(final FutureTask<Void> task, final long delay, final TimeUnit unit) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span> super(task, EnvironmentEdgeManager.currentTime() + unit.toMillis(delay));<a name="line.397"></a>
+<span class="sourceLineNo">398</span> }<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>}<a name="line.400"></a>
[33/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/regionserver/SimpleRpcSchedulerFactory.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/SimpleRpcSchedulerFactory.html b/devapidocs/org/apache/hadoop/hbase/regionserver/SimpleRpcSchedulerFactory.html
index 9328921..ad77e51 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/SimpleRpcSchedulerFactory.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/SimpleRpcSchedulerFactory.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/ShutdownHook.ShutdownHookThread.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Next Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/hadoop/hbase/regionserver/SimpleRpcSchedulerFactory.html" target="_top">Frames</a></li>
@@ -270,7 +270,7 @@ public <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcScheduler.htm
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/ShutdownHook.ShutdownHookThread.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Next Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/hadoop/hbase/regionserver/SimpleRpcSchedulerFactory.html" target="_top">Frames</a></li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html b/devapidocs/org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html
new file mode 100644
index 0000000..05a8970
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html
@@ -0,0 +1,508 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>SnapshotSegmentScanner (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="SnapshotSegmentScanner (Apache HBase 3.0.0-SNAPSHOT API)";
+ }
+ }
+ catch(err) {
+ }
+//-->
+var methods = {"i0":10,"i1":9,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/SnapshotSegmentScanner.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/SimpleRpcSchedulerFactory.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" target="_top">Frames</a></li>
+<li><a href="SnapshotSegmentScanner.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Nested | </li>
+<li><a href="#field.summary">Field</a> | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li><a href="#field.detail">Field</a> | </li>
+<li><a href="#constructor.detail">Constr</a> | </li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.regionserver</div>
+<h2 title="Class SnapshotSegmentScanner" class="title">Class SnapshotSegmentScanner</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/NonLazyKeyValueScanner.html" title="class in org.apache.hadoop.hbase.regionserver">org.apache.hadoop.hbase.regionserver.NonLazyKeyValueScanner</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.html" title="class in org.apache.hadoop.hbase.regionserver">org.apache.hadoop.hbase.regionserver.NonReversedNonLazyKeyValueScanner</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.regionserver.SnapshotSegmentScanner</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/Shipper.html" title="interface in org.apache.hadoop.hbase.regionserver">Shipper</a></dd>
+</dl>
+<hr>
+<br>
+<pre>@InterfaceAudience.Private
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#line.35">SnapshotSegmentScanner</a>
+extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.html" title="class in org.apache.hadoop.hbase.regionserver">NonReversedNonLazyKeyValueScanner</a></pre>
+<div class="block">A basic SegmentScanner used against an ImmutableScanner snapshot
+ Used flushing where we do a single pass, no reverse scanning or
+ inserts happening. Its a dumbed-down Scanner that can go fast.
+ Like <a href="../../../../../org/apache/hadoop/hbase/util/CollectionBackedScanner.html" title="class in org.apache.hadoop.hbase.util"><code>CollectionBackedScanner</code></a>
+ (but making it know about Segments was onerous).</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!-- -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#current">current</a></span></code> </td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#iter">iter</a></span></code> </td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html" title="class in org.apache.hadoop.hbase.regionserver">ImmutableSegment</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#segment">segment</a></span></code> </td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.regionserver.KeyValueScanner">
+<!-- -->
+</a>
+<h3>Fields inherited from interface org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a></h3>
+<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#NO_NEXT_INDEXED_KEY">NO_NEXT_INDEXED_KEY</a></code></li>
+</ul>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#SnapshotSegmentScanner-org.apache.hadoop.hbase.regionserver.ImmutableSegment-">SnapshotSegmentScanner</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html" title="class in org.apache.hadoop.hbase.regionserver">ImmutableSegment</a> segment)</code> </td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd"> </span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#close--">close</a></span>()</code>
+<div class="block">Close the KeyValue scanner.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#createIterator-org.apache.hadoop.hbase.regionserver.Segment-">createIterator</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Segment.html" title="class in org.apache.hadoop.hbase.regionserver">Segment</a> segment)</code> </td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#getScannerOrder--">getScannerOrder</a></span>()</code>
+<div class="block">Get the order of this KeyValueScanner.</div>
+</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#next--">next</a></span>()</code>
+<div class="block">Return the next Cell in this scanner, iterating the scanner</div>
+</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#peek--">peek</a></span>()</code>
+<div class="block">Look at the next Cell in this scanner, but do not iterate scanner.</div>
+</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#reseek-org.apache.hadoop.hbase.Cell-">reseek</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> seekCell)</code>
+<div class="block">Reseek the scanner at or after the specified KeyValue.</div>
+</td>
+</tr>
+<tr id="i6" class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#seek-org.apache.hadoop.hbase.Cell-">seek</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> seekCell)</code>
+<div class="block">Seek the scanner at or after the specified KeyValue.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.regionserver.NonReversedNonLazyKeyValueScanner">
+<!-- -->
+</a>
+<h3>Methods inherited from class org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.html" title="class in org.apache.hadoop.hbase.regionserver">NonReversedNonLazyKeyValueScanner</a></h3>
+<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.html#backwardSeek-org.apache.hadoop.hbase.Cell-">backwardSeek</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.html#seekToLastRow--">seekToLastRow</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.html#seekToPreviousRow-org.apache.hadoop.hbase.Cell-">seekToPreviousRow</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.regionserver.NonLazyKeyValueScanner">
+<!-- -->
+</a>
+<h3>Methods inherited from class org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/NonLazyKeyValueScanner.html" title="class in org.apache.hadoop.hbase.regionserver">NonLazyKeyValueScanner</a></h3>
+<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/NonLazyKeyValueScanner.html#doRealSeek-org.apache.hadoop.hbase.regionserver.KeyValueScanner-org.apache.hadoop.hbase.Cell-boolean-">doRealSeek</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/NonLazyKeyValueScanner.html#enforceSeek--">enforceSeek</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/NonLazyKeyValueScanner.html#getFilePath--">getFilePath</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/NonLazyKeyValueScanner.html#getNextIndexedKey--">getNextIndexedKey</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/NonLazyKeyValueScanner.html#isFileScanner--">isFileScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/NonLazyKeyValueScanner.html#realSeekDone--">realSeekDone</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/NonLazyKeyValueScanner.html#requestSeek-org.apache.hadoop.hbase.Cell-boolean-boolean-">requestSeek<
/a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/NonLazyKeyValueScanner.html#shipped--">shipped</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/NonLazyKeyValueScanner.html#shouldUseScanner-org.apache.hadoop.hbase.client.Scan-org.apache.hadoop.hbase.regionserver.HStore-long-">shouldUseScanner</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!-- -->
+</a>
+<h3>Field Detail</h3>
+<a name="segment">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>segment</h4>
+<pre>private final <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html" title="class in org.apache.hadoop.hbase.regionserver">ImmutableSegment</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#line.36">segment</a></pre>
+</li>
+</ul>
+<a name="iter">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>iter</h4>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#line.37">iter</a></pre>
+</li>
+</ul>
+<a name="current">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>current</h4>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#line.38">current</a></pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="SnapshotSegmentScanner-org.apache.hadoop.hbase.regionserver.ImmutableSegment-">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>SnapshotSegmentScanner</h4>
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#line.40">SnapshotSegmentScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html" title="class in org.apache.hadoop.hbase.regionserver">ImmutableSegment</a> segment)</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="createIterator-org.apache.hadoop.hbase.regionserver.Segment-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>createIterator</h4>
+<pre>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#line.49">createIterator</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Segment.html" title="class in org.apache.hadoop.hbase.regionserver">Segment</a> segment)</pre>
+</li>
+</ul>
+<a name="peek--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>peek</h4>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#line.54">peek</a>()</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#peek--">KeyValueScanner</a></code></span></div>
+<div class="block">Look at the next Cell in this scanner, but do not iterate scanner.
+ NOTICE: The returned cell has not been passed into ScanQueryMatcher. So it may not be what the
+ user need.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the next Cell</dd>
+</dl>
+</li>
+</ul>
+<a name="next--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>next</h4>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#line.59">next</a>()</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#next--">KeyValueScanner</a></code></span></div>
+<div class="block">Return the next Cell in this scanner, iterating the scanner</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the next Cell</dd>
+</dl>
+</li>
+</ul>
+<a name="seek-org.apache.hadoop.hbase.Cell-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>seek</h4>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#line.70">seek</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> seekCell)</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#seek-org.apache.hadoop.hbase.Cell-">KeyValueScanner</a></code></span></div>
+<div class="block">Seek the scanner at or after the specified KeyValue.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>seekCell</code> - seek value</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if scanner has values left, false if end of scanner</dd>
+</dl>
+</li>
+</ul>
+<a name="reseek-org.apache.hadoop.hbase.Cell-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>reseek</h4>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#line.77">reseek</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> seekCell)</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#reseek-org.apache.hadoop.hbase.Cell-">KeyValueScanner</a></code></span></div>
+<div class="block">Reseek the scanner at or after the specified KeyValue.
+ This method is guaranteed to seek at or after the required key only if the
+ key comes after the current position of the scanner. Should not be used
+ to seek to a key which may come before the current position.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>seekCell</code> - seek value (should be non-null)</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if scanner has values left, false if end of scanner</dd>
+</dl>
+</li>
+</ul>
+<a name="getScannerOrder--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getScannerOrder</h4>
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#line.93">getScannerOrder</a>()</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#getScannerOrder--">KeyValueScanner</a></code></span></div>
+<div class="block">Get the order of this KeyValueScanner. This is only relevant for StoreFileScanners.
+ This is required for comparing multiple files to find out which one has the latest
+ data. StoreFileScanners are ordered from 0 (oldest) to newest in increasing order.</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#getScannerOrder--"><code>KeyValueScanner.getScannerOrder()</code></a></dd>
+</dl>
+</li>
+</ul>
+<a name="close--">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>close</h4>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#line.98">close</a>()</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#close--">KeyValueScanner</a></code></span></div>
+<div class="block">Close the KeyValue scanner.</div>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/SnapshotSegmentScanner.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/SimpleRpcSchedulerFactory.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" target="_top">Frames</a></li>
+<li><a href="SnapshotSegmentScanner.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Nested | </li>
+<li><a href="#field.summary">Field</a> | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li><a href="#field.detail">Field</a> | </li>
+<li><a href="#constructor.detail">Constr</a> | </li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/regionserver/SplitLogWorker.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/SplitLogWorker.html b/devapidocs/org/apache/hadoop/hbase/regionserver/SplitLogWorker.html
index ca0c4f3..5cb52d4 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/SplitLogWorker.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/SplitLogWorker.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/SimpleRpcSchedulerFactory.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.html" title="interface in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
@@ -453,7 +453,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/SimpleRpcSchedulerFactory.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.html" title="interface in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/ImmutableSegment.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/ImmutableSegment.html b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/ImmutableSegment.html
index c99622c..32aeb42 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/ImmutableSegment.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/ImmutableSegment.html
@@ -140,6 +140,10 @@
</tr>
<tbody>
<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html" title="class in org.apache.hadoop.hbase.regionserver">ImmutableSegment</a></code></td>
+<td class="colLast"><span class="typeNameLabel">SnapshotSegmentScanner.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#segment">segment</a></span></code> </td>
+</tr>
+<tr class="rowColor">
<td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html" title="class in org.apache.hadoop.hbase.regionserver">ImmutableSegment</a></code></td>
<td class="colLast"><span class="typeNameLabel">AbstractMemStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#snapshot">snapshot</a></span></code> </td>
</tr>
@@ -334,6 +338,9 @@
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.html#MemStoreSnapshot-long-org.apache.hadoop.hbase.regionserver.ImmutableSegment-">MemStoreSnapshot</a></span>(long id,
<a href="../../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html" title="class in org.apache.hadoop.hbase.regionserver">ImmutableSegment</a> snapshot)</code> </td>
</tr>
+<tr class="rowColor">
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#SnapshotSegmentScanner-org.apache.hadoop.hbase.regionserver.ImmutableSegment-">SnapshotSegmentScanner</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html" title="class in org.apache.hadoop.hbase.regionserver">ImmutableSegment</a> segment)</code> </td>
+</tr>
</tbody>
</table>
<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing constructors, and an explanation">
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/KeyValueScanner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/KeyValueScanner.html b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/KeyValueScanner.html
index 14aac7f..65f7fa5 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/KeyValueScanner.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/KeyValueScanner.html
@@ -163,11 +163,19 @@
</tr>
<tr class="altColor">
<td class="colFirst"><code>class </code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">SnapshotSegmentScanner</a></span></code>
+<div class="block">A basic SegmentScanner used against an ImmutableScanner snapshot
+ Used flushing where we do a single pass, no reverse scanning or
+ inserts happening.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>class </code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a></span></code>
<div class="block">KeyValueScanner adaptor over the Reader.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>class </code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></span></code>
<div class="block">Scanner scans both the memstore and the Store.</div>
@@ -393,6 +401,14 @@
<td class="colLast"><span class="typeNameLabel">DefaultMemStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/DefaultMemStore.html#getScanners-long-">getScanners</a></span>(long readPt)</code> </td>
</tr>
<tr class="rowColor">
+<td class="colFirst"><code>(package private) <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>></code></td>
+<td class="colLast"><span class="typeNameLabel">CompositeImmutableSegment.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html#getSnapshotScanners--">getSnapshotScanners</a></span>()</code> </td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>(package private) <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>></code></td>
+<td class="colLast"><span class="typeNameLabel">ImmutableSegment.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#getSnapshotScanners--">getSnapshotScanners</a></span>()</code> </td>
+</tr>
+<tr class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>></code></td>
<td class="colLast"><span class="typeNameLabel">HStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#recreateScanners-java.util.List-boolean-boolean-boolean-org.apache.hadoop.hbase.regionserver.querymatcher.ScanQueryMatcher-byte:A-boolean-byte:A-boolean-long-boolean-">recreateScanners</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>> currentFileScanners,
boolean cacheBlocks,
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/NonLazyKeyValueScanner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/NonLazyKeyValueScanner.html b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/NonLazyKeyValueScanner.html
index 39c4817..655039c 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/NonLazyKeyValueScanner.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/NonLazyKeyValueScanner.html
@@ -147,6 +147,14 @@
</tr>
<tr class="altColor">
<td class="colFirst"><code>class </code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">SnapshotSegmentScanner</a></span></code>
+<div class="block">A basic SegmentScanner used against an ImmutableScanner snapshot
+ Used flushing where we do a single pass, no reverse scanning or
+ inserts happening.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>class </code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></span></code>
<div class="block">Scanner scans both the memstore and the Store.</div>
</td>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/NonReversedNonLazyKeyValueScanner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/NonReversedNonLazyKeyValueScanner.html b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/NonReversedNonLazyKeyValueScanner.html
index 3306823..02116a7 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/NonReversedNonLazyKeyValueScanner.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/NonReversedNonLazyKeyValueScanner.html
@@ -140,6 +140,14 @@
</tr>
<tr class="rowColor">
<td class="colFirst"><code>class </code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">SnapshotSegmentScanner</a></span></code>
+<div class="block">A basic SegmentScanner used against an ImmutableScanner snapshot
+ Used flushing where we do a single pass, no reverse scanning or
+ inserts happening.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>class </code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></span></code>
<div class="block">Scanner scans both the memstore and the Store.</div>
</td>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/Segment.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/Segment.html b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/Segment.html
index 04631c4..d043c75 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/Segment.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/Segment.html
@@ -236,10 +236,14 @@
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>> scanners)</code> </td>
</tr>
<tr class="rowColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a><<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
+<td class="colLast"><span class="typeNameLabel">SnapshotSegmentScanner.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#createIterator-org.apache.hadoop.hbase.regionserver.Segment-">createIterator</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Segment.html" title="class in org.apache.hadoop.hbase.regionserver">Segment</a> segment)</code> </td>
+</tr>
+<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><span class="typeNameLabel">AdaptiveMemStoreCompactionStrategy.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/AdaptiveMemStoreCompactionStrategy.html#updateStats-org.apache.hadoop.hbase.regionserver.Segment-">updateStats</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Segment.html" title="class in org.apache.hadoop.hbase.regionserver">Segment</a> replacement)</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><span class="typeNameLabel">MemStoreCompactionStrategy.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.html#updateStats-org.apache.hadoop.hbase.regionserver.Segment-">updateStats</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Segment.html" title="class in org.apache.hadoop.hbase.regionserver">Segment</a> replacement)</code> </td>
</tr>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/Shipper.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/Shipper.html b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/Shipper.html
index d58aad1..9dea7b4 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/Shipper.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/Shipper.html
@@ -234,11 +234,19 @@
</tr>
<tr class="altColor">
<td class="colFirst"><code>class </code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">SnapshotSegmentScanner</a></span></code>
+<div class="block">A basic SegmentScanner used against an ImmutableScanner snapshot
+ Used flushing where we do a single pass, no reverse scanning or
+ inserts happening.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>class </code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a></span></code>
<div class="block">KeyValueScanner adaptor over the Reader.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>class </code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></span></code>
<div class="block">Scanner scans both the memstore and the Store.</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/SnapshotSegmentScanner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/SnapshotSegmentScanner.html b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/SnapshotSegmentScanner.html
new file mode 100644
index 0000000..df451ef
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/SnapshotSegmentScanner.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.regionserver.SnapshotSegmentScanner (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class org.apache.hadoop.hbase.regionserver.SnapshotSegmentScanner (Apache HBase 3.0.0-SNAPSHOT API)";
+ }
+ }
+ catch(err) {
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/regionserver/class-use/SnapshotSegmentScanner.html" target="_top">Frames</a></li>
+<li><a href="SnapshotSegmentScanner.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.regionserver.SnapshotSegmentScanner" class="title">Uses of Class<br>org.apache.hadoop.hbase.regionserver.SnapshotSegmentScanner</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.regionserver.SnapshotSegmentScanner</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/regionserver/class-use/SnapshotSegmentScanner.html" target="_top">Frames</a></li>
+<li><a href="SnapshotSegmentScanner.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/regionserver/package-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-frame.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-frame.html
index 3fb1ac9..cbdd2d9 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-frame.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-frame.html
@@ -238,6 +238,7 @@
<li><a href="ShutdownHook.DoNothingThread.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">ShutdownHook.DoNothingThread</a></li>
<li><a href="ShutdownHook.ShutdownHookThread.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">ShutdownHook.ShutdownHookThread</a></li>
<li><a href="SimpleRpcSchedulerFactory.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">SimpleRpcSchedulerFactory</a></li>
+<li><a href="SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">SnapshotSegmentScanner</a></li>
<li><a href="SplitLogWorker.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">SplitLogWorker</a></li>
<li><a href="SplitRequest.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">SplitRequest</a></li>
<li><a href="SteppingSplitPolicy.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">SteppingSplitPolicy</a></li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/regionserver/package-summary.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-summary.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-summary.html
index 67c417f..3b45700 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-summary.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-summary.html
@@ -1439,200 +1439,208 @@
</td>
</tr>
<tr class="altColor">
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">SnapshotSegmentScanner</a></td>
+<td class="colLast">
+<div class="block">A basic SegmentScanner used against an ImmutableScanner snapshot
+ Used flushing where we do a single pass, no reverse scanning or
+ inserts happening.</div>
+</td>
+</tr>
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.html" title="class in org.apache.hadoop.hbase.regionserver">SplitLogWorker</a></td>
<td class="colLast">
<div class="block">This worker is spawned in every regionserver, including master.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitRequest.html" title="class in org.apache.hadoop.hbase.regionserver">SplitRequest</a></td>
<td class="colLast">
<div class="block">Handles processing region splits.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SteppingSplitPolicy.html" title="class in org.apache.hadoop.hbase.regionserver">SteppingSplitPolicy</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreEngine.html" title="class in org.apache.hadoop.hbase.regionserver">StoreEngine</a><SF extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlusher.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFlusher</a>,CP extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionPolicy.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionPolicy</a>,C extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/Compactor.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">Compactor</a>,SFM extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileManager.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreFileManager</a>></td>
<td class="colLast">
<div class="block">StoreEngine is a factory that can create the objects necessary for HStore to operate.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileComparators.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileComparators</a></td>
<td class="colLast">
<div class="block">Useful comparators for comparing store files.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileComparators.GetBulkTime.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileComparators.GetBulkTime</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileComparators.GetFileSize.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileComparators.GetFileSize</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileComparators.GetMaxTimestamp.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileComparators.GetMaxTimestamp</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileComparators.GetPathName.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileComparators.GetPathName</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileComparators.GetSeqId.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileComparators.GetSeqId</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a></td>
<td class="colLast">
<div class="block">Describe a StoreFile (hfile, reference, link)</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileReader.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileReader</a></td>
<td class="colLast">
<div class="block">Reader for a StoreFile.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StorefileRefresherChore.html" title="class in org.apache.hadoop.hbase.regionserver">StorefileRefresherChore</a></td>
<td class="colLast">
<div class="block">A chore for refreshing the store files for secondary regions hosted in the region server.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a></td>
<td class="colLast">
<div class="block">KeyValueScanner adaptor over the Reader.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileWriter.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileWriter</a></td>
<td class="colLast">
<div class="block">A StoreFile writer.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileWriter.Builder.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileWriter.Builder</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlusher.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFlusher</a></td>
<td class="colLast">
<div class="block">Store flusher interface.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></td>
<td class="colLast">
<div class="block">Scanner scans both the memstore and the Store.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreUtils.html" title="class in org.apache.hadoop.hbase.regionserver">StoreUtils</a></td>
<td class="colLast">
<div class="block">Utility functions for region server storage layer.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StripeMultiFileWriter.html" title="class in org.apache.hadoop.hbase.regionserver">StripeMultiFileWriter</a></td>
<td class="colLast">
<div class="block">Base class for cell sink that separates the provided cells into multiple files for stripe
compaction.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StripeMultiFileWriter.BoundaryMultiWriter.html" title="class in org.apache.hadoop.hbase.regionserver">StripeMultiFileWriter.BoundaryMultiWriter</a></td>
<td class="colLast">
<div class="block">MultiWriter that separates the cells based on fixed row-key boundaries.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StripeMultiFileWriter.SizeMultiWriter.html" title="class in org.apache.hadoop.hbase.regionserver">StripeMultiFileWriter.SizeMultiWriter</a></td>
<td class="colLast">
<div class="block">MultiWriter that separates the cells based on target cell number per file and file count.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StripeStoreConfig.html" title="class in org.apache.hadoop.hbase.regionserver">StripeStoreConfig</a></td>
<td class="colLast">
<div class="block">Configuration class for stripe store and compactions.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StripeStoreEngine.html" title="class in org.apache.hadoop.hbase.regionserver">StripeStoreEngine</a></td>
<td class="colLast">
<div class="block">The storage engine that implements the stripe-based store/compaction scheme.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StripeStoreFileManager.html" title="class in org.apache.hadoop.hbase.regionserver">StripeStoreFileManager</a></td>
<td class="colLast">
<div class="block">Stripe implementation of StoreFileManager.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StripeStoreFileManager.KeyBeforeConcatenatedLists.html" title="class in org.apache.hadoop.hbase.regionserver">StripeStoreFileManager.KeyBeforeConcatenatedLists</a></td>
<td class="colLast">
<div class="block">An extension of ConcatenatedLists that has several peculiar properties.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StripeStoreFileManager.State.html" title="class in org.apache.hadoop.hbase.regionserver">StripeStoreFileManager.State</a></td>
<td class="colLast">
<div class="block">The state class.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StripeStoreFlusher.html" title="class in org.apache.hadoop.hbase.regionserver">StripeStoreFlusher</a></td>
<td class="colLast">
<div class="block">Stripe implementation of StoreFlusher.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StripeStoreFlusher.BoundaryStripeFlushRequest.html" title="class in org.apache.hadoop.hbase.regionserver">StripeStoreFlusher.BoundaryStripeFlushRequest</a></td>
<td class="colLast">
<div class="block">Stripe flush request wrapper based on boundaries.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StripeStoreFlusher.SizeStripeFlushRequest.html" title="class in org.apache.hadoop.hbase.regionserver">StripeStoreFlusher.SizeStripeFlushRequest</a></td>
<td class="colLast">
<div class="block">Stripe flush request wrapper based on size.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StripeStoreFlusher.StripeFlushRequest.html" title="class in org.apache.hadoop.hbase.regionserver">StripeStoreFlusher.StripeFlushRequest</a></td>
<td class="colLast">
<div class="block">Stripe flush request wrapper that writes a non-striped file.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ThreadSafeMemStoreSizing.html" title="class in org.apache.hadoop.hbase.regionserver">ThreadSafeMemStoreSizing</a></td>
<td class="colLast">
<div class="block">Accounting of current heap and data sizes.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.html" title="class in org.apache.hadoop.hbase.regionserver">TimeRangeTracker</a></td>
<td class="colLast">
<div class="block">Stores minimum and maximum timestamp values, it is [minimumTimestamp, maximumTimestamp] in
interval notation.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.NonSyncTimeRangeTracker.html" title="class in org.apache.hadoop.hbase.regionserver">TimeRangeTracker.NonSyncTimeRangeTracker</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.SyncTimeRangeTracker.html" title="class in org.apache.hadoop.hbase.regionserver">TimeRangeTracker.SyncTimeRangeTracker</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/VersionedSegmentsList.html" title="class in org.apache.hadoop.hbase.regionserver">VersionedSegmentsList</a></td>
<td class="colLast">
<div class="block">A list of segment managers coupled with the version of the memstore (version at the time it was
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index 01187c8..062c73e 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -371,6 +371,7 @@
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ReversedKeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ReversedKeyValueHeap</span></a></li>
</ul>
</li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SnapshotSegmentScanner</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">StoreScanner</span></a> (implements org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">ChangedReadersObserver</a>, org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/InternalScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">InternalScanner</a>, org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>)
<ul>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MobStoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MobStoreScanner</span></a></li>
@@ -703,20 +704,20 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
index 2731576..858ccf6 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
@@ -130,9 +130,9 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
index f6fc79b..a4ab1b7 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
@@ -238,8 +238,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
</ul>
</li>
</ul>
[50/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 9b527d9..488a1b7 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
/Author (Apache HBase Team)
/Creator (Asciidoctor PDF 1.5.0.alpha.15, based on Prawn 2.2.2)
/Producer (Apache HBase Team)
-/ModDate (D:20180604142953+00'00')
-/CreationDate (D:20180604144614+00'00')
+/ModDate (D:20180605142953+00'00')
+/CreationDate (D:20180605144523+00'00')
>>
endobj
2 0 obj
@@ -24,7 +24,7 @@ endobj
3 0 obj
<< /Type /Pages
/Count 727
-/Kids [7 0 R 12 0 R 14 0 R 16 0 R 18 0 R 20 0 R 22 0 R 24 0 R 44 0 R 47 0 R 50 0 R 54 0 R 61 0 R 63 0 R 67 0 R 69 0 R 71 0 R 78 0 R 81 0 R 83 0 R 89 0 R 92 0 R 94 0 R 96 0 R 103 0 R 110 0 R 115 0 R 117 0 R 133 0 R 138 0 R 146 0 R 155 0 R 163 0 R 172 0 R 183 0 R 187 0 R 189 0 R 193 0 R 202 0 R 211 0 R 219 0 R 228 0 R 233 0 R 242 0 R 250 0 R 259 0 R 272 0 R 279 0 R 289 0 R 297 0 R 305 0 R 312 0 R 320 0 R 327 0 R 333 0 R 340 0 R 348 0 R 357 0 R 366 0 R 380 0 R 387 0 R 395 0 R 402 0 R 410 0 R 419 0 R 429 0 R 437 0 R 444 0 R 453 0 R 465 0 R 475 0 R 482 0 R 489 0 R 497 0 R 506 0 R 514 0 R 519 0 R 523 0 R 528 0 R 532 0 R 548 0 R 559 0 R 563 0 R 578 0 R 583 0 R 588 0 R 590 0 R 592 0 R 595 0 R 597 0 R 599 0 R 607 0 R 613 0 R 616 0 R 620 0 R 629 0 R 640 0 R 648 0 R 652 0 R 656 0 R 658 0 R 668 0 R 683 0 R 690 0 R 701 0 R 711 0 R 722 0 R 734 0 R 754 0 R 763 0 R 767 0 R 773 0 R 776 0 R 780 0 R 784 0 R 787 0 R 790 0 R 792 0 R 795 0 R 799 0 R 801 0 R 805 0 R 811 0 R 816 0 R 820 0 R 823 0 R 829 0 R
831 0 R 835 0 R 843 0 R 845 0 R 848 0 R 851 0 R 854 0 R 857 0 R 871 0 R 879 0 R 890 0 R 901 0 R 907 0 R 917 0 R 928 0 R 931 0 R 935 0 R 938 0 R 943 0 R 952 0 R 960 0 R 964 0 R 968 0 R 973 0 R 977 0 R 979 0 R 995 0 R 1006 0 R 1011 0 R 1018 0 R 1021 0 R 1029 0 R 1037 0 R 1042 0 R 1047 0 R 1052 0 R 1054 0 R 1056 0 R 1058 0 R 1068 0 R 1076 0 R 1080 0 R 1087 0 R 1094 0 R 1102 0 R 1106 0 R 1112 0 R 1117 0 R 1125 0 R 1129 0 R 1134 0 R 1136 0 R 1142 0 R 1150 0 R 1156 0 R 1163 0 R 1174 0 R 1178 0 R 1180 0 R 1182 0 R 1186 0 R 1189 0 R 1194 0 R 1197 0 R 1209 0 R 1213 0 R 1219 0 R 1227 0 R 1232 0 R 1236 0 R 1240 0 R 1242 0 R 1245 0 R 1248 0 R 1251 0 R 1255 0 R 1259 0 R 1263 0 R 1268 0 R 1272 0 R 1275 0 R 1277 0 R 1287 0 R 1290 0 R 1298 0 R 1307 0 R 1313 0 R 1317 0 R 1319 0 R 1330 0 R 1333 0 R 1339 0 R 1347 0 R 1350 0 R 1357 0 R 1365 0 R 1367 0 R 1369 0 R 1378 0 R 1380 0 R 1382 0 R 1385 0 R 1387 0 R 1389 0 R 1391 0 R 1393 0 R 1396 0 R 1400 0 R 1405 0 R 1407 0 R 1409 0 R 1411 0 R 1416 0 R 1423 0
R 1429 0 R 1432 0 R 1434 0 R 1437 0 R 1441 0 R 1445 0 R 1448 0 R 1450 0 R 1452 0 R 1455 0 R 1460 0 R 1466 0 R 1474 0 R 1488 0 R 1502 0 R 1505 0 R 1510 0 R 1523 0 R 1528 0 R 1543 0 R 1551 0 R 1555 0 R 1564 0 R 1579 0 R 1593 0 R 1601 0 R 1606 0 R 1617 0 R 1622 0 R 1628 0 R 1634 0 R 1646 0 R 1649 0 R 1658 0 R 1661 0 R 1670 0 R 1676 0 R 1680 0 R 1692 0 R 1697 0 R 1703 0 R 1705 0 R 1712 0 R 1720 0 R 1728 0 R 1732 0 R 1734 0 R 1736 0 R 1748 0 R 1754 0 R 1763 0 R 1769 0 R 1782 0 R 1788 0 R 1794 0 R 1805 0 R 1811 0 R 1816 0 R 1821 0 R 1824 0 R 1827 0 R 1832 0 R 1837 0 R 1844 0 R 1848 0 R 1853 0 R 1862 0 R 1867 0 R 1872 0 R 1874 0 R 1883 0 R 1890 0 R 1896 0 R 1901 0 R 1905 0 R 1909 0 R 1914 0 R 1919 0 R 1925 0 R 1927 0 R 1929 0 R 1932 0 R 1943 0 R 1946 0 R 1953 0 R 1961 0 R 1966 0 R 1970 0 R 1975 0 R 1977 0 R 1980 0 R 1985 0 R 1988 0 R 1990 0 R 1993 0 R 1996 0 R 1999 0 R 2009 0 R 2014 0 R 2019 0 R 2021 0 R 2029 0 R 2036 0 R 2043 0 R 2049 0 R 2054 0 R 2056 0 R 2065 0 R 2075 0 R 2085 0 R 2091
0 R 2098 0 R 2100 0 R 2105 0 R 2107 0 R 2109 0 R 2113 0 R 2116 0 R 2119 0 R 2124 0 R 2128 0 R 2139 0 R 2142 0 R 2147 0 R 2150 0 R 2152 0 R 2157 0 R 2167 0 R 2169 0 R 2171 0 R 2173 0 R 2175 0 R 2178 0 R 2180 0 R 2182 0 R 2185 0 R 2187 0 R 2189 0 R 2193 0 R 2198 0 R 2207 0 R 2209 0 R 2211 0 R 2217 0 R 2219 0 R 2224 0 R 2226 0 R 2228 0 R 2235 0 R 2240 0 R 2244 0 R 2249 0 R 2253 0 R 2255 0 R 2257 0 R 2261 0 R 2264 0 R 2266 0 R 2268 0 R 2272 0 R 2274 0 R 2277 0 R 2279 0 R 2281 0 R 2283 0 R 2290 0 R 2293 0 R 2298 0 R 2300 0 R 2302 0 R 2304 0 R 2306 0 R 2314 0 R 2325 0 R 2339 0 R 2350 0 R 2354 0 R 2359 0 R 2363 0 R 2366 0 R 2371 0 R 2377 0 R 2379 0 R 2382 0 R 2384 0 R 2386 0 R 2388 0 R 2393 0 R 2395 0 R 2408 0 R 2411 0 R 2419 0 R 2425 0 R 2437 0 R 2451 0 R 2464 0 R 2483 0 R 2485 0 R 2487 0 R 2491 0 R 2509 0 R 2515 0 R 2527 0 R 2531 0 R 2535 0 R 2544 0 R 2556 0 R 2561 0 R 2571 0 R 2584 0 R 2603 0 R 2612 0 R 2615 0 R 2624 0 R 2641 0 R 2648 0 R 2651 0 R 2656 0 R 2660 0 R 2663 0 R 2672 0 R 26
81 0 R 2684 0 R 2686 0 R 2690 0 R 2704 0 R 2713 0 R 2718 0 R 2722 0 R 2725 0 R 2727 0 R 2729 0 R 2731 0 R 2736 0 R 2749 0 R 2759 0 R 2767 0 R 2773 0 R 2778 0 R 2789 0 R 2796 0 R 2802 0 R 2804 0 R 2813 0 R 2821 0 R 2823 0 R 2831 0 R 2839 0 R 2841 0 R 2850 0 R 2853 0 R 2863 0 R 2867 0 R 2876 0 R 2884 0 R 2889 0 R 2893 0 R 2897 0 R 2899 0 R 2905 0 R 2909 0 R 2913 0 R 2919 0 R 2925 0 R 2928 0 R 2934 0 R 2938 0 R 2947 0 R 2952 0 R 2958 0 R 2968 0 R 2974 0 R 2981 0 R 2984 0 R 2987 0 R 2994 0 R 2999 0 R 3002 0 R 3007 0 R 3017 0 R 3022 0 R 3024 0 R 3028 0 R 3035 0 R 3038 0 R 3049 0 R 3052 0 R 3059 0 R 3067 0 R 3074 0 R 3078 0 R 3087 0 R 3092 0 R 3096 0 R 3104 0 R 3109 0 R 3113 0 R 3115 0 R 3126 0 R 3131 0 R 3134 0 R 3136 0 R 3138 0 R 3148 0 R 3155 0 R 3159 0 R 3162 0 R 3168 0 R 3172 0 R 3175 0 R 3179 0 R 3184 0 R 3192 0 R 3197 0 R 3202 0 R 3207 0 R 3209 0 R 3212 0 R 3214 0 R 3218 0 R 3229 0 R 3231 0 R 3235 0 R 3238 0 R 3242 0 R 3245 0 R 3249 0 R 3251 0 R 3264 0 R 3269 0 R 3274 0 R 3280 0 R
3288 0 R 3290 0 R 3298 0 R 3316 0 R 3328 0 R 3334 0 R 3350 0 R 3353 0 R 3358 0 R 3360 0 R 3367 0 R 3370 0 R 3375 0 R 3378 0 R 3380 0 R 3382 0 R 3384 0 R 3387 0 R 3405 0 R 3408 0 R 3413 0 R 3419 0 R 3429 0 R 3434 0 R 3444 0 R 3454 0 R 3462 0 R 3467 0 R 3473 0 R 3478 0 R 3481 0 R 3489 0 R 3493 0 R 3498 0 R 3503 0 R 3516 0 R 3519 0 R 3525 0 R 3531 0 R 3536 0 R 3545 0 R 3554 0 R 3560 0 R 3569 0 R 3578 0 R 3583 0 R 3589 0 R 3595 0 R 3599 0 R 3601 0 R 3607 0 R 3614 0 R 3616 0 R 3622 0 R 3624 0 R 3630 0 R 3638 0 R 3644 0 R 3653 0 R 3660 0 R 3671 0 R 3681 0 R 3693 0 R 3706 0 R 3709 0 R 3711 0 R 3715 0 R 3728 0 R 3734 0 R 3739 0 R 3745 0 R 3749 0 R 3752 0 R 3757 0 R 3759 0 R 3763 0 R 3765 0 R 3769 0 R 3772 0 R 3775 0 R 3783 0 R 3785 0 R 3789 0 R 3792 0 R 3800 0 R 3808 0 R 3812 0 R 3815 0 R 3817 0 R 3821 0 R 3826 0 R 3831 0 R 3834 0 R 3843 0 R 3848 0 R 3852 0 R 3855 0 R 3863 0 R 3868 0 R 3876 0 R 3881 0 R 3883 0 R 3889 0 R 3891 0 R 3896 0 R 3900 0 R 3906 0 R 3910 0 R 3922 0 R 3938 0 R 3953 0
R 3958 0 R 3961 0 R 3964 0 R 3970 0 R 3975 0 R 3977 0 R 3979 0 R 3981 0 R 3983 0 R 3985 0 R 3994 0 R 3998 0 R 4002 0 R 4006 0 R 4008 0 R 4015 0 R 4025 0 R 4034 0 R 4037 0 R 4040 0 R 4042 0 R 4049 0 R 4056 0 R 4066 0 R 4070 0 R 4073 0 R 4077 0 R 4081 0 R 4087 0 R 4090 0 R 4105 0 R 4110 0 R 4133 0 R 4137 0 R 4144 0 R 4155 0 R 4164 0 R 4167 0 R 4170 0 R 4173 0 R 4189 0 R 4194 0 R 4201 0 R]
+/Kids [7 0 R 12 0 R 14 0 R 16 0 R 18 0 R 20 0 R 22 0 R 24 0 R 44 0 R 47 0 R 50 0 R 54 0 R 61 0 R 63 0 R 67 0 R 69 0 R 71 0 R 78 0 R 81 0 R 83 0 R 89 0 R 92 0 R 94 0 R 96 0 R 103 0 R 110 0 R 115 0 R 117 0 R 133 0 R 138 0 R 146 0 R 155 0 R 163 0 R 172 0 R 183 0 R 187 0 R 189 0 R 193 0 R 202 0 R 211 0 R 219 0 R 228 0 R 233 0 R 242 0 R 250 0 R 259 0 R 272 0 R 279 0 R 289 0 R 297 0 R 305 0 R 312 0 R 320 0 R 327 0 R 333 0 R 340 0 R 348 0 R 357 0 R 366 0 R 380 0 R 387 0 R 395 0 R 402 0 R 410 0 R 419 0 R 429 0 R 437 0 R 444 0 R 453 0 R 465 0 R 475 0 R 482 0 R 489 0 R 497 0 R 506 0 R 514 0 R 519 0 R 523 0 R 528 0 R 532 0 R 548 0 R 559 0 R 563 0 R 578 0 R 583 0 R 588 0 R 590 0 R 592 0 R 595 0 R 597 0 R 599 0 R 607 0 R 613 0 R 616 0 R 620 0 R 629 0 R 640 0 R 648 0 R 652 0 R 656 0 R 658 0 R 668 0 R 683 0 R 690 0 R 701 0 R 711 0 R 722 0 R 734 0 R 754 0 R 763 0 R 767 0 R 773 0 R 776 0 R 780 0 R 784 0 R 787 0 R 790 0 R 792 0 R 795 0 R 799 0 R 801 0 R 805 0 R 811 0 R 816 0 R 820 0 R 823 0 R 829 0 R
831 0 R 835 0 R 843 0 R 845 0 R 848 0 R 851 0 R 854 0 R 857 0 R 871 0 R 879 0 R 890 0 R 901 0 R 907 0 R 917 0 R 928 0 R 931 0 R 935 0 R 938 0 R 943 0 R 952 0 R 960 0 R 964 0 R 968 0 R 973 0 R 977 0 R 979 0 R 995 0 R 1006 0 R 1011 0 R 1018 0 R 1021 0 R 1029 0 R 1037 0 R 1042 0 R 1047 0 R 1052 0 R 1054 0 R 1056 0 R 1058 0 R 1068 0 R 1076 0 R 1080 0 R 1087 0 R 1094 0 R 1102 0 R 1106 0 R 1112 0 R 1117 0 R 1125 0 R 1129 0 R 1134 0 R 1136 0 R 1142 0 R 1150 0 R 1156 0 R 1163 0 R 1174 0 R 1178 0 R 1180 0 R 1182 0 R 1186 0 R 1189 0 R 1194 0 R 1197 0 R 1209 0 R 1213 0 R 1219 0 R 1227 0 R 1232 0 R 1236 0 R 1240 0 R 1242 0 R 1245 0 R 1248 0 R 1251 0 R 1255 0 R 1259 0 R 1263 0 R 1268 0 R 1272 0 R 1275 0 R 1277 0 R 1287 0 R 1290 0 R 1298 0 R 1307 0 R 1313 0 R 1317 0 R 1319 0 R 1330 0 R 1333 0 R 1339 0 R 1347 0 R 1350 0 R 1357 0 R 1364 0 R 1367 0 R 1369 0 R 1378 0 R 1380 0 R 1382 0 R 1385 0 R 1387 0 R 1389 0 R 1391 0 R 1393 0 R 1396 0 R 1400 0 R 1405 0 R 1407 0 R 1409 0 R 1411 0 R 1416 0 R 1423 0
R 1429 0 R 1432 0 R 1434 0 R 1437 0 R 1441 0 R 1445 0 R 1448 0 R 1450 0 R 1452 0 R 1455 0 R 1460 0 R 1466 0 R 1474 0 R 1488 0 R 1502 0 R 1505 0 R 1510 0 R 1523 0 R 1528 0 R 1543 0 R 1551 0 R 1555 0 R 1564 0 R 1579 0 R 1593 0 R 1601 0 R 1606 0 R 1617 0 R 1622 0 R 1628 0 R 1634 0 R 1646 0 R 1649 0 R 1658 0 R 1661 0 R 1670 0 R 1676 0 R 1680 0 R 1692 0 R 1697 0 R 1703 0 R 1705 0 R 1712 0 R 1720 0 R 1728 0 R 1732 0 R 1734 0 R 1736 0 R 1748 0 R 1754 0 R 1763 0 R 1769 0 R 1782 0 R 1788 0 R 1794 0 R 1805 0 R 1811 0 R 1816 0 R 1821 0 R 1824 0 R 1827 0 R 1832 0 R 1837 0 R 1844 0 R 1848 0 R 1853 0 R 1862 0 R 1867 0 R 1872 0 R 1874 0 R 1883 0 R 1890 0 R 1896 0 R 1901 0 R 1905 0 R 1909 0 R 1914 0 R 1919 0 R 1925 0 R 1927 0 R 1929 0 R 1932 0 R 1943 0 R 1946 0 R 1953 0 R 1961 0 R 1966 0 R 1970 0 R 1975 0 R 1977 0 R 1980 0 R 1985 0 R 1988 0 R 1990 0 R 1993 0 R 1996 0 R 1999 0 R 2009 0 R 2014 0 R 2019 0 R 2021 0 R 2029 0 R 2036 0 R 2043 0 R 2049 0 R 2054 0 R 2056 0 R 2065 0 R 2075 0 R 2085 0 R 2091
0 R 2098 0 R 2100 0 R 2105 0 R 2107 0 R 2109 0 R 2113 0 R 2116 0 R 2119 0 R 2124 0 R 2128 0 R 2139 0 R 2142 0 R 2147 0 R 2150 0 R 2152 0 R 2157 0 R 2167 0 R 2169 0 R 2171 0 R 2173 0 R 2175 0 R 2178 0 R 2180 0 R 2182 0 R 2185 0 R 2187 0 R 2189 0 R 2193 0 R 2198 0 R 2207 0 R 2209 0 R 2211 0 R 2217 0 R 2219 0 R 2224 0 R 2226 0 R 2228 0 R 2235 0 R 2240 0 R 2244 0 R 2249 0 R 2253 0 R 2255 0 R 2257 0 R 2261 0 R 2264 0 R 2266 0 R 2268 0 R 2272 0 R 2274 0 R 2277 0 R 2279 0 R 2281 0 R 2283 0 R 2290 0 R 2293 0 R 2298 0 R 2300 0 R 2302 0 R 2304 0 R 2306 0 R 2314 0 R 2325 0 R 2339 0 R 2350 0 R 2354 0 R 2359 0 R 2363 0 R 2366 0 R 2371 0 R 2377 0 R 2379 0 R 2382 0 R 2384 0 R 2386 0 R 2388 0 R 2393 0 R 2395 0 R 2408 0 R 2411 0 R 2419 0 R 2425 0 R 2437 0 R 2451 0 R 2464 0 R 2483 0 R 2485 0 R 2487 0 R 2491 0 R 2509 0 R 2515 0 R 2527 0 R 2531 0 R 2535 0 R 2544 0 R 2556 0 R 2561 0 R 2571 0 R 2584 0 R 2603 0 R 2612 0 R 2615 0 R 2624 0 R 2641 0 R 2648 0 R 2651 0 R 2656 0 R 2660 0 R 2663 0 R 2672 0 R 26
81 0 R 2684 0 R 2686 0 R 2690 0 R 2704 0 R 2713 0 R 2718 0 R 2722 0 R 2725 0 R 2727 0 R 2729 0 R 2731 0 R 2736 0 R 2749 0 R 2759 0 R 2767 0 R 2773 0 R 2778 0 R 2789 0 R 2796 0 R 2802 0 R 2804 0 R 2813 0 R 2821 0 R 2823 0 R 2831 0 R 2839 0 R 2841 0 R 2850 0 R 2853 0 R 2863 0 R 2867 0 R 2876 0 R 2884 0 R 2889 0 R 2893 0 R 2897 0 R 2899 0 R 2905 0 R 2909 0 R 2913 0 R 2919 0 R 2925 0 R 2928 0 R 2934 0 R 2938 0 R 2947 0 R 2952 0 R 2958 0 R 2968 0 R 2974 0 R 2981 0 R 2984 0 R 2987 0 R 2994 0 R 2999 0 R 3002 0 R 3007 0 R 3017 0 R 3022 0 R 3024 0 R 3028 0 R 3035 0 R 3038 0 R 3049 0 R 3052 0 R 3059 0 R 3067 0 R 3074 0 R 3078 0 R 3087 0 R 3092 0 R 3096 0 R 3104 0 R 3109 0 R 3113 0 R 3115 0 R 3126 0 R 3131 0 R 3134 0 R 3136 0 R 3138 0 R 3148 0 R 3155 0 R 3159 0 R 3162 0 R 3168 0 R 3172 0 R 3175 0 R 3179 0 R 3184 0 R 3192 0 R 3197 0 R 3202 0 R 3207 0 R 3209 0 R 3212 0 R 3214 0 R 3218 0 R 3229 0 R 3231 0 R 3235 0 R 3238 0 R 3242 0 R 3245 0 R 3249 0 R 3251 0 R 3264 0 R 3269 0 R 3274 0 R 3280 0 R
3288 0 R 3290 0 R 3298 0 R 3316 0 R 3328 0 R 3334 0 R 3350 0 R 3353 0 R 3358 0 R 3360 0 R 3367 0 R 3370 0 R 3375 0 R 3378 0 R 3380 0 R 3382 0 R 3384 0 R 3387 0 R 3405 0 R 3408 0 R 3413 0 R 3419 0 R 3429 0 R 3434 0 R 3444 0 R 3454 0 R 3462 0 R 3467 0 R 3473 0 R 3478 0 R 3481 0 R 3489 0 R 3493 0 R 3498 0 R 3503 0 R 3516 0 R 3519 0 R 3525 0 R 3531 0 R 3536 0 R 3545 0 R 3554 0 R 3560 0 R 3569 0 R 3578 0 R 3583 0 R 3589 0 R 3595 0 R 3599 0 R 3601 0 R 3607 0 R 3614 0 R 3616 0 R 3622 0 R 3624 0 R 3630 0 R 3638 0 R 3644 0 R 3653 0 R 3660 0 R 3671 0 R 3681 0 R 3693 0 R 3706 0 R 3709 0 R 3711 0 R 3715 0 R 3728 0 R 3734 0 R 3739 0 R 3745 0 R 3749 0 R 3752 0 R 3757 0 R 3759 0 R 3763 0 R 3765 0 R 3769 0 R 3772 0 R 3775 0 R 3783 0 R 3785 0 R 3789 0 R 3792 0 R 3800 0 R 3808 0 R 3812 0 R 3815 0 R 3817 0 R 3821 0 R 3826 0 R 3831 0 R 3834 0 R 3843 0 R 3848 0 R 3852 0 R 3855 0 R 3863 0 R 3868 0 R 3876 0 R 3881 0 R 3883 0 R 3889 0 R 3891 0 R 3896 0 R 3900 0 R 3906 0 R 3910 0 R 3922 0 R 3938 0 R 3953 0
R 3958 0 R 3961 0 R 3964 0 R 3970 0 R 3975 0 R 3977 0 R 3979 0 R 3981 0 R 3983 0 R 3985 0 R 3994 0 R 3998 0 R 4002 0 R 4006 0 R 4008 0 R 4015 0 R 4025 0 R 4034 0 R 4037 0 R 4040 0 R 4042 0 R 4049 0 R 4056 0 R 4066 0 R 4070 0 R 4073 0 R 4077 0 R 4081 0 R 4087 0 R 4090 0 R 4105 0 R 4110 0 R 4133 0 R 4137 0 R 4144 0 R 4155 0 R 4164 0 R 4167 0 R 4170 0 R 4173 0 R 4189 0 R 4194 0 R 4201 0 R]
>>
endobj
4 0 obj
@@ -207883,7 +207883,7 @@ endobj
>>
endobj
1356 0 obj
-<< /Length 11549
+<< /Length 11773
>>
stream
q
@@ -208258,19 +208258,49 @@ ET
0.2 0.2 0.2 scn
0.2 0.2 0.2 SCN
+0.0057 Tw
+
BT
48.24 440.666 Td
/F1.0 10.5 Tf
-[<54> 29.7852 <616720636f6d7072657373696f6e206973206e6f7420737570706f72746564207768656e207573696e672057> 60.0586 <414c20656e6372797074696f6e2e>] TJ
+[<436f70726f636573736f727320746861742072756e207365727665722d73696465206f6e20526567696f6e536572766572732063616e20706572666f726d2067657420616e6420736574206f706572> 20.0195 <6174696f6e73206f6e2063656c6c2054> 29.7852 <6167732e>] TJ
ET
+
+0.0 Tw
0.0 0.0 0.0 SCN
0.0 0.0 0.0 scn
0.2 0.2 0.2 scn
0.2 0.2 0.2 SCN
+1.0348 Tw
+
BT
-48.24 400.826 Td
+48.24 424.886 Td
+/F1.0 10.5 Tf
+[<54> 29.7852 <61677320617265207374726970706564206f75742061742074686520525043206c61> 20.0195 <796572206265666f726520746865207265616420726573706f6e73652069732073656e74206261636b2c20736f20636c69656e747320646f206e6f7420736565>] TJ
+ET
+
+
+0.0 Tw
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+BT
+48.24 409.106 Td
+/F1.0 10.5 Tf
+[<746865736520746167732e2054> 29.7852 <616720636f6d7072657373696f6e206973206e6f7420737570706f72746564207768656e207573696e672057> 60.0586 <414c20656e6372797074696f6e2e>] TJ
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+BT
+48.24 369.266 Td
/F2.0 18 Tf
[<36332e322e2041> 20.0195 <636365737320436f6e74726f6c204c6162656c73202841> 20.0195 <434c7329>] TJ
ET
@@ -208281,7 +208311,7 @@ ET
0.2 0.2 0.2 SCN
BT
-48.24 366.086 Td
+48.24 334.526 Td
/F2.0 13 Tf
[<36332e322e312e20486f772049742057> 60.0586 <6f726b73>] TJ
ET
@@ -208294,7 +208324,7 @@ ET
2.1866 Tw
BT
-48.24 339.526 Td
+48.24 307.966 Td
/F1.0 10.5 Tf
[<41> 20.0195 <434c7320696e204842617365206172652062617365642075706f6e20612075736572> -29.7852 <d573206d656d6265727368697020696e206f72206578636c7573696f6e2066726f6d2067726f7570732c20616e64206120676976656e>] TJ
ET
@@ -208309,7 +208339,7 @@ ET
2.3688 Tw
BT
-48.24 323.746 Td
+48.24 292.186 Td
/F1.0 10.5 Tf
[<67726f7570d573207065726d697373696f6e7320746f20616363657373206120676976656e207265736f757263652e2041> 20.0195 <434c732061726520696d706c656d656e746564206173206120636f70726f636573736f722063616c6c6564>] TJ
ET
@@ -208322,7 +208352,7 @@ ET
0.2 0.2 0.2 SCN
BT
-48.24 307.966 Td
+48.24 276.406 Td
/F1.0 10.5 Tf
[<41> 20.0195 <6363657373436f6e74726f6c6c65722e>] TJ
ET
@@ -208335,7 +208365,7 @@ ET
1.3921 Tw
BT
-48.24 280.186 Td
+48.24 248.626 Td
/F1.0 10.5 Tf
<484261736520646f6573206e6f74206d61696e7461696e206120707269766174652067726f7570206d617070696e672c206275742072656c696573206f6e206120> Tj
ET
@@ -208350,7 +208380,7 @@ ET
1.3921 Tw
BT
-395.8321 280.186 Td
+395.8321 248.626 Td
/F3.0 10.5 Tf
<4861646f6f702067726f7570206d6170706572> Tj
ET
@@ -208365,7 +208395,7 @@ ET
1.3921 Tw
BT
-509.4334 280.186 Td
+509.4334 248.626 Td
/F1.0 10.5 Tf
<2c207768696368> Tj
ET
@@ -208380,7 +208410,7 @@ ET
2.454 Tw
BT
-48.24 264.406 Td
+48.24 232.846 Td
/F1.0 10.5 Tf
[<6d617073206265747765656e20656e74697469657320696e2061206469726563746f72792073756368206173204c44> 20.0195 <4150206f722041> 20.0195 <6374697665204469726563746f7279> 89.8438 <2c20616e642048426173652075736572732e20416e> 20.0195 <79>] TJ
ET
@@ -208395,7 +208425,7 @@ ET
2.0202 Tw
BT
-48.24 248.626 Td
+48.24 217.066 Td
/F1.0 10.5 Tf
[<737570706f72746564204861646f6f702067726f7570206d61707065722077696c6c20776f726b2e20557365727320617265207468656e206772> 20.0195 <616e746564207370656369666963207065726d697373696f6e732028526561642c>] TJ
ET
@@ -208408,7 +208438,7 @@ ET
0.2 0.2 0.2 SCN
BT
-48.24 232.846 Td
+48.24 201.286 Td
/F1.0 10.5 Tf
[<57726974652c20457865637574652c204372656174652c2041> 20.0195 <646d696e2920616761696e7374207265736f75726365732028676c6f62616c2c206e616d657370616365732c207461626c65732c2063656c6c732c206f7220656e64706f696e7473292e>] TJ
ET
@@ -208418,15 +208448,15 @@ ET
q
0.5 w
0.9333 0.9333 0.9333 SCN
-108.24 217.03 m
-108.24 177.47 l
+108.24 185.47 m
+108.24 145.91 l
S
Q
0.098 0.251 0.4863 scn
0.098 0.251 0.4863 SCN
BT
-67.956 188.682 Td
+67.956 157.122 Td
/F5.1 24 Tf
<21> Tj
ET
@@ -208439,7 +208469,7 @@ ET
0.499 Tw
BT
-120.24 201.066 Td
+120.24 169.506 Td
/F1.0 10.5 Tf
[<57697468204b> 20.0195 <65726265726f7320616e642041> 20.0195 <636365737320436f6e74726f6c20656e61626c65642c20636c69656e742061636365737320746f2048426173652069732061757468656e74696361746564>] TJ
ET
@@ -208452,7 +208482,7 @@ ET
0.2 0.2 0.2 SCN
BT
-120.24 185.286 Td
+120.24 153.726 Td
/F1.0 10.5 Tf
[<616e6420757365722064617461206973207072697661746520756e6c6573732061636365737320686173206265656e206578706c696369746c79206772> 20.0195 <616e7465642e>] TJ
ET
@@ -208465,7 +208495,7 @@ ET
3.7976 Tw
BT
-48.24 153.506 Td
+48.24 121.946 Td
/F1.0 10.5 Tf
<48426173652068617320612073696d706c6572207365637572697479206d6f64656c207468616e2072656c6174696f6e616c206461746162617365732c20657370656369616c6c7920696e207465726d73206f6620636c69656e74> Tj
ET
@@ -208480,7 +208510,7 @@ ET
0.6283 Tw
BT
-48.24 137.726 Td
+48.24 106.166 Td
/F1.0 10.5 Tf
[<6f706572> 20.0195 <6174696f6e732e204e6f2064697374696e6374696f6e206973206d616465206265747765656e20616e20696e7365727420286e6577207265636f72642920616e642075706461746520286f66206578697374696e67207265636f7264292c>] TJ
ET
@@ -208493,39 +208523,13 @@ ET
0.2 0.2 0.2 SCN
BT
-48.24 121.946 Td
+48.24 90.386 Td
/F1.0 10.5 Tf
<666f72206578616d706c652c20617320626f746820636f6c6c6170736520646f776e20696e746f2061205075742e> Tj
ET
0.0 0.0 0.0 SCN
0.0 0.0 0.0 scn
-0.2 0.2 0.2 scn
-0.2 0.2 0.2 SCN
-
-BT
-48.24 90.116 Td
-/F2.0 10.5 Tf
-[<556e6465727374616e64696e672041> 20.0195 <6363657373204c6576656c73>] TJ
-ET
-
-0.0 0.0 0.0 SCN
-0.0 0.0 0.0 scn
-0.2 0.2 0.2 scn
-0.2 0.2 0.2 SCN
-
-2.7981 Tw
-
-BT
-48.24 64.286 Td
-/F1.0 10.5 Tf
-[<484261736520616363657373206c6576656c7320617265206772> 20.0195 <616e74656420696e646570656e64656e746c79206f662065616368206f7468657220616e6420616c6c6f7720666f7220646966666572656e74207479706573206f66>] TJ
-ET
-
-
-0.0 Tw
-0.0 0.0 0.0 SCN
-0.0 0.0 0.0 scn
q
0.0 0.0 0.0 scn
0.0 0.0 0.0 SCN
@@ -208587,16 +208591,13 @@ endobj
>>
endobj
1361 0 obj
-[1357 0 R /XYZ 0 424.85 null]
+[1357 0 R /XYZ 0 393.29 null]
endobj
1362 0 obj
-[1357 0 R /XYZ 0 384.77 null]
+[1357 0 R /XYZ 0 353.21 null]
endobj
1363 0 obj
-[1357 0 R /XYZ 0 106.13 null]
-endobj
-1364 0 obj
-<< /Length 16171
+<< /Length 15823
>>
stream
q
@@ -208607,6 +208608,32 @@ q
BT
48.24 794.676 Td
+/F2.0 10.5 Tf
+[<556e6465727374616e64696e672041> 20.0195 <6363657373204c6576656c73>] TJ
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+2.7981 Tw
+
+BT
+48.24 768.846 Td
+/F1.0 10.5 Tf
+[<484261736520616363657373206c6576656c7320617265206772> 20.0195 <616e74656420696e646570656e64656e746c79206f662065616368206f7468657220616e6420616c6c6f7720666f7220646966666572656e74207479706573206f66>] TJ
+ET
+
+
+0.0 Tw
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+BT
+48.24 753.066 Td
/F1.0 10.5 Tf
[<6f706572> 20.0195 <6174696f6e73206174206120676976656e2073636f70652e>] TJ
ET
@@ -208619,7 +208646,7 @@ ET
0.2 0.2 0.2 SCN
BT
-56.8805 766.896 Td
+56.8805 725.286 Td
/F1.0 10.5 Tf
<a5> Tj
ET
@@ -208632,7 +208659,7 @@ ET
0.2 0.2 0.2 SCN
BT
-66.24 766.896 Td
+66.24 725.286 Td
/F3.0 10.5 Tf
<5265616420285229> Tj
ET
@@ -208643,7 +208670,7 @@ ET
0.2 0.2 0.2 SCN
BT
-107.505 766.896 Td
+107.505 725.286 Td
/F1.0 10.5 Tf
<202d2063616e207265616420646174612061742074686520676976656e2073636f7065> Tj
ET
@@ -208656,7 +208683,7 @@ ET
0.2 0.2 0.2 SCN
BT
-56.8805 745.116 Td
+56.8805 703.506 Td
/F1.0 10.5 Tf
<a5> Tj
ET
@@ -208669,7 +208696,7 @@ ET
0.2 0.2 0.2 SCN
BT
-66.24 745.116 Td
+66.24 703.506 Td
/F3.0 10.5 Tf
<577269746520285729> Tj
ET
@@ -208680,7 +208707,7 @@ ET
0.2 0.2 0.2 SCN
BT
-115.2855 745.116 Td
+115.2855 703.506 Td
/F1.0 10.5 Tf
<202d2063616e20777269746520646174612061742074686520676976656e2073636f7065> Tj
ET
@@ -208693,7 +208720,7 @@ ET
0.2 0.2 0.2 SCN
BT
-56.8805 723.336 Td
+56.8805 681.726 Td
/F1.0 10.5 Tf
<a5> Tj
ET
@@ -208706,7 +208733,7 @@ ET
0.2 0.2 0.2 SCN
BT
-66.24 723.336 Td
+66.24 681.726 Td
/F3.0 10.5 Tf
<4578656375746520285829> Tj
ET
@@ -208717,7 +208744,7 @@ ET
0.2 0.2 0.2 SCN
BT
-121.029 723.336 Td
+121.029 681.726 Td
/F1.0 10.5 Tf
<202d2063616e206578656375746520636f70726f636573736f7220656e64706f696e74732061742074686520676976656e2073636f7065> Tj
ET
@@ -208730,7 +208757,7 @@ ET
0.2 0.2 0.2 SCN
BT
-56.8805 701.556 Td
+56.8805 659.946 Td
/F1.0 10.5 Tf
<a5> Tj
ET
@@ -208743,7 +208770,7 @@ ET
0.2 0.2 0.2 SCN
BT
-66.24 701.556 Td
+66.24 659.946 Td
/F3.0 10.5 Tf
<43726561746520284329> Tj
ET
@@ -208754,7 +208781,7 @@ ET
0.2 0.2 0.2 SCN
BT
-114.5715 701.556 Td
+114.5715 659.946 Td
/F1.0 10.5 Tf
<202d2063616e20637265617465207461626c6573206f722064726f70207461626c657320286576656e2074686f7365207468657920646964206e6f7420637265617465292061742074686520676976656e2073636f7065> Tj
ET
@@ -208767,7 +208794,7 @@ ET
0.2 0.2 0.2 SCN
BT
-56.8805 679.776 Td
+56.8805 638.166 Td
/F1.0 10.5 Tf
<a5> Tj
ET
@@ -208782,7 +208809,7 @@ ET
0.342 Tw
BT
-66.24 679.776 Td
+66.24 638.166 Td
/F3.0 10.5 Tf
[<41> 20.0195 <646d696e20284129>] TJ
ET
@@ -208797,7 +208824,7 @@ ET
0.342 Tw
BT
-116.1208 679.776 Td
+116.1208 638.166 Td
/F1.0 10.5 Tf
[<202d2063616e20706572666f726d20636c7573746572206f706572> 20.0195 <6174696f6e7320737563682061732062616c616e63696e672074686520636c7573746572206f722061737369676e696e6720726567696f6e73206174>] TJ
ET
@@ -208810,7 +208837,7 @@ ET
0.2 0.2 0.2 SCN
BT
-66.24 663.996 Td
+66.24 622.386 Td
/F1.0 10.5 Tf
<74686520676976656e2073636f7065> Tj
ET
@@ -208821,7 +208848,7 @@ ET
0.2 0.2 0.2 SCN
BT
-48.24 636.216 Td
+48.24 594.606 Td
/F1.0 10.5 Tf
<54686520706f737369626c652073636f706573206172653a> Tj
ET
@@ -208834,7 +208861,7 @@ ET
0.2 0.2 0.2 SCN
BT
-56.8805 608.436 Td
+56.8805 566.826 Td
/F1.0 10.5 Tf
<a5> Tj
ET
@@ -208849,7 +208876,7 @@ ET
0.2397 Tw
BT
-66.24 608.436 Td
+66.24 566.826 Td
/F3.0 10.5 Tf
<537570657275736572> Tj
ET
@@ -208864,7 +208891,7 @@ ET
0.2397 Tw
BT
-115.6005 608.436 Td
+115.6005 566.826 Td
/F1.0 10.5 Tf
[<202d20737570657275736572732063616e20706572666f726d20616e> 20.0195 <79206f706572> 20.0195 <6174696f6e20617661696c61626c6520696e2048426173652c20746f20616e> 20.0195 <79207265736f757263652e205468652075736572>] TJ
ET
@@ -208879,7 +208906,7 @@ ET
4.1009 Tw
BT
-66.24 592.656 Td
+66.24 551.046 Td
/F1.0 10.5 Tf
[<77686f2072756e73204842617365206f6e20796f757220636c75737465722069732061207375706572757365722c2061732061726520616e> 20.0195 <79207072696e636970616c732061737369676e656420746f20746865>] TJ
ET
@@ -208892,7 +208919,7 @@ ET
0.2 0.2 0.2 SCN
BT
-66.24 576.876 Td
+66.24 535.266 Td
/F1.0 10.5 Tf
[<636f6e6669677572> 20.0195 <6174696f6e2070726f706572747920>] TJ
ET
@@ -208903,7 +208930,7 @@ ET
0.6941 0.1294 0.2745 SCN
BT
-183.7768 576.876 Td
+183.7768 535.266 Td
/F4.0 10.5 Tf
<68626173652e737570657275736572> Tj
ET
@@ -208914,7 +208941,7 @@ ET
0.2 0.2 0.2 SCN
BT
-262.5268 576.876 Td
+262.5268 535.266 Td
/F1.0 10.5 Tf
<20696e20> Tj
ET
@@ -208925,7 +208952,7 @@ ET
0.2 0.2 0.2 SCN
BT
-278.0878 576.876 Td
+278.0878 535.266 Td
/F3.0 10.5 Tf
<68626173652d736974652e786d6c> Tj
ET
@@ -208936,7 +208963,7 @@ ET
0.2 0.2 0.2 SCN
BT
-347.6818 576.876 Td
+347.6818 535.266 Td
/F1.0 10.5 Tf
<206f6e2074686520484d61737465722e> Tj
ET
@@ -208949,7 +208976,7 @@ ET
0.2 0.2 0.2 SCN
BT
-56.8805 555.096 Td
+56.8805 513.486 Td
/F1.0 10.5 Tf
<a5> Tj
ET
@@ -208964,7 +208991,7 @@ ET
1.9002 Tw
BT
-66.24 555.096 Td
+66.24 513.486 Td
/F3.0 10.5 Tf
<476c6f62616c> Tj
ET
@@ -208979,7 +209006,7 @@ ET
1.9002 Tw
BT
-98.118 555.096 Td
+98.118 513.486 Td
/F1.0 10.5 Tf
[<202d207065726d697373696f6e73206772> 20.0195 <616e74656420617420>] TJ
ET
@@ -208994,7 +209021,7 @@ ET
1.9002 Tw
BT
-233.5242 555.096 Td
+233.5242 513.486 Td
/F3.0 10.5 Tf
<676c6f62616c> Tj
ET
@@ -209009,7 +209036,7 @@ ET
1.9002 Tw
BT
-263.7537 555.096 Td
+263.7537 513.486 Td
/F1.0 10.5 Tf
[<2073636f706520616c6c6f77207468652061646d696e20746f206f706572> 20.0195 <617465206f6e20616c6c207461626c6573206f6620746865>] TJ
ET
@@ -209022,7 +209049,7 @@ ET
0.2 0.2 0.2 SCN
BT
-66.24 539.316 Td
+66.24 497.706 Td
/F1.0 10.5 Tf
<636c75737465722e> Tj
ET
@@ -209035,7 +209062,7 @@ ET
0.2 0.2 0.2 SCN
BT
-56.8805 517.536 Td
+56.8805 475.926 Td
/F1.0 10.5 Tf
<a5> Tj
ET
@@ -209050,7 +209077,7 @@ ET
3.7667 Tw
BT
-66.24 517.536 Td
+66.24 475.926 Td
/F3.0 10.5 Tf
<4e616d657370616365> Tj
ET
@@ -209065,7 +209092,7 @@ ET
3.7667 Tw
BT
-122.184 517.536 Td
+122.184 475.926 Td
/F1.0 10.5 Tf
[<202d207065726d697373696f6e73206772> 20.0195 <616e74656420617420>] TJ
ET
@@ -209080,7 +209107,7 @@ ET
3.7667 Tw
BT
-266.9226 517.536 Td
+266.9226 475.926 Td
/F3.0 10.5 Tf
<6e616d657370616365> Tj
ET
@@ -209095,7 +209122,7 @@ ET
3.7667 Tw
BT
-321.1446 517.536 Td
+321.1446 475.926 Td
/F1.0 10.5 Tf
<2073636f7065206170706c7920746f20616c6c207461626c65732077697468696e206120676976656e> Tj
ET
@@ -209108,7 +209135,7 @@ ET
0.2 0.2 0.2 SCN
BT
-66.24 501.756 Td
+66.24 460.146 Td
/F1.0 10.5 Tf
<6e616d6573706163652e> Tj
ET
@@ -209121,7 +209148,7 @@ ET
0.2 0.2 0.2 SCN
BT
-56.8805 479.976 Td
+56.8805 438.366 Td
/F1.0 10.5 Tf
<a5> Tj
ET
@@ -209134,7 +209161,7 @@ ET
0.2 0.2 0.2 SCN
BT
-66.24 479.976 Td
+66.24 438.366 Td
/F3.0 10.5 Tf
[<54> 29.7852 <61626c65>] TJ
ET
@@ -209145,7 +209172,7 @@ ET
0.2 0.2 0.2 SCN
BT
-92.7023 479.976 Td
+92.7023 438.366 Td
/F1.0 10.5 Tf
[<202d207065726d697373696f6e73206772> 20.0195 <616e74656420617420>] TJ
ET
@@ -209156,7 +209183,7 @@ ET
0.2 0.2 0.2 SCN
BT
-218.6076 479.976 Td
+218.6076 438.366 Td
/F3.0 10.5 Tf
<7461626c65> Tj
ET
@@ -209167,7 +209194,7 @@ ET
0.2 0.2 0.2 SCN
BT
-242.8206 479.976 Td
+242.8206 438.366 Td
/F1.0 10.5 Tf
<2073636f7065206170706c7920746f2064617461206f72206d657461646174612077697468696e206120676976656e207461626c652e> Tj
ET
@@ -209180,7 +209207,7 @@ ET
0.2 0.2 0.2 SCN
BT
-56.8805 458.196 Td
+56.8805 416.586 Td
/F1.0 10.5 Tf
<a5> Tj
ET
@@ -209195,7 +209222,7 @@ ET
5.1055 Tw
BT
-66.24 458.196 Td
+66.24 416.586 Td
/F3.0 10.5 Tf
[<436f6c756d6e46> 40.0391 <616d696c79>] TJ
ET
@@ -209210,7 +209237,7 @@ ET
5.1055 Tw
BT
-137.1671 458.196 Td
+137.1671 416.586 Td
/F1.0 10.5 Tf
[<202d207065726d697373696f6e73206772> 20.0195 <616e74656420617420>] TJ
ET
@@ -209225,7 +209252,7 @@ ET
5.1055 Tw
BT
-288.5997 458.196 Td
+288.5997 416.586 Td
/F3.0 10.5 Tf
[<436f6c756d6e46> 40.0391 <616d696c79>] TJ
ET
@@ -209240,7 +209267,7 @@ ET
5.1055 Tw
BT
-359.5268 458.196 Td
+359.5268 416.586 Td
/F1.0 10.5 Tf
<2073636f7065206170706c7920746f2063656c6c732077697468696e2074686174> Tj
ET
@@ -209253,7 +209280,7 @@ ET
0.2 0.2 0.2 SCN
BT
-66.24 442.416 Td
+66.24 400.806 Td
/F1.0 10.5 Tf
[<436f6c756d6e46> 40.0391 <616d696c79> 89.8438 <2e>] TJ
ET
@@ -209266,7 +209293,7 @@ ET
0.2 0.2 0.2 SCN
BT
-56.8805 420.636 Td
+56.8805 379.026 Td
/F1.0 10.5 Tf
<a5> Tj
ET
@@ -209281,7 +209308,7 @@ ET
4.2355 Tw
BT
-66.24 420.636 Td
+66.24 379.026 Td
/F3.0 10.5 Tf
<43656c6c> Tj
ET
@@ -209296,7 +209323,7 @@ ET
4.2355 Tw
BT
-84.3735 420.636 Td
+84.3735 379.026 Td
/F1.0 10.5 Tf
[<202d207065726d697373696f6e73206772> 20.0195 <616e74656420617420>] TJ
ET
@@ -209311,7 +209338,7 @@ ET
4.2355 Tw
BT
-231.4564 420.636 Td
+231.4564 379.026 Td
/F3.0 10.5 Tf
<63656c6c> Tj
ET
@@ -209326,7 +209353,7 @@ ET
4.2355 Tw
BT
-248.1199 420.636 Td
+248.1199 379.026 Td
/F1.0 10.5 Tf
[<2073636f7065206170706c7920746f20746861742065786163742063656c6c20636f6f7264696e61746520286b> 20.0195 <6579> 89.8438 <2c2076616c75652c>] TJ
ET
@@ -209339,7 +209366,7 @@ ET
0.2 0.2 0.2 SCN
BT
-66.24 404.856 Td
+66.24 363.246 Td
/F1.0 10.5 Tf
<74696d657374616d70292e205468697320616c6c6f777320666f7220706f6c6963792065766f6c7574696f6e20616c6f6e67207769746820646174612e> Tj
ET
@@ -209352,7 +209379,7 @@ ET
3.1595 Tw
BT
-66.24 377.076 Td
+66.24 335.466 Td
/F1.0 10.5 Tf
[<54> 29.7852 <6f206368616e676520616e2041> 20.0195 <434c206f6e20612073706563696669632063656c6c2c20777269746520616e20757064617465642063656c6c2077697468206e65772041> 20.0195 <434c20746f207468652070726563697365>] TJ
ET
@@ -209365,7 +209392,7 @@ ET
0.2 0.2 0.2 SCN
BT
-66.24 361.296 Td
+66.24 319.686 Td
/F1.0 10.5 Tf
<636f6f7264696e61746573206f6620746865206f726967696e616c2e> Tj
ET
@@ -209378,7 +209405,7 @@ ET
0.1906 Tw
BT
-66.24 333.516 Td
+66.24 291.906 Td
/F1.0 10.5 Tf
[<496620796f7520686176652061206d756c74692d76657273696f6e656420736368656d6120616e642077616e7420746f207570646174652041> 20.0195 <434c73206f6e20616c6c2076697369626c652076657273696f6e732c20796f75206e656564>] TJ
ET
@@ -209393,7 +209420,7 @@ ET
2.2084 Tw
BT
-66.24 317.736 Td
+66.24 276.126 Td
/F1.0 10.5 Tf
<746f207772697465206e65772063656c6c7320666f7220616c6c2076697369626c652076657273696f6e732e20546865206170706c69636174696f6e2068617320636f6d706c65746520636f6e74726f6c206f76657220706f6c696379> Tj
ET
@@ -209406,7 +209433,7 @@ ET
0.2 0.2 0.2 SCN
BT
-66.24 301.956 Td
+66.24 260.346 Td
/F1.0 10.5 Tf
<65766f6c7574696f6e2e> Tj
ET
@@ -209419,7 +209446,7 @@ ET
1.5463 Tw
BT
-66.24 274.176 Td
+66.24 232.566 Td
/F1.0 10.5 Tf
<54686520657863657074696f6e20746f207468652061626f76652072756c6520697320> Tj
ET
@@ -209434,7 +209461,7 @@ ET
1.5463 Tw
BT
-247.9622 274.176 Td
+247.9622 232.566 Td
/F4.0 10.5 Tf
<617070656e64> Tj
ET
@@ -209449,7 +209476,7 @@ ET
1.5463 Tw
BT
-279.4622 274.176 Td
+279.4622 232.566 Td
/F1.0 10.5 Tf
<20616e6420> Tj
ET
@@ -209464,7 +209491,7 @@ ET
1.5463 Tw
BT
-307.1038 274.176 Td
+307.1038 232.566 Td
/F4.0 10.5 Tf
<696e6372656d656e74> Tj
ET
@@ -209479,7 +209506,7 @@ ET
1.5463 Tw
BT
-354.3538 274.176 Td
+354.3538 232.566 Td
/F1.0 10.5 Tf
<2070726f63657373696e672e20417070656e647320616e6420696e6372656d656e7473> Tj
ET
@@ -209494,7 +209521,7 @@ ET
0.5789 Tw
BT
-66.24 258.396 Td
+66.24 216.786 Td
/F1.0 10.5 Tf
[<63616e20636172727920616e2041> 20.0195 <434c20696e20746865206f706572> 20.0195 <6174696f6e2e204966206f6e6520697320696e636c7564656420696e20746865206f706572> 20.0195 <6174696f6e2c207468656e2069742077696c6c206265206170706c69656420746f>] TJ
ET
@@ -209509,7 +209536,7 @@ ET
0.0312 Tw
BT
-66.24 242.616 Td
+66.24 201.006 Td
/F1.0 10.5 Tf
<74686520726573756c74206f662074686520> Tj
ET
@@ -209524,7 +209551,7 @@ ET
0.0312 Tw
BT
-148.0233 242.616 Td
+148.0233 201.006 Td
/F4.0 10.5 Tf
<617070656e64> Tj
ET
@@ -209539,7 +209566,7 @@ ET
0.0312 Tw
BT
-179.5233 242.616 Td
+179.5233 201.006 Td
/F1.0 10.5 Tf
<206f7220> Tj
ET
@@ -209554,7 +209581,7 @@ ET
0.0312 Tw
BT
-196.0286 242.616 Td
+196.0286 201.006 Td
/F4.0 10.5 Tf
<696e6372656d656e74> Tj
ET
@@ -209569,7 +209596,7 @@ ET
0.0312 Tw
BT
-243.2786 242.616 Td
+243.2786 201.006 Td
/F1.0 10.5 Tf
[<2e204f74686572776973652c207468652041> 20.0195 <434c206f6620746865206578697374696e672063656c6c20796f752061726520617070656e64696e6720746f>] TJ
ET
@@ -209582,7 +209609,7 @@ ET
0.2 0.2 0.2 SCN
BT
-66.24 226.836 Td
+66.24 185.226 Td
/F1.0 10.5 Tf
<6f7220696e6372656d656e74696e67206973207072657365727665642e> Tj
ET
@@ -209595,7 +209622,7 @@ ET
0.9816 Tw
BT
-48.24 193.056 Td
+48.24 151.446 Td
/F1.0 10.5 Tf
<54686520636f6d62696e6174696f6e206f6620616363657373206c6576656c7320616e642073636f70657320637265617465732061206d6174726978206f6620706f737369626c6520616363657373206c6576656c7320746861742063616e206265> Tj
ET
@@ -209610,7 +209637,7 @@ ET
0.0739 Tw
BT
-48.24 177.276 Td
+48.24 135.666 Td
/F1.0 10.5 Tf
[<6772> 20.0195 <616e74656420746f206120757365722e20496e20612070726f64756374696f6e20656e7669726f6e6d656e742c2069742069732075736566756c20746f207468696e6b206f6620616363657373206c6576656c7320696e207465726d73206f662077686174>] TJ
ET
@@ -209625,7 +209652,7 @@ ET
2.6948 Tw
BT
-48.24 161.496 Td
+48.24 119.886 Td
/F1.0 10.5 Tf
<6973206e656564656420746f20646f2061207370656369666963206a6f622e2054686520666f6c6c6f77696e67206c6973742064657363726962657320617070726f70726961746520616363657373206c6576656c7320666f7220736f6d65> Tj
ET
@@ -209640,7 +209667,7 @@ ET
0.4572 Tw
BT
-48.24 145.716 Td
+48.24 104.106 Td
/F1.0 10.5 Tf
[<636f6d6d6f6e207479706573206f662048426173652075736572732e20497420697320696d706f7274616e74206e6f7420746f206772> 20.0195 <616e74206d6f726520616363657373207468616e20697320726571756972656420666f72206120676976656e>] TJ
ET
@@ -209653,7 +209680,7 @@ ET
0.2 0.2 0.2 SCN
BT
-48.24 129.936 Td
+48.24 88.326 Td
/F1.0 10.5 Tf
<7573657220746f20706572666f726d207468656972207265717569726564207461736b732e> Tj
ET
@@ -209666,7 +209693,7 @@ ET
0.2 0.2 0.2 SCN
BT
-56.8805 102.156 Td
+56.8805 60.546 Td
/F1.0 10.5 Tf
<a5> Tj
ET
@@ -209681,7 +209708,7 @@ ET
1.5298 Tw
BT
-66.24 102.156 Td
+66.24 60.546 Td
/F3.0 10.5 Tf
<53757065727573657273> Tj
ET
@@ -209696,7 +209723,7 @@ ET
1.5298 Tw
BT
-120.462 102.156 Td
+120.462 60.546 Td
/F1.0 10.5 Tf
<202d20496e20612070726f64756374696f6e2073797374656d2c206f6e6c792074686520484261736520757365722073686f756c64206861766520737570657275736572206163636573732e20496e2061> Tj
ET
@@ -209705,47 +209732,6 @@ ET
0.0 Tw
0.0 0.0 0.0 SCN
0.0 0.0 0.0 scn
-0.2 0.2 0.2 scn
-0.2 0.2 0.2 SCN
-
-2.0518 Tw
-
-BT
-66.24 86.376 Td
-/F1.0 10.5 Tf
-[<646576656c6f706d656e7420656e7669726f6e6d656e742c20616e2061646d696e69737472> 20.0195 <61746f72206d61> 20.0195 <79206e656564207375706572757365722061636365737320696e206f7264657220746f20717569636b6c79>] TJ
-ET
-
-
-0.0 Tw
-0.0 0.0 0.0 SCN
-0.0 0.0 0.0 scn
-0.2 0.2 0.2 scn
-0.2 0.2 0.2 SCN
-
-0.4916 Tw
-
-BT
-66.24 70.596 Td
-/F1.0 10.5 Tf
-[<636f6e74726f6c20616e64206d616e6167652074686520636c75737465722e20486f77657665722c20746869732074797065206f662061646d696e69737472> 20.0195 <61746f722073686f756c6420757375616c6c79206265206120476c6f62616c>] TJ
-ET
-
-
-0.0 Tw
-0.0 0.0 0.0 SCN
-0.0 0.0 0.0 scn
-0.2 0.2 0.2 scn
-0.2 0.2 0.2 SCN
-
-BT
-66.24 54.816 Td
-/F1.0 10.5 Tf
-[<41> 20.0195 <646d696e2072> 20.0195 <6174686572207468616e2061207375706572757365722e>] TJ
-ET
-
-0.0 0.0 0.0 SCN
-0.0 0.0 0.0 scn
q
0.0 0.0 0.0 scn
0.0 0.0 0.0 SCN
@@ -209770,7 +209756,7 @@ Q
endstream
endobj
-1365 0 obj
+1364 0 obj
<< /Type /Page
/Parent 3 0 R
/MediaBox [0 0 595.28 841.89]
@@ -209778,9 +209764,10 @@ endobj
/BleedBox [0 0 595.28 841.89]
/TrimBox [0 0 595.28 841.89]
/ArtBox [0 0 595.28 841.89]
-/Contents 1364 0 R
+/Contents 1363 0 R
/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/Font << /F1.0 10 0 R
+/Font << /F2.0 29 0 R
+/F1.0 10 0 R
/F3.0 33 0 R
/F4.0 35 0 R
>>
@@ -209789,20 +209776,64 @@ endobj
>>
>>
endobj
+1365 0 obj
+[1364 0 R /XYZ 0 841.89 null]
+endobj
1366 0 obj
-<< /Length 22050
+<< /Length 20734
>>
stream
q
-
--0.5 Tc
/DeviceRGB cs
0.2 0.2 0.2 scn
/DeviceRGB CS
0.2 0.2 0.2 SCN
+2.0518 Tw
+
BT
-56.8805 793.926 Td
+66.24 794.676 Td
+/F1.0 10.5 Tf
+[<646576656c6f706d656e7420656e7669726f6e6d656e742c20616e2061646d696e69737472> 20.0195 <61746f72206d61> 20.0195 <79206e656564207375706572757365722061636365737320696e206f7264657220746f20717569636b6c79>] TJ
+ET
+
+
+0.0 Tw
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+0.4916 Tw
+
+BT
+66.24 778.896 Td
+/F1.0 10.5 Tf
+[<636f6e74726f6c20616e64206d616e6167652074686520636c75737465722e20486f77657665722c20746869732074797065206f662061646d696e69737472> 20.0195 <61746f722073686f756c6420757375616c6c79206265206120476c6f62616c>] TJ
+ET
+
+
+0.0 Tw
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+BT
+66.24 763.116 Td
+/F1.0 10.5 Tf
+[<41> 20.0195 <646d696e2072> 20.0195 <6174686572207468616e2061207375706572757365722e>] TJ
+ET
+
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+
+-0.5 Tc
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+BT
+56.8805 741.336 Td
/F1.0 10.5 Tf
<a5> Tj
ET
@@ -209817,7 +209848,7 @@ ET
0.5482 Tw
BT
-66.24 793.926 Td
+66.24 741.336 Td
/F3.0 10.5 Tf
[<476c6f62616c2041> 20.0195 <646d696e73>] TJ
ET
@@ -209832,7 +209863,7 @@ ET
0.5482 Tw
BT
-138.398 793.926 Td
+138.398 741.336 Td
/F1.0 10.5 Tf
<202d204120676c6f62616c2061646d696e2063616e20706572666f726d207461736b7320616e6420616363657373206576657279207461626c6520696e2048426173652e20496e2061207479706963616c> Tj
ET
@@ -209847,7 +209878,7 @@ ET
0.9535 Tw
BT
-66.24 778.146 Td
+66.24 725.556 Td
/F1.0 10.5 Tf
<70726f64756374696f6e20656e7669726f6e6d656e742c20616e2061646d696e2073686f756c64206e6f7420686176652052656164206f72205772697465207065726d697373696f6e7320746f20646174612077697468696e> Tj
ET
@@ -209860,7 +209891,7 @@ ET
0.2 0.2 0.2 SCN
BT
-66.24 762.366 Td
+66.24 709.776 Td
/F1.0 10.5 Tf
<7461626c65732e> Tj
ET
@@ -209873,7 +209904,7 @@ ET
0.2 0.2 0.2 SCN
BT
-56.8805 740.586 Td
+56.8805 687.996 Td
/F1.0 10.5 Tf
<a5> Tj
ET
@@ -209888,7 +209919,7 @@ ET
1.7102 Tw
BT
-66.24 740.586 Td
+66.24 687.996 Td
/F1.0 10.5 Tf
[<4120676c6f62616c2061646d696e20776974682041> 20.0195 <646d696e207065726d697373696f6e732063616e20706572666f726d20636c75737465722d77696465206f706572> 20.0195 <6174696f6e73206f6e2074686520636c75737465722c>] TJ
ET
@@ -209903,7 +209934,7 @@ ET
1.6174 Tw
BT
-66.24 724.806 Td
+66.24 672.216 Td
/F1.0 10.5 Tf
<737563682061732062616c616e63696e672c2061737369676e696e67206f7220756e61737369676e696e6720726567696f6e732c206f722063616c6c696e6720616e206578706c69636974206d616a6f7220636f6d70616374696f6e2e> Tj
ET
@@ -209916,7 +209947,7 @@ ET
0.2 0.2 0.2 SCN
BT
-66.24 709.026 Td
+66.24 656.436 Td
/F1.0 10.5 Tf
[<5468697320697320616e206f706572> 20.0195 <6174696f6e7320726f6c652e>] TJ
ET
@@ -209929,7 +209960,7 @@ ET
0.2 0.2 0.2 SCN
BT
-56.8805 687.246 Td
+56.8805 634.656 Td
/F1.0 10.5 Tf
<a5> Tj
ET
@@ -209944,7 +209975,7 @@ ET
0.106 Tw
BT
-66.24 687.246 Td
+66.24 634.656 Td
/F1.0 10.5 Tf
[<4120676c6f62616c2061646d696e207769746820437265617465207065726d697373696f6e732063616e20637265617465206f722064726f7020616e> 20.0195 <79207461626c652077697468696e2048426173652e2054686973206973206d6f7265>] TJ
ET
@@ -209957,7 +209988,7 @@ ET
0.2 0.2 0.2 SCN
BT
-66.24 671.466 Td
+66.24 618.876 Td
/F1.0 10.5 Tf
[<6f662061204442> 20.0195 <412d7479706520726f6c652e>] TJ
ET
@@ -209970,7 +210001,7 @@ ET
1.0858 Tw
BT
-66.24 643.686 Td
+66.24 591.096 Td
/F1.0 10.5 Tf
[<496e20612070726f64756374696f6e20656e7669726f6e6d656e742c206974206973206c696b> 20.0195 <656c79207468617420646966666572656e742075736572732077696c6c2068617665206f6e6c79206f6e65206f662041> 20.0195 <646d696e20616e64>] TJ
ET
@@ -209983,7 +210014,7 @@ ET
0.2 0.2 0.2 SCN
BT
-66.24 627.906 Td
+66.24 575.316 Td
/F1.0 10.5 Tf
<437265617465207065726d697373696f6e732e> Tj
ET
@@ -209993,15 +210024,15 @@ ET
q
0.5 w
0.9333 0.9333 0.9333 SCN
-126.24 612.09 m
-126.24 453.85 l
+126.24 559.5 m
+126.24 401.26 l
S
Q
0.749 0.4118 0.0 scn
0.749 0.4118 0.0 SCN
BT
-84.24 524.402 Td
+84.24 471.812 Td
/F5.1 24 Tf
<23> Tj
ET
@@ -210014,7 +210045,7 @@ ET
2.7536 Tw
BT
-138.24 596.126 Td
+138.24 543.536 Td
/F1.0 10.5 Tf
[<496e207468652063757272656e7420696d706c656d656e746174696f6e2c206120476c6f62616c2041> 20.0195 <646d696e207769746820>] TJ
ET
@@ -210029,7 +210060,7 @@ ET
2.7536 Tw
BT
-424.0918 596.126 Td
+424.0918 543.536 Td
/F4.0 10.5 Tf
<41646d696e> Tj
ET
@@ -210044,7 +210075,7 @@ ET
2.7536 Tw
BT
-450.3418 596.126 Td
+450.3418 543.536 Td
/F1.0 10.5 Tf
<207065726d697373696f6e2063616e> Tj
ET
@@ -210059,7 +210090,7 @@ ET
1.9106 Tw
BT
-138.24 580.346 Td
+138.24 527.756 Td
/F1.0 10.5 Tf
[<6772> 20.0195 <616e742068696d73656c6620>] TJ
ET
@@ -210074,7 +210105,7 @@ ET
1.9106 Tw
BT
-211.655 580.346 Td
+211.655 527.756 Td
/F4.0 10.5 Tf
<52656164> Tj
ET
@@ -210089,7 +210120,7 @@ ET
1.9106 Tw
BT
-232.655 580.346 Td
+232.655 527.756 Td
/F1.0 10.5 Tf
<20616e6420> Tj
ET
@@ -210104,7 +210135,7 @@ ET
1.9106 Tw
BT
-261.0252 580.346 Td
+261.0252 527.756 Td
/F4.0 10.5 Tf
<5772697465> Tj
ET
@@ -210119,7 +210150,7 @@ ET
1.9106 Tw
BT
-287.2752 580.346 Td
+287.2752 527.756 Td
/F1.0 10.5 Tf
<207065726d697373696f6e73206f6e2061207461626c6520616e64206761696e2061636365737320746f2074686174> Tj
ET
@@ -210134,7 +210165,7 @@ ET
2.0881 Tw
BT
-138.24 564.566 Td
+138.24 511.976 Td
/F1.0 10.5 Tf
[<7461626c65d57320646174612e2046> 40.0391 <6f72207468697320726561736f6e2c206f6e6c79206772> 20.0195 <616e7420>] TJ
ET
@@ -210149,7 +210180,7 @@ ET
2.0881 Tw
BT
-349.3426 564.566 Td
+349.3426 511.976 Td
/F4.0 10.5 Tf
<476c6f62616c2041646d696e> Tj
ET
@@ -210164,7 +210195,7 @@ ET
2.0881 Tw
BT
-414.4307 564.566 Td
+414.4307 511.976 Td
/F1.0 10.5 Tf
<207065726d697373696f6e7320746f2074727573746564> Tj
ET
@@ -210177,7 +210208,7 @@ ET
0.2 0.2 0.2 SCN
BT
-138.24 548.786 Td
+138.24 496.196 Td
/F1.0 10.5 Tf
<757365722077686f2061637475616c6c79206e656564207468656d2e> Tj
ET
@@ -210190,7 +210221,7 @@ ET
1.4591 Tw
BT
-138.24 521.006 Td
+138.24 468.416 Td
/F1.0 10.5 Tf
<416c736f2062652061776172652074686174206120> Tj
ET
@@ -210205,7 +210236,7 @@ ET
1.4591 Tw
BT
-249.8949 521.006 Td
+249.8949 468.416 Td
/F4.0 10.5 Tf
<476c6f62616c2041646d696e> Tj
ET
@@ -210220,7 +210251,7 @@ ET
1.4591 Tw
BT
-314.354 521.006 Td
+314.354 468.416 Td
/F1.0 10.5 Tf
<207769746820> Tj
ET
@@ -210235,7 +210266,7 @@ ET
1.4591 Tw
BT
-345.4541 521.006 Td
+345.4541 468.416 Td
/F4.0 10.5 Tf
<437265617465> Tj
ET
@@ -210250,7 +210281,7 @@ ET
1.4591 Tw
BT
-376.9541 521.006 Td
+376.9541 468.416 Td
/F1.0 10.5 Tf
<207065726d697373696f6e2063616e20706572666f726d206120> Tj
ET
@@ -210265,7 +210296,7 @@ ET
1.4591 Tw
BT
-519.29 521.006 Td
+519.29 468.416 Td
/F4.0 10.5 Tf
<507574> Tj
ET
@@ -210280,7 +210311,7 @@ ET
1.4591 Tw
BT
-535.04 521.006 Td
+535.04 468.416 Td
ET
@@ -210293,7 +210324,7 @@ ET
0.2411 Tw
BT
-138.24 505.226 Td
+138.24 452.636 Td
/F1.0 10.5 Tf
[<6f706572> 20.0195 <6174696f6e206f6e207468652041> 20.0195 <434c207461626c652c2073696d756c6174696e67206120>] TJ
ET
@@ -210308,7 +210339,7 @@ ET
0.2411 Tw
BT
-343.2701 505.226 Td
+343.2701 452.636 Td
/F4.0 10.5 Tf
<6772616e74> Tj
ET
@@ -210323,7 +210354,7 @@ ET
0.2411 Tw
BT
-369.5201 505.226 Td
+369.5201 452.636 Td
/F1.0 10.5 Tf
<206f7220> Tj
ET
@@ -210338,7 +210369,7 @@ ET
0.2411 Tw
BT
-386.4453 505.226 Td
+386.4453 452.636 Td
/F4.0 10.5 Tf
<7265766f6b65> Tj
ET
@@ -210353,7 +210384,7 @@ ET
0.2411 Tw
BT
-417.9453 505.226 Td
+417.9453 452.636 Td
/F1.0 10.5 Tf
<20616e642063697263756d76656e74696e6720746865> Tj
ET
@@ -210366,7 +210397,7 @@ ET
0.2 0.2 0.2 SCN
BT
-138.24 489.446 Td
+138.24 436.856 Td
/F1.0 10.5 Tf
<617574686f72697a6174696f6e20636865636b20666f7220> Tj
ET
@@ -210377,7 +210408,7 @@ ET
0.6941 0.1294 0.2745 SCN
BT
-258.423 489.446 Td
+258.423 436.856 Td
/F4.0 10.5 Tf
<476c6f62616c2041646d696e> Tj
ET
@@ -210388,7 +210419,7 @@ ET
0.2 0.2 0.2 SCN
BT
-321.423 489.446 Td
+321.423 436.856 Td
/F1.0 10.5 Tf
<207065726d697373696f6e732e> Tj
ET
@@ -210399,7 +210430,7 @@ ET
0.2 0.2 0.2 SCN
BT
-138.24 461.666 Td
+138.24 409.076 Td
/F1.0 10.5 Tf
[<44756520746f207468657365206973737565732c2062652063617574696f75732077697468206772> 20.0195 <616e74696e6720>] TJ
ET
@@ -210410,7 +210441,7 @@ ET
0.6941 0.1294 0.2745 SCN
BT
-367.9798 461.666 Td
+367.9798 409.076 Td
/F4.0 10.5 Tf
<476c6f62616c2041646d696e> Tj
ET
@@ -210421,7 +210452,7 @@ ET
0.2 0.2 0.2 SCN
BT
-430.9798 461.666 Td
+430.9798 409.076 Td
/F1.0 10.5 Tf
<2070726976696c656765732e> Tj
ET
@@ -210434,7 +210465,7 @@ ET
0.2 0.2 0.2 SCN
BT
-56.8805 429.886 Td
+56.8805 377.296 Td
/F1.0 10.5 Tf
<a5> Tj
ET
@@ -210449,7 +210480,7 @@ ET
2.0544 Tw
BT
-66.24 429.886 Td
+66.24 377.296 Td
/F3.0 10.5 Tf
[<4e616d6573706163652041> 20.0195 <646d696e73>] TJ
ET
@@ -210464,7 +210495,7 @@ ET
2.0544 Tw
BT
-163.9702 429.886 Td
+163.9702 377.296 Td
/F1.0 10.5 Tf
<202d2061206e616d6573706163652061646d696e207769746820> Tj
ET
@@ -210479,7 +210510,7 @@ ET
2.0544 Tw
BT
-312.9433 429.886 Td
+312.9433 377.296 Td
/F4.0 10.5 Tf
<437265617465> Tj
ET
@@ -210494,7 +210525,7 @@ ET
2.0544 Tw
BT
-344.4433 429.886 Td
+344.4433 377.296 Td
/F1.0 10.5 Tf
<207065726d697373696f6e732063616e20637265617465206f722064726f70207461626c6573> Tj
ET
@@ -210509,7 +210540,7 @@ ET
3.7096 Tw
BT
-66.24 414.106 Td
+66.24 361.516 Td
/F1.0 10.5 Tf
[<77697468696e2074686174206e616d6573706163652c20616e642074616b> 20.0195 <6520616e6420726573746f726520736e617073686f74732e2041206e616d6573706163652061646d696e207769746820>] TJ
ET
@@ -210524,7 +210555,7 @@ ET
3.7096 Tw
BT
-520.79 414.106 Td
+520.79 361.516 Td
/F4.0 10.5 Tf
<41646d696e> Tj
ET
@@ -210539,7 +210570,7 @@ ET
3.7096 Tw
BT
-547.04 414.106 Td
+547.04 361.516 Td
ET
@@ -210552,7 +210583,7 @@ ET
0.9422 Tw
BT
-66.24 398.326 Td
+66.24 345.736 Td
/F1.0 10.5 Tf
[<7065726d697373696f6e732063616e20706572666f726d206f706572> 20.0195 <6174696f6e7320737563682061732073706c697473206f72206d616a6f7220636f6d70616374696f6e73206f6e207461626c65732077697468696e2074686174>] TJ
ET
@@ -210565,7 +210596,7 @@ ET
0.2 0.2 0.2 SCN
BT
-66.24 382.546 Td
+66.24 329.956 Td
/F1.0 10.5 Tf
<6e616d6573706163652e> Tj
ET
@@ -210578,7 +210609,7 @@ ET
0.2 0.2 0.2 SCN
BT
-56.8805 360.766 Td
+56.8805 308.176 Td
/F1.0 10.5 Tf
<a5> Tj
ET
@@ -210593,7 +210624,7 @@ ET
0.4965 Tw
BT
-66.24 360.766 Td
+66.24 308.176 Td
/F3.0 10.5 Tf
[<54> 29.7852 <61626c652041> 20.0195 <646d696e73>] TJ
ET
@@ -210608,7 +210639,7 @@ ET
0.4965 Tw
BT
-132.9306 360.766 Td
+132.9306 308.176 Td
/F1.0 10.5 Tf
[<202d2041207461626c652061646d696e2063616e20706572666f726d2061646d696e69737472> 20.0195 <6174697665206f706572> 20.0195 <6174696f6e73206f6e6c79206f6e2074686174207461626c652e2041207461626c65>] TJ
ET
@@ -210623,7 +210654,7 @@ ET
0.1613 Tw
BT
-66.24 344.986 Td
+66.24 292.396 Td
/F1.0 10.5 Tf
<61646d696e207769746820> Tj
ET
@@ -210638,7 +210669,7 @@ ET
0.1613 Tw
BT
-127.1162 344.986 Td
+127.1162 292.396 Td
/F4.0 10.5 Tf
<437265617465> Tj
ET
@@ -210653,7 +210684,7 @@ ET
0.1613 Tw
BT
-158.6162 344.986 Td
+158.6162 292.396 Td
/F1.0 10.5 Tf
<207065726d697373696f6e732063616e2063726561746520736e617073686f74732066726f6d2074686174207461626c65206f7220726573746f72652074686174207461626c652066726f6d2061> Tj
ET
@@ -210668,7 +210699,7 @@ ET
0.4841 Tw
BT
-66.24 329.206 Td
+66.24 276.616 Td
/F1.0 10.5 Tf
<736e617073686f742e2041207461626c652061646d696e207769746820> Tj
ET
@@ -210683,7 +210714,7 @@ ET
0.4841 Tw
BT
-217.2986 329.206 Td
+217.2986 276.616 Td
/F4.0 10.5 Tf
<41646d696e> Tj
ET
@@ -210698,7 +210729,7 @@ ET
0.4841 Tw
BT
-243.5486 329.206 Td
+243.5486 276.616 Td
/F1.0 10.5 Tf
[<207065726d697373696f6e732063616e20706572666f726d206f706572> 20.0195 <6174696f6e7320737563682061732073706c697473206f72206d616a6f72>] TJ
ET
@@ -210711,7 +210742,7 @@ ET
0.2 0.2 0.2 SCN
BT
-66.24 313.426 Td
+66.24 260.836 Td
/F1.0 10.5 Tf
<636f6d70616374696f6e73206f6e2074686174207461626c652e> Tj
ET
@@ -210724,7 +210755,7 @@ ET
0.2 0.2 0.2 SCN
BT
-56.8805 291.646 Td
+56.8805 239.056 Td
/F1.0 10.5 Tf
<a5> Tj
ET
@@ -210739,7 +210770,7 @@ ET
1.0103 Tw
BT
-66.24 291.646 Td
+66.24 239.056 Td
/F3.0 10.5 Tf
<5573657273> Tj
ET
@@ -210754,7 +210785,7 @@ ET
1.0103 Tw
BT
-93.6975 291.646 Td
+93.6975 239.056 Td
/F1.0 10.5 Tf
<202d2055736572732063616e2072656164206f7220777269746520646174612c206f7220626f74682e2055736572732063616e20616c736f206578656375746520636f70726f636573736f7220656e64706f696e74732c206966> Tj
ET
@@ -210767,7 +210798,7 @@ ET
0.2 0.2 0.2 SCN
BT
-66.24 275.866 Td
+66.24 223.276 Td
/F1.0 10.5 Tf
<676976656e20> Tj
ET
@@ -210778,7 +210809,7 @@ ET
0.6941 0.1294 0.2745 SCN
BT
-96.4275 275.866 Td
+96.4275 223.276 Td
/F4.0 10.5 Tf
<45786563757461626c65> Tj
ET
@@ -210789,7 +210820,7 @@ ET
0.2 0.2 0.2 SCN
BT
-148.9275 275.866 Td
+148.9275 223.276 Td
/F1.0 10.5 Tf
<207065726d697373696f6e732e> Tj
ET
@@ -210800,7 +210831,7 @@ ET
0.2 0.2 0.2 SCN
BT
-48.24 248.6842 Td
+48.24 196.0942 Td
/F3.0 9.975 Tf
[<54> 29.7852 <61626c6520392e205265616c2d57> 60.0586 <6f726c64204578616d706c65206f662041> 20.0195 <6363657373204c6576656c73>] TJ
ET
@@ -210808,91 +210839,75 @@ ET
0.0 0.0 0.0 SCN
0.0 0.0 0.0 scn
1.0 1.0 1.0 scn
-48.24 220.779 124.7 20.28 re
+48.24 168.189 124.7 20.28 re
f
0.0 0.0 0.0 scn
1.0 1.0 1.0 scn
-172.94 220.779 124.7 20.28 re
+172.94 168.189 124.7 20.28 re
f
0.0 0.0 0.0 scn
1.0 1.0 1.0 scn
-297.64 220.779 124.7 20.28 re
+297.64 168.189 124.7 20.28 re
f
0.0 0.0 0.0 scn
1.0 1.0 1.0 scn
-422.34 220.779 124.7 20.28 re
+422.34 168.189 124.7 20.28 re
f
0.0 0.0 0.0 scn
1.0 1.0 1.0 scn
-48.24 171.939 124.7 48.84 re
+48.24 119.349 124.7 48.84 re
f
0.0 0.0 0.0 scn
1.0 1.0 1.0 scn
-172.94 171.939 124.7 48.84 re
+172.94 119.349 124.7 48.84 re
f
0.0 0.0 0.0 scn
1.0 1.0 1.0 scn
-297.64 171.939 124.7 48.84 re
+297.64 119.349 124.7 48.84 re
f
0.0 0.0 0.0 scn
1.0 1.0 1.0 scn
-422.34 171.939 124.7 48.84 re
+422.34 119.349 124.7 48.84 re
f
0.0 0.0 0.0 scn
0.9765 0.9765 0.9765 scn
-48.24 123.099 124.7 48.84 re
+48.24 70.509 124.7 48.84 re
f
0.0 0.0 0.0 scn
0.9765 0.9765 0.9765 scn
-172.94 123.099 124.7 48.84 re
+172.94 70.509 124.7 48.84 re
f
0.0 0.0 0.0 scn
0.9765 0.9765 0.9765 scn
-297.64 123.099 124.7 48.84 re
+297.64 70.509 124.7 48.84 re
f
0.0 0.0 0.0 scn
0.9765 0.9765 0.9765 scn
-422.34 123.099 124.7 48.84 re
-f
-0.0 0.0 0.0 scn
-1.0 1.0 1.0 scn
-48.24 74.259 124.7 48.84 re
-f
-0.0 0.0 0.0 scn
-1.0 1.0 1.0 scn
-172.94 74.259 124.7 48.84 re
-f
-0.0 0.0 0.0 scn
-1.0 1.0 1.0 scn
-297.64 74.259 124.7 48.84 re
-f
-0.0 0.0 0.0 scn
-1.0 1.0 1.0 scn
-422.34 74.259 124.7 48.84 re
+422.34 70.509 124.7 48.84 re
f
0.0 0.0 0.0 scn
0.5 w
0.8667 0.8667 0.8667 SCN
-48.24 241.059 m
-172.94 241.059 l
+48.24 188.469 m
+172.94 188.469 l
S
[] 0 d
1.25 w
0.8667 0.8667 0.8667 SCN
-48.24 220.779 m
-172.94 220.779 l
+48.24 168.189 m
+172.94 168.189 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-48.24 241.309 m
-48.24 220.154 l
+48.24 188.719 m
+48.24 167.564 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-172.94 241.309 m
-172.94 220.154 l
+172.94 188.719 m
+172.94 167.564 l
S
[] 0 d
1 w
@@ -210900,7 +210915,7 @@ S
0.2 0.2 0.2 scn
BT
-51.24 226.845 Td
+51.24 174.255 Td
/F2.0 10.5 Tf
<4a6f62205469746c65> Tj
ET
@@ -210908,26 +210923,26 @@ ET
0.0 0.0 0.0 scn
0.5 w
0.8667 0.8667 0.8667 SCN
-172.94 241.059 m
-297.64 241.059 l
+172.94 188.469 m
+297.64 188.469 l
S
[] 0 d
1.25 w
0.8667 0.8667 0.8667 SCN
-172.94 220.779 m
-297.64 220.779 l
+172.94 168.189 m
+297.64 168.189 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-172.94 241.309 m
-172.94 220.154 l
+172.94 188.719 m
+172.94 167.564 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-297.64 241.309 m
-297.64 220.154 l
+297.64 188.719 m
+297.64 167.564 l
S
[] 0 d
1 w
@@ -210935,7 +210950,7 @@ S
0.2 0.2 0.2 scn
BT
-175.94 226.845 Td
+175.94 174.255 Td
/F2.0 10.5 Tf
<53636f7065> Tj
ET
@@ -210943,26 +210958,26 @@ ET
0.0 0.0 0.0 scn
0.5 w
0.8667 0.8667 0.8667 SCN
-297.64 241.059 m
-422.34 241.059 l
+297.64 188.469 m
+422.34 188.469 l
S
[] 0 d
1.25 w
0.8667 0.8667 0.8667 SCN
-297.64 220.779 m
-422.34 220.779 l
+297.64 168.189 m
+422.34 168.189 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-297.64 241.309 m
-297.64 220.154 l
+297.64 188.719 m
+297.64 167.564 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-422.34 241.309 m
-422.34 220.154 l
+422.34 188.719 m
+422.34 167.564 l
S
[] 0 d
1 w
@@ -210970,7 +210985,7 @@ S
0.2 0.2 0.2 scn
BT
-300.64 226.845 Td
+300.64 174.255 Td
/F2.0 10.5 Tf
<5065726d697373696f6e73> Tj
ET
@@ -210978,26 +210993,26 @@ ET
0.0 0.0 0.0 scn
0.5 w
0.8667 0.8667 0.8667 SCN
-422.34 241.059 m
-547.04 241.059 l
+422.34 188.469 m
+547.04 188.469 l
S
[] 0 d
1.25 w
0.8667 0.8667 0.8667 SCN
-422.34 220.779 m
-547.04 220.779 l
+422.34 168.189 m
+547.04 168.189 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-422.34 241.309 m
-422.34 220.154 l
+422.34 188.719 m
+422.34 167.564 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-547.04 241.309 m
-547.04 220.154 l
+547.04 188.719 m
+547.04 167.564 l
S
[] 0 d
1 w
@@ -211005,7 +211020,7 @@ S
0.2 0.2 0.2 scn
BT
-425.34 226.845 Td
+425.34 174.255 Td
/F2.0 10.5 Tf
<4465736372697074696f6e> Tj
ET
@@ -211013,26 +211028,26 @@ ET
0.0 0.0 0.0 scn
1.25 w
0.8667 0.8667 0.8667 SCN
-48.24 220.779 m
-172.94 220.779 l
+48.24 168.189 m
+172.94 168.189 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-48.24 171.939 m
-172.94 171.939 l
+48.24 119.349 m
+172.94 119.349 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-48.24 221.404 m
-48.24 171.689 l
+48.24 168.814 m
+48.24 119.099 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-172.94 221.404 m
-172.94 171.689 l
+172.94 168.814 m
+172.94 119.099 l
S
[] 0 d
1 w
@@ -211040,7 +211055,7 @@ S
0.2 0.2 0.2 scn
BT
-51.24 206.565 Td
+51.24 153.975 Td
/F1.0 10.5 Tf
[<53656e696f722041> 20.0195 <646d696e69737472> 20.0195 <61746f72>] TJ
ET
@@ -211048,26 +211063,26 @@ ET
0.0 0.0 0.0 scn
1.25 w
0.8667 0.8667 0.8667 SCN
-172.94 220.779 m
-297.64 220.779 l
+172.94 168.189 m
+297.64 168.189 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-172.94 171.939 m
-297.64 171.939 l
+172.94 119.349 m
+297.64 119.349 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-172.94 221.404 m
-172.94 171.689 l
+172.94 168.814 m
+172.94 119.099 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-297.64 221.404 m
-297.64 171.689 l
+297.64 168.814 m
+297.64 119.099 l
S
[] 0 d
1 w
@@ -211075,7 +211090,7 @@ S
0.2 0.2 0.2 scn
BT
-175.94 206.565 Td
+175.94 153.975 Td
/F1.0 10.5 Tf
<476c6f62616c> Tj
ET
@@ -211083,26 +211098,26 @@ ET
0.0 0.0 0.0 scn
1.25 w
0.8667 0.8667 0.8667 SCN
-297.64 220.779 m
-422.34 220.779 l
+297.64 168.189 m
+422.34 168.189 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-297.64 171.939 m
-422.34 171.939 l
+297.64 119.349 m
+422.34 119.349 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-297.64 221.404 m
-297.64 171.689 l
+297.64 168.814 m
+297.64 119.099 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-422.34 221.404 m
-422.34 171.689 l
+422.34 168.814 m
+422.34 119.099 l
S
[] 0 d
1 w
@@ -211110,7 +211125,7 @@ S
0.2 0.2 0.2 scn
BT
-300.64 206.565 Td
+300.64 153.975 Td
/F1.0 10.5 Tf
[<41> 20.0195 <63636573732c20437265617465>] TJ
ET
@@ -211118,26 +211133,26 @@ ET
0.0 0.0 0.0 scn
1.25 w
0.8667 0.8667 0.8667 SCN
-422.34 220.779 m
-547.04 220.779 l
+422.34 168.189 m
+547.04 168.189 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-422.34 171.939 m
-547.04 171.939 l
+422.34 119.349 m
+547.04 119.349 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-422.34 221.404 m
-422.34 171.689 l
+422.34 168.814 m
+422.34 119.099 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-547.04 221.404 m
-547.04 171.689 l
+547.04 168.814 m
+547.04 119.099 l
S
[] 0 d
1 w
@@ -211145,21 +211160,21 @@ S
0.2 0.2 0.2 scn
BT
-425.34 206.565 Td
+425.34 153.975 Td
/F1.0 10.5 Tf
<4d616e616765732074686520636c7573746572> Tj
ET
BT
-425.34 192.285 Td
+425.34 139.695 Td
/F1.0 10.5 Tf
<616e642067697665732061636365737320746f> Tj
ET
BT
-425.34 178.005 Td
+425.34 125.415 Td
/F1.0 10.5 Tf
[<4a756e696f722041> 20.0195 <646d696e69737472> 20.0195 <61746f72732e>] TJ
ET
@@ -211167,26 +211182,26 @@ ET
0.0 0.0 0.0 scn
0.5 w
0.8667 0.8667 0.8667 SCN
-48.24 171.939 m
-172.94 171.939 l
+48.24 119.349 m
+172.94 119.349 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-48.24 123.099 m
-172.94 123.099 l
+48.24 70.509 m
+172.94 70.509 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-48.24 172.189 m
-48.24 122.849 l
+48.24 119.599 m
+48.24 70.259 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-172.94 172.189 m
-172.94 122.849 l
+172.94 119.599 m
+172.94 70.259 l
S
[] 0 d
1 w
@@ -211194,7 +211209,7 @@ S
0.2 0.2 0.2 scn
BT
-51.24 157.725 Td
+51.24 105.135 Td
/F1.0 10.5 Tf
[<4a756e696f722041> 20.0195 <646d696e69737472> 20.0195 <61746f72>] TJ
ET
@@ -211202,26 +211217,26 @@ ET
0.0 0.0 0.0 scn
0.5 w
0.8667 0.8667 0.8667 SCN
-172.94 171.939 m
-297.64 171.939 l
+172.94 119.349 m
+297.64 119.349 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-172.94 123.099 m
-297.64 123.099 l
+172.94 70.509 m
+297.64 70.509 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-172.94 172.189 m
-172.94 122.849 l
+172.94 119.599 m
+172.94 70.259 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-297.64 172.189 m
-297.64 122.849 l
+297.64 119.599 m
+297.64 70.259 l
S
[] 0 d
1 w
@@ -211229,7 +211244,7 @@ S
0.2 0.2 0.2 scn
BT
-175.94 157.725 Td
+175.94 105.135 Td
/F1.0 10.5 Tf
<476c6f62616c> Tj
ET
@@ -211237,26 +211252,26 @@ ET
0.0 0.0 0.0 scn
0.5 w
0.8667 0.8667 0.8667 SCN
-297.64 171.939 m
-422.34 171.939 l
+297.64 119.349 m
+422.34 119.349 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-297.64 123.099 m
-422.34 123.099 l
+297.64 70.509 m
+422.34 70.509 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-297.64 172.189 m
-297.64 122.849 l
+297.64 119.599 m
+297.64 70.259 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-422.34 172.189 m
-422.34 122.849 l
+422.34 119.599 m
+422.34 70.259 l
S
[] 0 d
1 w
@@ -211264,7 +211279,7 @@ S
0.2 0.2 0.2 scn
BT
-300.64 157.725 Td
+300.64 105.135 Td
/F1.0 10.5 Tf
<437265617465> Tj
ET
@@ -211272,26 +211287,26 @@ ET
0.0 0.0 0.0 scn
0.5 w
0.8667 0.8667 0.8667 SCN
-422.34 171.939 m
-547.04 171.939 l
+422.34 119.349 m
+547.04 119.349 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-422.34 123.099 m
-547.04 123.099 l
+422.34 70.509 m
+547.04 70.509 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-422.34 172.189 m
-422.34 122.849 l
+422.34 119.599 m
+422.34 70.259 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-547.04 172.189 m
-547.04 122.849 l
+547.04 119.599 m
+547.04 70.259 l
S
[] 0 d
1 w
@@ -211299,180 +211314,26 @@ S
0.2 0.2 0.2 scn
BT
-425.34 157.725 Td
+425.34 105.135 Td
/F1.0 10.5 Tf
<43726561746573207461626c657320616e64206769766573> Tj
ET
BT
-425.34 143.445 Td
+425.34 90.855 Td
/F1.0 10.5 Tf
[<61636365737320746f2054> 29.7852 <61626c65>] TJ
ET
BT
-425.34 129.165 Td
+425.34 76.575 Td
/F1.0 10.5 Tf
[<41> 20.0195 <646d696e69737472> 20.0195 <61746f72732e>] TJ
ET
0.0 0.0 0.0 scn
-0.5 w
-0.8667 0.8667 0.8667 SCN
-48.24 123.099 m
-172.94 123.099 l
-S
-[] 0 d
-0.5 w
-0.8667 0.8667 0.8667 SCN
-48.24 74.259 m
-172.94 74.259 l
-S
-[] 0 d
-0.5 w
-0.8667 0.8667 0.8667 SCN
-48.24 123.349 m
-48.24 74.009 l
-S
-[] 0 d
-0.5 w
-0.8667 0.8667 0.8667 SCN
-172.94 123.349 m
-172.94 74.009 l
-S
-[] 0 d
-1 w
-0.0 0.0 0.0 SCN
-0.2 0.2 0.2 scn
-
-BT
-51.24 108.885 Td
-/F1.0 10.5 Tf
-[<54> 29.7852 <61626c652041> 20.0195 <646d696e69737472> 20.0195 <61746f72>] TJ
-ET
-
-0.0 0.0 0.0 scn
-0.5 w
-0.8667 0.8667 0.8667 SCN
-172.94 123.099 m
-297.64 123.099 l
-S
-[] 0 d
-0.5 w
-0.8667 0.8667 0.8667 SCN
-172.94 74.259 m
-297.64 74.259 l
-S
-[] 0 d
-0.5 w
-0.8667 0.8667 0.8667 SCN
-172.94 123.349 m
-172.94 74.009 l
-S
-[] 0 d
-0.5 w
-0.8667 0.8667 0.8667 SCN
-297.64 123.349 m
-297.64 74.009 l
-S
-[] 0 d
-1 w
-0.0 0.0 0.0 SCN
-0.2 0.2 0.2 scn
-
-BT
-175.94 108.885 Td
-/F1.0 10.5 Tf
-[<54> 29.7852 <61626c65>] TJ
-ET
-
-0.0 0.0 0.0 scn
-0.5 w
-0.8667 0.8667 0.8667 SCN
-297.64 123.099 m
-422.34 123.099 l
-S
-[] 0 d
-0.5 w
-0.8667 0.8667 0.8667 SCN
-297.64 74.259 m
-422.34 74.259 l
-S
-[] 0 d
-0.5 w
-0.8667 0.8667 0.8667 SCN
-297.64 123.349 m
-297.64 74.009 l
-S
-[] 0 d
-0.5 w
-0.8667 0.8667 0.8667 SCN
-422.34 123.349 m
-422.34 74.009 l
-S
-[] 0 d
-1 w
-0.0 0.0 0.0 SCN
-0.2 0.2 0.2 scn
-
-BT
-300.64 108.885 Td
-/F1.0 10.5 Tf
-[<41> 20.0195 <6363657373>] TJ
-ET
-
-0.0 0.0 0.0 scn
-0.5 w
-0.8667 0.8667 0.8667 SCN
-422.34 123.099 m
-547.04 123.099 l
-S
-[] 0 d
-0.5 w
-0.8667 0.8667 0.8667 SCN
-422.34 74.259 m
-547.04 74.259 l
-S
-[] 0 d
-0.5 w
-0.8667 0.8667 0.8667 SCN
-422.34 123.349 m
-422.34 74.009 l
-S
-[] 0 d
-0.5 w
-0.8667 0.8667 0.8667 SCN
-547.04 123.349 m
-547.04 74.009 l
-S
-[] 0 d
-1 w
-0.0 0.0 0.0 SCN
-0.2 0.2 0.2 scn
-
-BT
-425.34 108.885 Td
-/F1.0 10.5 Tf
-<4d61696e7461696e732061207461626c652066726f6d> Tj
-ET
-
-
-BT
-425.34 94.605 Td
-/F1.0 10.5 Tf
-[<616e206f706572> 20.0195 <6174696f6e7320706f696e74206f66>] TJ
-ET
-
-
-BT
-425.34 80.325 Td
-/F1.0 10.5 Tf
-[<76696577> 69.8242 <2e>] TJ
-ET
-
-0.0 0.0 0.0 scn
q
0.0 0.0 0.0 scn
0.0 0.0 0.0 SCN
@@ -211519,7 +211380,7 @@ endobj
>>
endobj
1368 0 obj
-<< /Length 13110
+<< /Length 15253
>>
stream
q
@@ -211541,35 +211402,51 @@ f
f
0.0 0.0 0.0 scn
1.0 1.0 1.0 scn
-48.24 751.05 124.7 34.56 re
+48.24 736.77 124.7 48.84 re
f
0.0 0.0 0.0 scn
1.0 1.0 1.0 scn
-172.94 751.05 124.7 34.56 re
+172.94 736.77 124.7 48.84 re
f
0.0 0.0 0.0 scn
1.0 1.0 1.0 scn
-297.64 751.05 124.7 34.56 re
+297.64 736.77 124.7 48.84 re
f
0.0 0.0 0.0 scn
1.0 1.0 1.0 scn
-422.34 751.05 124.7 34.56 re
+422.34 736.77 124.7 48.84 re
f
0.0 0.0 0.0 scn
0.9765 0.9765 0.9765 scn
-48.24 702.21 124.7 48.84 re
+48.24 702.21 124.7 34.56 re
f
0.0 0.0 0.0 scn
0.9765 0.9765 0.9765 scn
-172.94 702.21 124.7 48.84 re
+172.94 702.21 124.7 34.56 re
f
0.0 0.0 0.0 scn
0.9765 0.9765 0.9765 scn
-297.64 702.21 124.7 48.84 re
+297.64 702.21 124.7 34.56 re
f
0.0 0.0 0.0 scn
0.9765 0.9765 0.9765 scn
-422.34 702.21 124.7 48.84 re
+422.34 702.21 124.7 34.56 re
+f
+0.0 0.0 0.0 scn
+1.0 1.0 1.0 scn
+48.24 653.37 124.7 48.84 re
+f
+0.0 0.0 0.0 scn
+1.0 1.0 1.0 scn
+172.94 653.37 124.7 48.84 re
+f
+0.0 0.0 0.0 scn
+1.0 1.0 1.0 scn
+297.64 653.37 124.7 48.84 re
+f
+0.0 0.0 0.0 scn
+1.0 1.0 1.0 scn
+422.34 653.37 124.7 48.84 re
f
0.0 0.0 0.0 scn
0.5 w
@@ -211721,20 +211598,20 @@ S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-48.24 751.05 m
-172.94 751.05 l
+48.24 736.77 m
+172.94 736.77 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
48.24 785.86 m
-48.24 750.8 l
+48.24 736.52 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
172.94 785.86 m
-172.94 750.8 l
+172.94 736.52 l
S
[] 0 d
1 w
@@ -211744,7 +211621,7 @@ S
BT
51.24 771.396 Td
/F1.0 10.5 Tf
-<4461746120416e616c797374> Tj
+[<54> 29.7852 <61626c652041> 20.0195 <646d696e69737472> 20.0195 <61746f72>] TJ
ET
0.0 0.0 0.0 scn
@@ -211756,20 +211633,20 @@ S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-172.94 751.05 m
-297.64 751.05 l
+172.94 736.77 m
+297.64 736.77 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
172.94 785.86 m
-172.94 750.8 l
+172.94 736.52 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
297.64 785.86 m
-297.64 750.8 l
+297.64 736.52 l
S
[] 0 d
1 w
@@ -211791,20 +211668,20 @@ S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-297.64 751.05 m
-422.34 751.05 l
+297.64 736.77 m
+422.34 736.77 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
297.64 785.86 m
-297.64 750.8 l
+297.64 736.52 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
422.34 785.86 m
-422.34 750.8 l
+422.34 736.52 l
S
[] 0 d
1 w
@@ -211814,7 +211691,7 @@ S
BT
300.64 771.396 Td
/F1.0 10.5 Tf
-<52656164> Tj
+[<41> 20.0195 <6363657373>] TJ
ET
0.0 0.0 0.0 scn
@@ -211826,20 +211703,20 @@ S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-422.34 751.05 m
-547.04 751.05 l
+422.34 736.77 m
+547.04 736.77 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
422.34 785.86 m
-422.34 750.8 l
+422.34 736.52 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
547.04 785.86 m
-547.04 750.8 l
+547.04 736.52 l
S
[] 0 d
1 w
@@ -211849,21 +211726,28 @@ S
BT
425.34 771.396 Td
/F1.0 10.5 Tf
-<43726561746573207265706f7274732066726f6d> Tj
+<4d61696e7461696e732061207461626c652066726f6d> Tj
ET
BT
425.34 757.116 Td
/F1.0 10.5 Tf
-<484261736520646174612e> Tj
+[<616e206f706572> 20.0195 <6174696f6e7320706f696e74206f66>] TJ
+ET
+
+
+BT
+425.34 742.836 Td
+/F1.0 10.5 Tf
+[<76696577> 69.8242 <2e>] TJ
ET
0.0 0.0 0.0 scn
0.5 w
0.8667 0.8667 0.8667 SCN
-48.24 751.05 m
-172.94 751.05 l
+48.24 736.77 m
+172.94 736.77 l
S
[] 0 d
0.5 w
@@ -211874,13 +211758,13 @@ S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-48.24 751.3 m
+48.24 737.02 m
48.24 701.96 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-172.94 751.3 m
+172.94 737.02 m
172.94 701.96 l
S
[] 0 d
@@ -211889,16 +211773,16 @@ S
0.2 0.2 0.2 scn
BT
-51.24 736.836 Td
+51.24 722.556 Td
/F1.0 10.5 Tf
-[<57> 60.0586 <6562204170706c69636174696f6e>] TJ
+<4461746120416e616c797374> Tj
ET
0.0 0.0 0.0 scn
0.5 w
0.8667 0.8667 0.8667 SCN
-172.94 751.05 m
-297.64 751.05 l
+172.94 736.77 m
+297.64 736.77 l
S
[] 0 d
0.5 w
@@ -211909,13 +211793,13 @@ S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-172.94 751.3 m
+172.94 737.02 m
172.94 701.96 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-297.64 751.3 m
+297.64 737.02 m
297.64 701.96 l
S
[] 0 d
@@ -211924,7 +211808,7 @@ S
0.2 0.2 0.2 scn
BT
-175.94 736.836 Td
+175.94 722.556 Td
/F1.0 10.5 Tf
[<54> 29.7852 <61626c65>] TJ
ET
@@ -211932,8 +211816,8 @@ ET
0.0 0.0 0.0 scn
0.5 w
0.8667 0.8667 0.8667 SCN
-297.64 751.05 m
-422.34 751.05 l
+297.64 736.77 m
+422.34 736.77 l
S
[] 0 d
0.5 w
@@ -211944,13 +211828,13 @@ S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-297.64 751.3 m
+297.64 737.02 m
297.64 701.96 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-422.34 751.3 m
+422.34 737.02 m
422.34 701.96 l
S
[] 0 d
@@ -211959,16 +211843,16 @@ S
0.2 0.2 0.2 scn
BT
-300.64 736.836 Td
+300.64 722.556 Td
/F1.0 10.5 Tf
-<526561642c205772697465> Tj
+<52656164> Tj
ET
0.0 0.0 0.0 scn
0.5 w
0.8667 0.8667 0.8667 SCN
-422.34 751.05 m
-547.04 751.05 l
+422.34 736.77 m
+547.04 736.77 l
S
[] 0 d
0.5 w
@@ -211979,13 +211863,13 @@ S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-422.34 751.3 m
+422.34 737.02 m
422.34 701.96 l
S
[] 0 d
0.5 w
0.8667 0.8667 0.8667 SCN
-547.04 751.3 m
+547.04 737.02 m
547.04 701.96 l
S
[] 0 d
@@ -211994,21 +211878,168 @@ S
0.2 0.2 0.2 scn
BT
-425.34 736.836 Td
+425.34 722.556 Td
+/F1.0 10.5 Tf
+<43726561746573207265706f7274732066726f6d> Tj
+ET
+
+
+BT
+425.34 708.276 Td
+/F1.0 10.5 Tf
+<484261736520646174612e> Tj
+ET
+
+0.0 0.0 0.0 scn
+0.5 w
+0.8667 0.8667 0.8667 SCN
+48.24 702.21 m
+172.94 702.21 l
+S
+[] 0 d
+0.5 w
+0.8667 0.8667 0.8667 SCN
+48.24 653.37 m
+172.94 653.37 l
+S
+[] 0 d
+0.5 w
+0.8667 0.8667 0.8667 SCN
+48.24 702.46 m
+48.24 653.12 l
+S
+[] 0 d
+0.5 w
+0.8667 0.8667 0.8667 SCN
+172.94 702.46 m
+172.94 653.12 l
+S
+[] 0 d
+1 w
+0.0 0.0 0.0 SCN
+0.2 0.2 0.2 scn
+
+BT
+51.24 687.996 Td
+/F1.0 10.5 Tf
+[<57> 60.0586 <6562204170706c69636174696f6e>] TJ
+ET
+
+0.0 0.0 0.0 scn
+0.5 w
+0.8667 0.8667 0.8667 SCN
+172.94 702.21 m
+297.64 702.21 l
+S
+[] 0 d
+0.5 w
+0.8667 0.8667 0.8667 SCN
+172.94 653.37 m
+297.64 653.37 l
+S
+[] 0 d
+0.5 w
+0.8667 0.8667 0.8667 SCN
+172.94 702.46 m
+172.94 653.12 l
+S
+[] 0 d
+0.5 w
+0.8667 0.8667 0.8667 SCN
+297.64 702.46 m
+297.64 653.12 l
+S
+[] 0 d
+1 w
+0.0 0.0 0.0 SCN
+0.2 0.2 0.2 scn
+
+BT
+175.94 687.996 Td
+/F1.0 10.5 Tf
+[<54> 29.7852 <61626c65>] TJ
+ET
+
+0.0 0.0 0.0 scn
+0.5 w
+0.8667 0.8667 0.8667 SCN
+297.64 702.21 m
+422.34 702.21 l
+S
+[] 0 d
+0.5 w
+0.8667 0.8667 0.8667 SCN
+297.64 653.37 m
+422.34 653.37 l
+S
+[] 0 d
+0.5 w
+0.8667 0.8667 0.8667 SCN
+297.64 702.46 m
+297.64 653.12 l
+S
+[] 0 d
+0.5 w
+0.8667 0.8667 0.8667 SCN
+422.34 702.46 m
+422.34 653.12 l
+S
+[] 0 d
+1 w
+0.0 0.0 0.0 SCN
+0.2 0.2 0.2 scn
+
+BT
+300.64 687.996 Td
+/F1.0 10.5 Tf
+<526561642c205772697465> Tj
+ET
+
+0.0 0.0 0.0 scn
+0.5 w
+0.8667 0.8667 0.8667 SCN
+422.34 702.21 m
+547.04 702.21 l
+S
+[] 0 d
+0.5 w
+0.8667 0.8667 0.8667 SCN
+422.34 653.37 m
+547.04 653.37 l
+S
+[] 0 d
+0.5 w
+0.8667 0.8667 0.8667 SCN
+422.34 702.46 m
+422.34 653.12 l
+S
+[] 0 d
+0.5 w
+0.8667 0.8667 0.8667 SCN
+547.04 702.46 m
+547.04 653.12 l
+S
+[] 0 d
+1 w
+0.0 0.0 0.0 SCN
+0.2 0.2 0.2 scn
+
+BT
+425.34 687.996 Td
/F1.0 10.5 Tf
<50757473206461746120696e746f204842617365> Tj
ET
BT
-425.34 722.556 Td
+425.34 673.716 Td
/F1.0 10.5 Tf
<616e642075736573204842617365206461746120746f> Tj
ET
BT
-425.34 708.276 Td
+425.34 659.436 Td
/F1.0 10.5 Tf
[<706572666f726d206f706572> 20.0195 <6174696f6e732e>] TJ
ET
@@ -212018,7 +212049,7 @@ ET
0.2 0.2 0.2 SCN
BT
-48.24 678.8442 Td
+48.24 630.0042 Td
/F3.0 9.975 Tf
[<41> 20.0195 <434c204d6174726978>] TJ
ET
@@ -212029,7 +212060,7 @@ ET
0.2 0.2 0.2 SCN
BT
-48.24 659.255 Td
+48.24 610.415 Td
/F1.0 10.5 Tf
[<46> 40.0391 <6f72206d6f72652064657461696c73206f6e20686f772041> 20.0195 <434c73206d617020746f207370656369666963204842617365206f706572> 20.0195 <6174696f6e7320616e64207461736b732c2073656520>] TJ
ET
@@ -212040,7 +212071,7 @@ ET
0.2588 0.5451 0.7922 SCN
BT
-439.4902 659.255 Td
+439.4902 610.415 Td
/F1.0 10.5 Tf
<617070656e6469782061636c206d6174726978> Tj
ET
@@ -212051,7 +212082,7 @@ ET
0.2 0.2 0.2 SCN
BT
-540.1432 659.255 Td
+540.1432 610.415 Td
/F1.0 10.5 Tf
<2e> Tj
ET
@@ -212062,7 +212093,7 @@ ET
0.2 0.2 0.2 SCN
BT
-48.24 627.425 Td
+48.24 578.585 Td
/F2.0 10.5 Tf
<496d706c656d656e746174696f6e2044657461696c73> Tj
ET
@@ -212075,7 +212106,7 @@ ET
0.8286 Tw
BT
-48.24 601.595 Td
+48.24 552.755 Td
/F1.0 10.5 Tf
[<43656c6c2d6c6576656c2041> 20.0195 <434c732061726520696d706c656d656e746564207573696e672074616773202873656520>] TJ
ET
@@ -212090,7 +212121,7 @@ ET
0.8286 Tw
BT
-293.4608 601.595 Td
+293.4608 552.755 Td
/F1.0 10.5 Tf
[<54> 29.7852 <616773>] TJ
ET
@@ -212105,7 +212136,7 @@ ET
0.8286 Tw
BT
-315.8596 601.595 Td
+315.8596 552.755 Td
/F1.0 10.5 Tf
[<292e20496e206f7264657220746f207573652063656c6c2d6c6576656c2041> 20.0195 <434c732c20796f75206d757374206265>] TJ
ET
@@ -212118,7 +212149,7 @@ ET
0.2 0.2 0.2 SCN
BT
-48.24 585.815 Td
+48.24 536.975 Td
/F1.0 10.5 Tf
<7573696e67204846696c6520763320616e6420484261736520302e3938206f72206e657765722e> Tj
ET
@@ -212131,7 +212162,7 @@ ET
0.2 0.2 0.2 SCN
BT
-52.6765 558.035 Td
+52.6765 509.195 Td
/F1.0 10.5 Tf
<312e> Tj
ET
@@ -212146,7 +212177,7 @@ ET
0.787 Tw
BT
-66.24 558.035 Td
+66.24 509.195 Td
/F1.0 10.5 Tf
[<46696c657320637265617465642062> 20.0195 <7920484261736520617265206f776e65642062> 20.0195 <7920746865206f706572> 20.0195 <6174696e672073797374656d20757365722072756e6e696e67207468652048426173652070726f636573732e2054> 29.7852 <6f>] TJ
ET
@@ -212159,7 +212190,7 @@ ET
0.2 0.2 0.2 SCN
BT
-66.24 542.255 Td
+66.24 493.415 Td
/F1.0 10.5 Tf
[<696e746572> 20.0195 <61637420776974682048426173652066696c65732c20796f752073686f756c64207573652074686520415049206f722062756c6b206c6f616420666163696c697479> 89.8438 <2e>] TJ
ET
@@ -212172,7 +212203,7 @@ ET
0.2 0.2 0.2 SCN
BT
-52.6765 520.475 Td
+52.6765 471.635 Td
/F1.0 10.5 Tf
<322e> Tj
ET
@@ -212187,7 +212218,7 @@ ET
3.5001 Tw
BT
-66.24 520.475 Td
+66.24 471.635 Td
/F1.0 10.5 Tf
[<484261736520646f6573206e6f74206d6f64656c2022726f6c65732220696e7465726e616c6c7920696e2048426173652e20496e73746561642c2067726f7570206e616d65732063616e206265206772> 20.0195 <616e746564>] TJ
ET
@@ -212202,7 +212233,7 @@ ET
0.5438 Tw
BT
-66.24 504.695 Td
+66.24 455.855 Td
/F1.0 10.5 Tf
<7065726d697373696f6e732e205468697320616c6c6f77732065787465726e616c206d6f64656c696e67206f6620726f6c6573207669612067726f7570206d656d626572736869702e2047726f757073206172652063726561746564> Tj
ET
@@ -212215,7 +212246,7 @@ ET
0.2 0.2 0.2 SCN
BT
-66.24 488.915 Td
+66.24 440.075 Td
/F1.0 10.5 Tf
<616e64206d616e6970756c617465642065787465726e616c6c7920746f2048426173652c2076696120746865204861646f6f702067726f7570206d617070696e6720736572766963652e> Tj
ET
@@ -212226,7 +212257,7 @@ ET
0.2 0.2 0.2 SCN
BT
-48.24 457.085 Td
+48.24 408.245 Td
/F2.0 10.5 Tf
[<5365727665722d5369646520436f6e6669677572> 20.0195 <6174696f6e>] TJ
ET
@@ -212239,7 +212270,7 @@ ET
0.2 0.2 0.2 SCN
BT
-52.6765 431.255 Td
+52.6765 382.415 Td
/F1.0 10.5 Tf
<312e> Tj
ET
@@ -212252,7 +212283,7 @@ ET
0.2 0.2 0.2 SCN
BT
-66.24 431.255 Td
+66.24 382.415 Td
/F1.0 10.5 Tf
<41732061207072657265717569736974652c20706572666f726d2074686520737465707320696e20> Tj
ET
@@ -212263,7 +212294,7 @@ ET
0.2588 0.5451 0.7922 SCN
BT
-260.448 431.255 Td
+260.448 382.415 Td
/F1.0 10.5 Tf
[<50726f6365647572653a204261736963205365727665722d5369646520436f6e6669677572> 20.0195 <6174696f6e>] TJ
ET
@@ -212274,7 +212305,7 @@ ET
0.2 0.2 0.2 SCN
BT
-475.9813 431.255 Td
+475.9813 382.415 Td
/F1.0 10.5 Tf
<2e> Tj
ET
@@ -212287,7 +212318,7 @@ ET
0.2 0.2 0.2 SCN
BT
-52.6765 409.475 Td
+52.6765 360.635 Td
/F1.0 10.5 Tf
<322e> Tj
ET
@@ -212302,7 +212333,7 @@ ET
1.7397 Tw
BT
-66.24 409.475 Td
+66.24 360.635 Td
/F1.0 10.5 Tf
[<496e7374616c6c20616e6420636f6e666967757265207468652041> 20.0195 <6363657373436f6e74726f6c6c657220636f70726f636573736f722c2062> 20.0195 <792073657474696e672074686520666f6c6c6f77696e672070726f7065727469657320696e>] TJ
ET
@@ -212315,7 +212346,7 @@ ET
0.2 0.2 0.2 SCN
BT
-66.24 393.695 Td
+66.24 344.855 Td
/F3.0 10.5 Tf
<68626173652d736974652e786d6c> Tj
ET
@@ -212326,7 +212357,7 @@ ET
0.2 0.2 0.2 SCN
BT
-135.834 393.695 Td
+135.834 344.855 Td
/F1.0 10.5 Tf
[<2e2054686573652070726f706572746965732074616b> 20.0195 <652061206c697374206f6620636c61737365732e>] TJ
ET
@@ -212336,15 +212367,15 @@ ET
q
0.5 w
0.9333 0.9333 0.9333 SCN
-126.24 377.879 m
-126.24 290.979 l
+126.24 329.039 m
+126.24 242.139 l
S
Q
0.098 0.251 0.4863 scn
0.098 0.251 0.4863 SCN
BT
-85.956 325.861 Td
+85.956 277.021 Td
/F5.1 24 Tf
<21> Tj
ET
@@ -212357,7 +212388,7 @@ ET
5.4244 Tw
BT
-138.24 361.915 Td
+138.24 313.075 Td
/F1.0 10.5 Tf
[<496620796f7520757365207468652041> 20.0195 <6363657373436f6e74726f6c6c657220616c6f6e67207769746820746865205669736962696c697479436f6e74726f6c6c65722c20746865>] TJ
ET
@@ -212372,7 +212403,7 @@ ET
2.2895 Tw
BT
-138.24 346.135 Td
+138.24 297.295 Td
/F1.0 10.5 Tf
[<41> 20.0195 <6363657373436f6e74726f6c6c6572206d75737420636f6d6520666972737420696e20746865206c6973742c2062656361757365207769746820626f746820636f6d706f6e656e7473>] TJ
ET
@@ -212387,7 +212418,7 @@ ET
0.8804 Tw
BT
-138.24 330.355 Td
+138.24 281.515 Td
/F1.0 10.5 Tf
<6163746976652c20746865205669736962696c697479436f6e74726f6c6c65722077696c6c2064656c65676174652061636365737320636f6e74726f6c206f6e206974732073797374656d207461626c6573> Tj
ET
@@ -212402,7 +212433,7 @@ ET
1.9182 Tw
BT
-138.24 314.575 Td
+138.24 265.735 Td
/F1.0 10.5 Tf
[<746f207468652041> 20.0195 <6363657373436f6e74726f6c6c65722e2046> 40.0391 <6f7220616e206578616d706c65206f66207573696e6720626f746820746f6765746865722c2073656520>] TJ
ET
@@ -212417,7 +212448,7 @@ ET
1.9182 Tw
BT
-493.985 314.575 Td
+493.985 265.735 Td
/F1.0 10.5 Tf
<5365637572697479> Tj
ET
@@ -212430,7 +212461,7 @@ ET
0.2588 0.5451 0.7922 SCN
BT
-138.24 298.795 Td
+138.24 249.955 Td
/F1.0 10.5 Tf
[<436f6e6669677572> 20.0195 <6174696f6e204578616d706c65>] TJ
ET
@@ -212441,7 +212472,7 @@ ET
0.2 0.2 0.2 SCN
BT
-254.0023 298.795 Td
+254.0023 249.955 Td
/F1.0 10.5 Tf
<2e> Tj
ET
@@ -212497,29 +212528,29 @@ endobj
<< /Border [0 0 0]
/Dest (appendix_acl_matrix)
/Subtype /Link
-/Rect [439.4902 656.189 540.1432 670.469]
+/Rect [439.4902 607.349 540.1432 621.629]
/Type /Annot
>>
endobj
1371 0 obj
-[1369 0 R /XYZ 0 643.439 null]
+[1369 0 R /XYZ 0 594.599 null]
endobj
1372 0 obj
<< /Border [0 0 0]
/Dest (hbase.tags)
/Subtype /Link
-/Rect [293.4608 598.529 315.8596 612.809]
+/Rect [293.4608 549.689 315.8596 563.969]
/Type /Annot
>>
endobj
1373 0 obj
-[1369 0 R /XYZ 0 473.099 null]
+[1369 0 R /XYZ 0 424.259 null]
endobj
1374 0 obj
<< /Border [0 0 0]
/Dest (security.data.basic.server.side)
/Subtype /Link
-/Rect [260.448 428.189 475.9813 442.469]
+/Rect [260.448 379.349 475.9813 393.629]
/Type /Annot
>>
endobj
@@ -212527,7 +212558,7 @@ endobj
<< /Border [0 0 0]
/Dest (security.example.config)
/Subtype /Link
-/Rect [493.985 311.509 535.04 325.789]
+/Rect [493.985 262.669 535.04 276.949]
/Type /Annot
>>
endobj
@@ -212535,7 +212566,7 @@ endobj
<< /Border [0 0 0]
/Dest (security.example.config)
/Subtype /Link
-/Rect [138.24 295.729 254.0023 310.009]
+/Rect [138.24 246.889 254.0023 261.169]
/Type /Annot
>>
endobj
@@ -579427,7 +579458,7 @@ endobj
endobj
2869 0 obj
<< /Limits [(trouble.zookeeper.general) (upgrade1.0)]
-/Names [(trouble.zookeeper.general) 2872 0 R (trouble.zookeeper.startup) 2870 0 R (trouble.zookeeper.startup.address) 2871 0 R (troubleshooting) 3364 0 R (ttl) 1043 0 R (tune-hbase-server-rpc-handling) 1138 0 R (tune-jvm-gc-for-low-collection-latencies) 1152 0 R (tuning-code-callqueue-code-options) 2480 0 R (types-of-coprocessors) 2326 0 R (types-of-observer-coprocessor) 2332 0 R (ulimit) 135 0 R (understanding-access-levels) 1363 0 R (unexpected-filesystem-growth) 2800 0 R (unified-version-2-block-format) 4071 0 R (unit.tests) 3740 0 R (units-of-measure-for-metrics) 3128 0 R (upgrade-paths) 659 0 R (upgrade1.0) 765 0 R]
+/Names [(trouble.zookeeper.general) 2872 0 R (trouble.zookeeper.startup) 2870 0 R (trouble.zookeeper.startup.address) 2871 0 R (troubleshooting) 3364 0 R (ttl) 1043 0 R (tune-hbase-server-rpc-handling) 1138 0 R (tune-jvm-gc-for-low-collection-latencies) 1152 0 R (tuning-code-callqueue-code-options) 2480 0 R (types-of-coprocessors) 2326 0 R (types-of-observer-coprocessor) 2332 0 R (ulimit) 135 0 R (understanding-access-levels) 1365 0 R (unexpected-filesystem-growth) 2800 0 R (unified-version-2-block-format) 4071 0 R (unit.tests) 3740 0 R (units-of-measure-for-metrics) 3128 0 R (upgrade-paths) 659 0 R (upgrade1.0) 765 0 R]
>>
endobj
2870 0 obj
@@ -805386,3585 +805417,3585 @@ xref
0002988372 00000 n
0002988509 00000 n
0002988639 00000 n
-0003000244 00000 n
-0003000650 00000 n
-0003000698 00000 n
-0003000746 00000 n
-0003000884 00000 n
-0003000932 00000 n
-0003000980 00000 n
-0003001028 00000 n
-0003017255 00000 n
-0003017616 00000 n
-0003039722 00000 n
-0003040109 00000 n
-0003053275 00000 n
-0003053704 00000 n
-0003053842 00000 n
-0003053891 00000 n
-0003054020 00000 n
-0003054069 00000 n
-0003054218 00000 n
-0003054357 00000 n
-0003054497 00000 n
-0003064798 00000 n
-0003065159 00000 n
-0003080811 00000 n
-0003081159 00000 n
-0003095426 00000 n
-0003095813 00000 n
-0003095861 00000 n
-0003107352 00000 n
-0003107739 00000 n
-0003113447 00000 n
-0003113821 00000 n
-0003150305 00000 n
-0003150680 00000 n
-0003182429 00000 n
-0003182803 00000 n
-0003216423 00000 n
-0003216797 00000 n
-0003216846 00000 n
-0003233007 00000 n
-0003233436 00000 n
-0003233631 00000 n
-0003233826 00000 n
-0003245757 00000 n
-0003246163 00000 n
-0003246211 00000 n
-0003246358 00000 n
-0003246406 00000 n
-0003271438 00000 n
-0003271812 00000 n
-0003291822 00000 n
-0003292183 00000 n
-0003307417 00000 n
-0003307778 00000 n
-0003339670 00000 n
-0003340072 00000 n
-0003340120 00000 n
-0003340455 00000 n
-0003340752 00000 n
-0003374162 00000 n
-0003374573 00000 n
-0003374622 00000 n
-0003374820 00000 n
-0003374962 00000 n
-0003375101 00000 n
-0003375150 00000 n
-0003390003 00000 n
-0003390396 00000 n
-0003390589 00000 n
-0003390637 00000 n
-0003390685 00000 n
-0003391003 00000 n
-0003402484 00000 n
-0003402858 00000 n
-0003402906 00000 n
-0003419277 00000 n
-0003419651 00000 n
-0003432253 00000 n
-0003432640 00000 n
-0003432687 00000 n
-0003445359 00000 n
-0003445766 00000 n
-0003445814 00000 n
-0003446064 00000 n
-0003455179 00000 n
-0003455572 00000 n
-0003455620 00000 n
-0003455815 00000 n
-0003471808 00000 n
-0003472182 00000 n
-0003472230 00000 n
-0003488967 00000 n
-0003489315 00000 n
-0003504665 00000 n
-0003505026 00000 n
-0003505422 00000 n
-0003505770 00000 n
-0003505818 00000 n
-0003517106 00000 n
-0003517454 00000 n
-0003517502 00000 n
-0003517550 00000 n
-0003517598 00000 n
-0003522580 00000 n
-0003522956 00000 n
-0003523004 00000 n
-0003523485 00000 n
-0003523713 00000 n
-0003523838 00000 n
-0003535323 00000 n
-0003535747 00000 n
-0003535795 00000 n
-0003535843 00000 n
-0003536064 00000 n
-0003536309 00000 n
-0003536358 00000 n
-0003536500 00000 n
-0003556262 00000 n
-0003556718 00000 n
-0003556766 00000 n
-0003556900 00000 n
-0003557030 00000 n
-0003557250 00000 n
-0003557298 00000 n
-0003557431 00000 n
-0003557564 00000 n
-0003557612 00000 n
-0003557843 00000 n
-0003557891 00000 n
-0003558110 00000 n
-0003558332 00000 n
-0003583513 00000 n
-0003583991 00000 n
-0003584220 00000 n
-0003584268 00000 n
-0003584465 00000 n
-0003584693 00000 n
-0003584742 00000 n
-0003584968 00000 n
-0003585191 00000 n
-0003585418 00000 n
-0003585613 00000 n
-0003585782 00000 n
-0003586046 00000 n
-0003586095 00000 n
-0003605151 00000 n
-0003605512 00000 n
-0003605560 00000 n
-0003611174 00000 n
-0003611554 00000 n
-0003611602 00000 n
-0003612057 00000 n
-0003612183 00000 n
-0003631660 00000 n
-0003632085 00000 n
-0003632133 00000 n
-0003632346 00000 n
-0003632565 00000 n
-0003632787 00000 n
-0003632835 00000 n
-0003632883 00000 n
-0003633105 00000 n
-0003633153 00000 n
-0003633201 00000 n
-0003633438 00000 n
-0003633674 00000 n
-0003658173 00000 n
-0003658553 00000 n
-0003658601 00000 n
-0003658649 00000 n
-0003658785 00000 n
-0003676702 00000 n
-0003677127 00000 n
-0003677175 00000 n
-0003677409 00000 n
-0003677629 00000 n
-0003677677 00000 n
-0003677909 00000 n
-0003677957 00000 n
-0003678379 00000 n
-0003678615 00000 n
-0003678663 00000 n
-0003678892 00000 n
-0003678940 00000 n
-0003678988 00000 n
-0003679210 00000 n
-0003705328 00000 n
-0003705726 00000 n
-0003705774 00000 n
-0003706002 00000 n
-0003706049 00000 n
-0003706280 00000 n
-0003706327 00000 n
-0003706566 00000 n
-0003756616 00000 n
-0003756996 00000 n
-0003757044 00000 n
-0003757274 00000 n
-0003759533 00000 n
-0003759909 00000 n
-0003759957 00000 n
-0003760005 00000 n
-0003760226 00000 n
-0003760274 00000 n
-0003760322 00000 n
-0003760853 00000 n
-0003761087 00000 n
-0003772660 00000 n
-0003773085 00000 n
-0003773133 00000 n
-0003773262 00000 n
-0003773463 00000 n
-0003773511 00000 n
-0003773559 00000 n
-0003773687 00000 n
-0003773735 00000 n
-0003773783 00000 n
-0003773831 00000 n
-0003773963 00000 n
-0003774100 00000 n
-0003774148 00000 n
-0003774279 00000 n
-0003783111 00000 n
-0003783500 00000 n
-0003783548 00000 n
-0003783676 00000 n
-0003783724 00000 n
-0003783772 00000 n
-0003783820 00000 n
-0003783868 00000 n
-0003783916 00000 n
-0003783964 00000 n
-0003784651 00000 n
-0003784699 00000 n
-0003784907 00000 n
-0003784955 00000 n
-0003798296 00000 n
-0003798733 00000 n
-0003798782 00000 n
-0003798831 00000 n
-0003799064 00000 n
-0003799201 00000 n
-0003799398 00000 n
-0003799447 00000 n
-0003818626 00000 n
-0003819055 00000 n
-0003819103 00000 n
-0003819293 00000 n
-0003819480 00000 n
-0003833647 00000 n
-0003834099 00000 n
-0003834223 00000 n
-0003834352 00000 n
-0003834479 00000 n
-0003834527 00000 n
-0003834720 00000 n
-0003834912 00000 n
-0003834960 00000 n
-0003835007 00000 n
-0003835244 00000 n
-0003857051 00000 n
-0003857462 00000 n
-0003857648 00000 n
-0003857830 00000 n
-0003857975 00000 n
-0003874046 00000 n
-0003874448 00000 n
-0003874680 00000 n
-0003874728 00000 n
-0003875135 00000 n
-0003875264 00000 n
-0003890192 00000 n
-0003890616 00000 n
-0003890809 00000 n
-0003890857 00000 n
-0003891001 00000 n
-0003891231 00000 n
-0003907243 00000 n
-0003907703 00000 n
-0003907752 00000 n
-0003907947 00000 n
-0003907996 00000 n
-0003908045 00000 n
-0003908242 00000 n
-0003908453 00000 n
-0003908662 00000 n
-0003908877 00000 n
-0003909010 00000 n
-0003909142 00000 n
-0003928589 00000 n
-0003928969 00000 n
-0003929099 00000 n
-0003939856 00000 n
-0003940267 00000 n
-0003940315 00000 n
-0003940362 00000 n
-0003940484 00000 n
-0003940708 00000 n
-0003940857 00000 n
-0004205945 00000 n
-0004207875 00000 n
-0004216563 00000 n
-0004216950 00000 n
-0004216998 00000 n
-0004236020 00000 n
-0004236462 00000 n
-0004236510 00000 n
-0004236558 00000 n
-0004236776 00000 n
-0004236905 00000 n
-0004237027 00000 n
-0004237220 00000 n
-0004237411 00000 n
-0004252888 00000 n
-0004253290 00000 n
-0004253338 00000 n
-0004253570 00000 n
-0004253618 00000 n
-0004253812 00000 n
-0004265587 00000 n
-0004265961 00000 n
-0004266009 00000 n
-0004266057 00000 n
-0004280354 00000 n
-0004280783 00000 n
-0004280831 00000 n
-0004281024 00000 n
-0004281216 00000 n
-0004281264 00000 n
-0004281458 00000 n
-0004281506 00000 n
-0004281645 00000 n
-0004281781 00000 n
-0004281828 00000 n
-0004282211 00000 n
-0004295160 00000 n
-0004295549 00000 n
-0004295599 00000 n
-0004295744 00000 n
-0004295888 00000 n
-0004308514 00000 n
-0004308926 00000 n
-0004309080 00000 n
-0004309234 00000 n
-0004309388 00000 n
-0004309439 00000 n
-0004324419 00000 n
-0004324806 00000 n
-0004338702 00000 n
-0004339108 00000 n
-0004339156 00000 n
-0004339537 00000 n
-0004339584 00000 n
-0004339712 00000 n
-0004339760 00000 n
-0004351596 00000 n
-0004352007 00000 n
-0004352055 00000 n
-0004352199 00000 n
-0004352340 00000 n
-0004352388 00000 n
-0004352436 00000 n
-0004352574 00000 n
-0004365495 00000 n
-0004365884 00000 n
-0004366019 00000 n
-0004366067 00000 n
-0004366115 00000 n
-0004366162 00000 n
-0004366210 00000 n
-0004366355 00000 n
-0004375018 00000 n
-0004375392 00000 n
-0004375440 00000 n
-0004470644 00000 n
-0004476522 00000 n
-0004476896 00000 n
-0004499484 00000 n
-0004499832 00000 n
-0004511886 00000 n
-0004512333 00000 n
-0004512380 00000 n
-0004512612 00000 n
-0004512842 00000 n
-0004513054 00000 n
-0004513101 00000 n
-0004513316 00000 n
-0004513448 00000 n
-0004513496 00000 n
-0004513738 00000 n
-0004513999 00000 n
-0004539615 00000 n
-0004540039 00000 n
-0004540088 00000 n
-0004540215 00000 n
-0004540341 00000 n
-0004540473 00000 n
-0004553905 00000 n
-0004554347 00000 n
-0004554477 00000 n
-0004554525 00000 n
-0004554773 00000 n
-0004555025 00000 n
-0004555266 00000 n
-0004555514 00000 n
-0004555562 00000 n
-0004568399 00000 n
-0004568760 00000 n
-0004568808 00000 n
-0004568856 00000 n
-0004568904 00000 n
-0004568952 00000 n
-0004581557 00000 n
-0004582004 00000 n
-0004582052 00000 n
-0004582100 00000 n
-0004582295 00000 n
-0004582533 00000 n
-0004582753 00000 n
-0004582961 00000 n
-0004583083 00000 n
-0004583204 00000 n
-0004583252 00000 n
-0004583300 00000 n
-0004583442 00000 n
-0004592853 00000 n
-0004593246 00000 n
-0004593294 00000 n
-0004593417 00000 n
-0004593465 00000 n
-0004593513 00000 n
-0004610671 00000 n
-0004611096 00000 n
-0004611144 00000 n
-0004611339 00000 n
-0004611480 00000 n
-0004611622 00000 n
-0004626772 00000 n
-0004627223 00000 n
-0004627361 00000 n
-0004627501 00000 n
-0004627549 00000 n
-0004627598 00000 n
-0004627755 00000 n
-0004627893 00000 n
-0004628028 00000 n
+0003000468 00000 n
+0003000874 00000 n
+0003000922 00000 n
+0003000970 00000 n
+0003001108 00000 n
+0003001156 00000 n
+0003001204 00000 n
+0003017083 00000 n
+0003017457 00000 n
+0003017505 00000 n
+0003038295 00000 n
+0003038682 00000 n
+0003053991 00000 n
+0003054420 00000 n
+0003054558 00000 n
+0003054607 00000 n
+0003054736 00000 n
+0003054785 00000 n
+0003054934 00000 n
+0003055073 00000 n
+0003055213 00000 n
+0003065514 00000 n
+0003065875 00000 n
+0003081527 00000 n
+0003081875 00000 n
+0003096142 00000 n
+0003096529 00000 n
+0003096577 00000 n
+0003108068 00000 n
+0003108455 00000 n
+0003114163 00000 n
+0003114537 00000 n
+0003151021 00000 n
+0003151396 00000 n
+0003183145 00000 n
+0003183519 00000 n
+0003217139 00000 n
+0003217513 00000 n
+0003217562 00000 n
+0003233723 00000 n
+0003234152 00000 n
+0003234347 00000 n
+0003234542 00000 n
+0003246473 00000 n
+0003246879 00000 n
+0003246927 00000 n
+0003247074 00000 n
+0003247122 00000 n
+0003272154 00000 n
+0003272528 00000 n
+0003292538 00000 n
+0003292899 00000 n
+0003308133 00000 n
+0003308494 00000 n
+0003340386 00000 n
+0003340788 00000 n
+0003340836 00000 n
+0003341171 00000 n
+0003341468 00000 n
+0003374878 00000 n
+0003375289 00000 n
+0003375338 00000 n
+0003375536 00000 n
+0003375678 00000 n
+0003375817 00000 n
+000
<TRUNCATED>
[40/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html
deleted file mode 100644
index ce0d4e8..0000000
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html
+++ /dev/null
@@ -1,276 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>FailedRemoteDispatchException (Apache HBase 3.0.0-SNAPSHOT API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
- try {
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="FailedRemoteDispatchException (Apache HBase 3.0.0-SNAPSHOT API)";
- }
- }
- catch(err) {
- }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!-- -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!-- -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/FailedRemoteDispatchException.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignProcedure.CompareAssignProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/GCMergedRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html" target="_top">Frames</a></li>
-<li><a href="FailedRemoteDispatchException.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
- allClassesLink = document.getElementById("allclasses_navbar_top");
- if(window==top) {
- allClassesLink.style.display = "block";
- }
- else {
- allClassesLink.style.display = "none";
- }
- //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary: </li>
-<li>Nested | </li>
-<li>Field | </li>
-<li><a href="#constructor.summary">Constr</a> | </li>
-<li><a href="#methods.inherited.from.class.java.lang.Throwable">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail: </li>
-<li>Field | </li>
-<li><a href="#constructor.detail">Constr</a> | </li>
-<li>Method</li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!-- -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">org.apache.hadoop.hbase.master.assignment</div>
-<h2 title="Class FailedRemoteDispatchException" class="title">Class FailedRemoteDispatchException</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
-<li>
-<ul class="inheritance">
-<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">java.lang.Throwable</a></li>
-<li>
-<ul class="inheritance">
-<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">java.lang.Exception</a></li>
-<li>
-<ul class="inheritance">
-<li><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">java.io.IOException</a></li>
-<li>
-<ul class="inheritance">
-<li><a href="../../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">org.apache.hadoop.hbase.HBaseIOException</a></li>
-<li>
-<ul class="inheritance">
-<li>org.apache.hadoop.hbase.master.assignment.FailedRemoteDispatchException</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<dl>
-<dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a></dd>
-</dl>
-<hr>
-<br>
-<pre>@InterfaceAudience.Private
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html#line.29">FailedRemoteDispatchException</a>
-extends <a href="../../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
-<div class="block">Used internally signaling failed queue of a remote procedure
- operation.</div>
-<dl>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../../../../serialized-form.html#org.apache.hadoop.hbase.master.assignment.FailedRemoteDispatchException">Serialized Form</a></dd>
-</dl>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!-- -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd"> </span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html#FailedRemoteDispatchException-java.lang.String-">FailedRemoteDispatchException</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> msg)</code> </td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!-- -->
-</a>
-<h3>Method Summary</h3>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Throwable">
-<!-- -->
-</a>
-<h3>Methods inherited from class java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a></h3>
-<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#addSuppressed-java.lang.Throwable-" title="class or interface in java.lang">addSuppressed</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#fillInStackTrace--" title="class or interface in java.lang">fillInStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#getCause--" title="class or interface in java.lang">getCause</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#getLocalizedMessage--" title="class or interface in java.lang">getLocalizedMessage</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#getMessage--" title="class or interface in java.lang">getMessage</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#getStackTrace--" title="class or
interface in java.lang">getStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#getSuppressed--" title="class or interface in java.lang">getSuppressed</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#initCause-java.lang.Throwable-" title="class or interface in java.lang">initCause</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace--" title="class or interface in java.lang">printStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace-java.io.PrintStream-" title="class or interface in java.lang">printStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace-java.io.PrintWriter-" title="class or interface in java.lang">printStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/
api/java/lang/Throwable.html?is-external=true#setStackTrace-java.lang.StackTraceElement:A-" title="class or interface in java.lang">setStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code></li>
-</ul>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!-- -->
-</a>
-<h3>Methods inherited from class java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
-<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!-- -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="FailedRemoteDispatchException-java.lang.String-">
-<!-- -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>FailedRemoteDispatchException</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html#line.30">FailedRemoteDispatchException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> msg)</pre>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!-- -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!-- -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/FailedRemoteDispatchException.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignProcedure.CompareAssignProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/GCMergedRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html" target="_top">Frames</a></li>
-<li><a href="FailedRemoteDispatchException.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
- allClassesLink = document.getElementById("allclasses_navbar_bottom");
- if(window==top) {
- allClassesLink.style.display = "block";
- }
- else {
- allClassesLink.style.display = "none";
- }
- //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary: </li>
-<li>Nested | </li>
-<li>Field | </li>
-<li><a href="#constructor.summary">Constr</a> | </li>
-<li><a href="#methods.inherited.from.class.java.lang.Throwable">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail: </li>
-<li>Field | </li>
-<li><a href="#constructor.detail">Constr</a> | </li>
-<li>Method</li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!-- -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/assignment/GCMergedRegionsProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/GCMergedRegionsProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/GCMergedRegionsProcedure.html
index 8877e83..a188e57 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/GCMergedRegionsProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/GCMergedRegionsProcedure.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignProcedure.CompareAssignProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev Class</span></a></li>
<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/GCRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
@@ -667,7 +667,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignProcedure.CompareAssignProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev Class</span></a></li>
<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/GCRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html
index 431fbd7..70f6391 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html
@@ -450,7 +450,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>rollbackState</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html#line.105">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html#line.108">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.MoveRegionState state)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#rollbackState-TEnvironment-TState-">StateMachineProcedure</a></code></span></div>
@@ -470,7 +470,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>abort</h4>
-<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html#line.111">abort</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html#line.114">abort</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#abort-TEnvironment-">Procedure</a></code></span></div>
<div class="block">The abort() call is asynchronous and each procedure must decide how to deal
with it, if they want to be abortable. The simplest implementation
@@ -493,7 +493,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>toStringClassDetails</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html#line.116">toStringClassDetails</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a> sb)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html#line.119">toStringClassDetails</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a> sb)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClassDetails-java.lang.StringBuilder-">Procedure</a></code></span></div>
<div class="block">Extend the toString() information with the procedure details
e.g. className and parameters</div>
@@ -511,7 +511,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>getInitialState</h4>
-<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.MoveRegionState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html#line.123">getInitialState</a>()</pre>
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.MoveRegionState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html#line.126">getInitialState</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getInitialState--">StateMachineProcedure</a></code></span></div>
<div class="block">Return the initial state object that will be used for the first call to executeFromState().</div>
<dl>
@@ -528,7 +528,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>getStateId</h4>
-<pre>protected int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html#line.128">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.MoveRegionState state)</pre>
+<pre>protected int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html#line.131">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.MoveRegionState state)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getStateId-TState-">StateMachineProcedure</a></code></span></div>
<div class="block">Convert the Enum (or more descriptive) state object to an ordinal (or state id).</div>
<dl>
@@ -547,7 +547,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>getState</h4>
-<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.MoveRegionState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html#line.133">getState</a>(int stateId)</pre>
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.MoveRegionState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html#line.136">getState</a>(int stateId)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getState-int-">StateMachineProcedure</a></code></span></div>
<div class="block">Convert an ordinal (or state id) to an Enum (or more descriptive) state object.</div>
<dl>
@@ -566,7 +566,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>getTableName</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html#line.138">getTableName</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html#line.141">getTableName</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.html#getTableName--">getTableName</a></code> in interface <code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface</a></code></dd>
@@ -583,7 +583,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>getTableOperationType</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface.TableOperationType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html#line.143">getTableOperationType</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface.TableOperationType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html#line.146">getTableOperationType</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.html#getTableOperationType--">TableProcedureInterface</a></code></span></div>
<div class="block">Given an operation type we can take decisions about what to do with pending operations.
e.g. if we get a delete and we have some table operation pending (e.g. add column)
@@ -604,7 +604,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>serializeStateData</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html#line.148">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html#line.151">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
<div class="block">The user-level code of the procedure may have some state to
@@ -626,7 +626,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockListLast">
<li class="blockList">
<h4>deserializeStateData</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html#line.163">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html#line.166">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
<div class="block">Called on store load to allow the user to decode the previously serialized
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html
index 94262c9..6e8b4cc 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static final class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.866">RegionStates.RegionFailedOpen</a>
+<pre>public static final class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.901">RegionStates.RegionFailedOpen</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
</li>
</ul>
@@ -229,7 +229,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>regionNode</h4>
-<pre>private final <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.867">regionNode</a></pre>
+<pre>private final <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.902">regionNode</a></pre>
</li>
</ul>
<a name="exception">
@@ -238,7 +238,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>exception</h4>
-<pre>private volatile <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.869">exception</a></pre>
+<pre>private volatile <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.904">exception</a></pre>
</li>
</ul>
<a name="retries">
@@ -247,7 +247,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>retries</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.870">retries</a></pre>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.905">retries</a></pre>
</li>
</ul>
</li>
@@ -264,7 +264,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>RegionFailedOpen</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.872">RegionFailedOpen</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.907">RegionFailedOpen</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</pre>
</li>
</ul>
</li>
@@ -281,7 +281,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getRegionStateNode</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.876">getRegionStateNode</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.911">getRegionStateNode</a>()</pre>
</li>
</ul>
<a name="getRegionInfo--">
@@ -290,7 +290,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getRegionInfo</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.880">getRegionInfo</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.915">getRegionInfo</a>()</pre>
</li>
</ul>
<a name="incrementAndGetRetries--">
@@ -299,7 +299,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>incrementAndGetRetries</h4>
-<pre>public int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.884">incrementAndGetRetries</a>()</pre>
+<pre>public int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.919">incrementAndGetRetries</a>()</pre>
</li>
</ul>
<a name="getRetries--">
@@ -308,7 +308,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getRetries</h4>
-<pre>public int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.888">getRetries</a>()</pre>
+<pre>public int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.923">getRetries</a>()</pre>
</li>
</ul>
<a name="setException-java.lang.Exception-">
@@ -317,7 +317,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>setException</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.892">setException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a> exception)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.927">setException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a> exception)</pre>
</li>
</ul>
<a name="getException--">
@@ -326,7 +326,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>getException</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.896">getException</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.931">getException</a>()</pre>
</li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html
index a007daa..fcbd55a 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html
@@ -122,8 +122,9 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static enum <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.311">RegionStates.ServerState</a>
+<pre>public static enum <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.314">RegionStates.ServerState</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a><<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerState</a>></pre>
+<div class="block">Server State.</div>
</li>
</ul>
</div>
@@ -142,13 +143,19 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?i
<th class="colOne" scope="col">Enum Constant and Description</th>
</tr>
<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html#OFFLINE">OFFLINE</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html#OFFLINE">OFFLINE</a></span></code>
+<div class="block">WAL splitting done.</div>
+</td>
</tr>
<tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html#ONLINE">ONLINE</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html#ONLINE">ONLINE</a></span></code>
+<div class="block">Initial state.</div>
+</td>
</tr>
<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html#SPLITTING">SPLITTING</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html#SPLITTING">SPLITTING</a></span></code>
+<div class="block">Server expired/crashed.</div>
+</td>
</tr>
</table>
</li>
@@ -213,7 +220,8 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>ONLINE</h4>
-<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html#line.311">ONLINE</a></pre>
+<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html#line.318">ONLINE</a></pre>
+<div class="block">Initial state. Available.</div>
</li>
</ul>
<a name="SPLITTING">
@@ -222,7 +230,8 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>SPLITTING</h4>
-<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html#line.311">SPLITTING</a></pre>
+<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html#line.323">SPLITTING</a></pre>
+<div class="block">Server expired/crashed. Currently undergoing WAL splitting.</div>
</li>
</ul>
<a name="OFFLINE">
@@ -231,7 +240,8 @@ the order they are declared.</div>
<ul class="blockListLast">
<li class="blockList">
<h4>OFFLINE</h4>
-<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html#line.311">OFFLINE</a></pre>
+<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html#line.328">OFFLINE</a></pre>
+<div class="block">WAL splitting done.</div>
</li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html
index f9a45da..cab437f 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html
@@ -18,7 +18,7 @@
catch(err) {
}
//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -117,9 +117,10 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.312">RegionStates.ServerStateNode</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.334">RegionStates.ServerStateNode</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a>></pre>
+<div class="block">State of Server; list of hosted regions, etc.</div>
</li>
</ul>
</div>
@@ -239,18 +240,22 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#isInState-org.apache.hadoop.hbase.master.assignment.RegionStates.ServerState...-">isInState</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerState</a>... expected)</code> </td>
</tr>
<tr id="i12" class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#isOffline--">isOffline</a></span>()</code> </td>
+</tr>
+<tr id="i13" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#removeRegion-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">removeRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</code> </td>
</tr>
-<tr id="i13" class="rowColor">
+<tr id="i14" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#setState-org.apache.hadoop.hbase.master.assignment.RegionStates.ServerState-">setState</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerState</a> state)</code> </td>
</tr>
-<tr id="i14" class="altColor">
+<tr id="i15" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#setVersionNumber-int-">setVersionNumber</a></span>(int versionNumber)</code> </td>
</tr>
-<tr id="i15" class="rowColor">
+<tr id="i16" class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#toString--">toString</a></span>()</code> </td>
</tr>
@@ -282,7 +287,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
<ul class="blockList">
<li class="blockList">
<h4>reportEvent</h4>
-<pre>private final <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerReportEvent.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerReportEvent</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.313">reportEvent</a></pre>
+<pre>private final <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerReportEvent.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerReportEvent</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.335">reportEvent</a></pre>
</li>
</ul>
<a name="regions">
@@ -291,7 +296,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
<ul class="blockList">
<li class="blockList">
<h4>regions</h4>
-<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.315">regions</a></pre>
+<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.337">regions</a></pre>
</li>
</ul>
<a name="serverName">
@@ -300,7 +305,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
<ul class="blockList">
<li class="blockList">
<h4>serverName</h4>
-<pre>private final <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.316">serverName</a></pre>
+<pre>private final <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.338">serverName</a></pre>
</li>
</ul>
<a name="state">
@@ -309,7 +314,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
<ul class="blockList">
<li class="blockList">
<h4>state</h4>
-<pre>private volatile <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.318">state</a></pre>
+<pre>private volatile <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.340">state</a></pre>
</li>
</ul>
<a name="versionNumber">
@@ -318,7 +323,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
<ul class="blockListLast">
<li class="blockList">
<h4>versionNumber</h4>
-<pre>private volatile int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.319">versionNumber</a></pre>
+<pre>private volatile int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.341">versionNumber</a></pre>
</li>
</ul>
</li>
@@ -335,7 +340,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
<ul class="blockListLast">
<li class="blockList">
<h4>ServerStateNode</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.321">ServerStateNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.343">ServerStateNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
</li>
</ul>
</li>
@@ -352,7 +357,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
<ul class="blockList">
<li class="blockList">
<h4>getServerName</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.327">getServerName</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.349">getServerName</a>()</pre>
</li>
</ul>
<a name="getState--">
@@ -361,7 +366,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
<ul class="blockList">
<li class="blockList">
<h4>getState</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.331">getState</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.353">getState</a>()</pre>
</li>
</ul>
<a name="getVersionNumber--">
@@ -370,7 +375,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
<ul class="blockList">
<li class="blockList">
<h4>getVersionNumber</h4>
-<pre>public int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.335">getVersionNumber</a>()</pre>
+<pre>public int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.357">getVersionNumber</a>()</pre>
</li>
</ul>
<a name="getReportEvent--">
@@ -379,7 +384,16 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
<ul class="blockList">
<li class="blockList">
<h4>getReportEvent</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureEvent.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureEvent</a><?> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.339">getReportEvent</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureEvent.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureEvent</a><?> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.361">getReportEvent</a>()</pre>
+</li>
+</ul>
+<a name="isOffline--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isOffline</h4>
+<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.365">isOffline</a>()</pre>
</li>
</ul>
<a name="isInState-org.apache.hadoop.hbase.master.assignment.RegionStates.ServerState...-">
@@ -388,7 +402,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
<ul class="blockList">
<li class="blockList">
<h4>isInState</h4>
-<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.343">isInState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerState</a>... expected)</pre>
+<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.369">isInState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerState</a>... expected)</pre>
</li>
</ul>
<a name="setState-org.apache.hadoop.hbase.master.assignment.RegionStates.ServerState-">
@@ -397,7 +411,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
<ul class="blockList">
<li class="blockList">
<h4>setState</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.353">setState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerState</a> state)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.379">setState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerState</a> state)</pre>
</li>
</ul>
<a name="setVersionNumber-int-">
@@ -406,7 +420,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
<ul class="blockList">
<li class="blockList">
<h4>setVersionNumber</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.357">setVersionNumber</a>(int versionNumber)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.383">setVersionNumber</a>(int versionNumber)</pre>
</li>
</ul>
<a name="getRegions--">
@@ -415,7 +429,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
<ul class="blockList">
<li class="blockList">
<h4>getRegions</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.361">getRegions</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.387">getRegions</a>()</pre>
</li>
</ul>
<a name="getRegionCount--">
@@ -424,7 +438,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
<ul class="blockList">
<li class="blockList">
<h4>getRegionCount</h4>
-<pre>public int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.365">getRegionCount</a>()</pre>
+<pre>public int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.391">getRegionCount</a>()</pre>
</li>
</ul>
<a name="getRegionInfoList--">
@@ -433,7 +447,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
<ul class="blockList">
<li class="blockList">
<h4>getRegionInfoList</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.369">getRegionInfoList</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.395">getRegionInfoList</a>()</pre>
</li>
</ul>
<a name="addRegion-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">
@@ -442,7 +456,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
<ul class="blockList">
<li class="blockList">
<h4>addRegion</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.377">addRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.403">addRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</pre>
</li>
</ul>
<a name="removeRegion-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">
@@ -451,7 +465,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
<ul class="blockList">
<li class="blockList">
<h4>removeRegion</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.381">removeRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.407">removeRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</pre>
</li>
</ul>
<a name="compareTo-org.apache.hadoop.hbase.master.assignment.RegionStates.ServerStateNode-">
@@ -460,7 +474,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
<ul class="blockList">
<li class="blockList">
<h4>compareTo</h4>
-<pre>public int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.386">compareTo</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a> other)</pre>
+<pre>public int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.412">compareTo</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a> other)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true#compareTo-T-" title="class or interface in java.lang">compareTo</a></code> in interface <code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a>></code></dd>
@@ -473,7 +487,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
<ul class="blockList">
<li class="blockList">
<h4>hashCode</h4>
-<pre>public int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.391">hashCode</a>()</pre>
+<pre>public int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.417">hashCode</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a></code> in class <code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -486,7 +500,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
<ul class="blockList">
<li class="blockList">
<h4>equals</h4>
-<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.396">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a> other)</pre>
+<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.422">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a> other)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a></code> in class <code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -499,7 +513,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
<ul class="blockListLast">
<li class="blockList">
<h4>toString</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.403">toString</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#line.429">toString</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code> in class <code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
[43/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/MasterRpcServices.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/MasterRpcServices.html b/devapidocs/org/apache/hadoop/hbase/master/MasterRpcServices.html
index a7531a8..4e7ec73 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/MasterRpcServices.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/MasterRpcServices.html
@@ -1963,7 +1963,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>unassignRegion</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.UnassignRegionResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1499">unassignRegion</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.UnassignRegionResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1503">unassignRegion</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.UnassignRegionRequest req)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -1980,7 +1980,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>reportRegionStateTransition</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1540">reportRegionStateTransition</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController c,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1544">reportRegionStateTransition</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController c,
org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest req)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -1997,7 +1997,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>setQuota</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetQuotaResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1551">setQuota</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController c,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetQuotaResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1555">setQuota</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController c,
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetQuotaRequest req)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -2014,7 +2014,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>getLastMajorCompactionTimestamp</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MajorCompactionTimestampResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1562">getLastMajorCompactionTimestamp</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MajorCompactionTimestampResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1566">getLastMajorCompactionTimestamp</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MajorCompactionTimestampRequest request)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -2031,7 +2031,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>getLastMajorCompactionTimestampForRegion</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MajorCompactionTimestampResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1577">getLastMajorCompactionTimestampForRegion</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MajorCompactionTimestampResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1581">getLastMajorCompactionTimestampForRegion</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MajorCompactionTimestampForRegionRequest request)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -2048,7 +2048,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>compactRegion</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1601">compactRegion</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1605">compactRegion</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest request)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<div class="block">Compact a region on the master.</div>
@@ -2071,7 +2071,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>checkHFileFormatVersionForMob</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1623">checkHFileFormatVersionForMob</a>()
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1627">checkHFileFormatVersionForMob</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">check configured hfile format version before to do compaction</div>
<dl>
@@ -2086,7 +2086,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>getRegionInfo</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1635">getRegionInfo</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1639">getRegionInfo</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest request)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -2105,7 +2105,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>compactMob</h4>
-<pre>private org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1660">compactMob</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest request,
+<pre>private org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1664">compactMob</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest request,
<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Compacts the mob files in the current table.</div>
@@ -2126,7 +2126,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>isBalancerEnabled</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsBalancerEnabledResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1706">isBalancerEnabled</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsBalancerEnabledResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1710">isBalancerEnabled</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsBalancerEnabledRequest request)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -2143,7 +2143,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>setSplitOrMergeEnabled</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetSplitOrMergeEnabledResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1714">setSplitOrMergeEnabled</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetSplitOrMergeEnabledResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1718">setSplitOrMergeEnabled</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetSplitOrMergeEnabledRequest request)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -2160,7 +2160,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>isSplitOrMergeEnabled</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsSplitOrMergeEnabledResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1741">isSplitOrMergeEnabled</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsSplitOrMergeEnabledResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1745">isSplitOrMergeEnabled</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsSplitOrMergeEnabledRequest request)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -2177,7 +2177,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>normalize</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1749">normalize</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1753">normalize</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.NormalizeRequest request)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -2194,7 +2194,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>setNormalizerRunning</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetNormalizerRunningResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1760">setNormalizerRunning</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetNormalizerRunningResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1764">setNormalizerRunning</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetNormalizerRunningRequest request)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -2211,7 +2211,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>isNormalizerEnabled</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsNormalizerEnabledResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1777">isNormalizerEnabled</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsNormalizerEnabledResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1781">isNormalizerEnabled</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.IsNormalizerEnabledRequest request)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -2228,7 +2228,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>getSecurityCapabilities</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SecurityCapabilitiesResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1788">getSecurityCapabilities</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SecurityCapabilitiesResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1792">getSecurityCapabilities</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SecurityCapabilitiesRequest request)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<div class="block">Returns the security capabilities in effect on the cluster</div>
@@ -2246,7 +2246,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>hasAccessControlServiceCoprocessor</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1827">hasAccessControlServiceCoprocessor</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html" title="class in org.apache.hadoop.hbase.master">MasterCoprocessorHost</a> cpHost)</pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1831">hasAccessControlServiceCoprocessor</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html" title="class in org.apache.hadoop.hbase.master">MasterCoprocessorHost</a> cpHost)</pre>
<div class="block">Determines if there is a MasterCoprocessor deployed which implements
<code>AccessControlProtos.AccessControlService.Interface</code>.</div>
</li>
@@ -2257,7 +2257,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>hasVisibilityLabelsServiceCoprocessor</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1836">hasVisibilityLabelsServiceCoprocessor</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html" title="class in org.apache.hadoop.hbase.master">MasterCoprocessorHost</a> cpHost)</pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1840">hasVisibilityLabelsServiceCoprocessor</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html" title="class in org.apache.hadoop.hbase.master">MasterCoprocessorHost</a> cpHost)</pre>
<div class="block">Determines if there is a MasterCoprocessor deployed which implements
<code>VisibilityLabelsProtos.VisibilityLabelsService.Interface</code>.</div>
</li>
@@ -2268,7 +2268,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>checkCoprocessorWithService</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1846">checkCoprocessorWithService</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessor.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessor</a>> coprocessorsToCheck,
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1850">checkCoprocessorWithService</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MasterCoprocessor.html" title="interface in org.apache.hadoop.hbase.coprocessor">MasterCoprocessor</a>> coprocessorsToCheck,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?> service)</pre>
<div class="block">Determines if there is a coprocessor implementation in the provided argument which extends
or implements the provided <code>service</code>.</div>
@@ -2280,7 +2280,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>convert</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client">MasterSwitchType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1859">convert</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterSwitchType switchType)</pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client">MasterSwitchType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1863">convert</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MasterSwitchType switchType)</pre>
</li>
</ul>
<a name="addReplicationPeer-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerRequest-">
@@ -2289,7 +2289,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>addReplicationPeer</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1872">addReplicationPeer</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1876">addReplicationPeer</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.AddReplicationPeerRequest request)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -2306,7 +2306,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>removeReplicationPeer</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1885">removeReplicationPeer</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1889">removeReplicationPeer</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.RemoveReplicationPeerRequest request)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -2323,7 +2323,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>enableReplicationPeer</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1896">enableReplicationPeer</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1900">enableReplicationPeer</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.EnableReplicationPeerRequest request)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -2340,7 +2340,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>disableReplicationPeer</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1907">disableReplicationPeer</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1911">disableReplicationPeer</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.DisableReplicationPeerRequest request)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -2357,7 +2357,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>getReplicationPeerConfig</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1918">getReplicationPeerConfig</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1922">getReplicationPeerConfig</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.GetReplicationPeerConfigRequest request)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -2374,7 +2374,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>updateReplicationPeerConfig</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1934">updateReplicationPeerConfig</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1938">updateReplicationPeerConfig</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.UpdateReplicationPeerConfigRequest request)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -2391,7 +2391,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>listReplicationPeers</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1946">listReplicationPeers</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1950">listReplicationPeers</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.ReplicationProtos.ListReplicationPeersRequest request)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -2408,7 +2408,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>listDecommissionedRegionServers</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1962">listDecommissionedRegionServers</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1966">listDecommissionedRegionServers</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ListDecommissionedRegionServersRequest request)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -2425,7 +2425,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>decommissionRegionServers</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DecommissionRegionServersResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1986">decommissionRegionServers</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DecommissionRegionServersResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.1990">decommissionRegionServers</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.DecommissionRegionServersRequest request)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -2442,7 +2442,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>recommissionRegionServer</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.2008">recommissionRegionServer</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.2012">recommissionRegionServer</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.RecommissionRegionServerRequest request)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -2459,7 +2459,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>requestLock</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.2031">requestLock</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.2035">requestLock</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockRequest request)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -2476,7 +2476,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>lockHeartbeat</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockHeartbeatResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.2102">lockHeartbeat</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockHeartbeatResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.2106">lockHeartbeat</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockHeartbeatRequest request)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -2495,7 +2495,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>reportRegionSpaceUse</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUseReportResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.2121">reportRegionSpaceUse</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUseReportResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.2125">reportRegionSpaceUse</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUseReportRequest request)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -2512,7 +2512,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>getSpaceQuotaRegionSizes</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaRegionSizesResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.2141">getSpaceQuotaRegionSizes</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaRegionSizesResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.2145">getSpaceQuotaRegionSizes</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaRegionSizesRequest request)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -2529,7 +2529,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>getQuotaStates</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetQuotaStatesResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.2175">getQuotaStates</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetQuotaStatesResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.2179">getQuotaStates</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetQuotaStatesRequest request)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -2546,7 +2546,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>clearDeadServers</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ClearDeadServersResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.2207">clearDeadServers</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ClearDeadServersResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.2211">clearDeadServers</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.ClearDeadServersRequest request)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -2563,7 +2563,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockList">
<li class="blockList">
<h4>reportProcedureDone</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportProcedureDoneResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.2241">reportProcedureDone</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportProcedureDoneResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.2245">reportProcedureDone</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportProcedureDoneRequest request)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -2580,7 +2580,7 @@ implements org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.Master
<ul class="blockListLast">
<li class="blockList">
<h4>reportFileArchival</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.FileArchiveNotificationResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.2255">reportFileArchival</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.FileArchiveNotificationResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html#line.2259">reportFileArchival</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.FileArchiveNotificationRequest request)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/MasterServices.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/MasterServices.html b/devapidocs/org/apache/hadoop/hbase/master/MasterServices.html
index e5b6270..5a536ab 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/MasterServices.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/MasterServices.html
@@ -1078,10 +1078,13 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="inte
<ul class="blockList">
<li class="blockList">
<h4>isInMaintenanceMode</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.356">isInMaintenanceMode</a>()</pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.357">isInMaintenanceMode</a>()
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if master is in maintanceMode</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - if the inquiry failed due to an IO problem</dd>
</dl>
</li>
</ul>
@@ -1091,7 +1094,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="inte
<ul class="blockList">
<li class="blockList">
<h4>abortProcedure</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.365">abortProcedure</a>(long procId,
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.366">abortProcedure</a>(long procId,
boolean mayInterruptIfRunning)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Abort a procedure.</div>
@@ -1112,7 +1115,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="inte
<ul class="blockList">
<li class="blockList">
<h4>getProcedures</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><?>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.373">getProcedures</a>()
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><?>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.374">getProcedures</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Get procedures</div>
<dl>
@@ -1129,7 +1132,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="inte
<ul class="blockList">
<li class="blockList">
<h4>getLocks</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResource.html" title="class in org.apache.hadoop.hbase.procedure2">LockedResource</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.380">getLocks</a>()
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResource.html" title="class in org.apache.hadoop.hbase.procedure2">LockedResource</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.381">getLocks</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Get locks</div>
<dl>
@@ -1146,7 +1149,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="inte
<ul class="blockList">
<li class="blockList">
<h4>listTableDescriptorsByNamespace</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.388">listTableDescriptorsByNamespace</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.389">listTableDescriptorsByNamespace</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Get list of table descriptors by namespace</div>
<dl>
@@ -1165,7 +1168,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="inte
<ul class="blockList">
<li class="blockList">
<h4>listTableNamesByNamespace</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.396">listTableNamesByNamespace</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.397">listTableNamesByNamespace</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Get list of table names by namespace</div>
<dl>
@@ -1184,7 +1187,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="inte
<ul class="blockList">
<li class="blockList">
<h4>getLastMajorCompactionTimestamp</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.404">getLastMajorCompactionTimestamp</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> table)
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.405">getLastMajorCompactionTimestamp</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> table)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -1203,7 +1206,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="inte
<ul class="blockList">
<li class="blockList">
<h4>getLastMajorCompactionTimestampForRegion</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.412">getLastMajorCompactionTimestampForRegion</a>(byte[] regionName)
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.413">getLastMajorCompactionTimestampForRegion</a>(byte[] regionName)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -1222,7 +1225,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="inte
<ul class="blockList">
<li class="blockList">
<h4>getLoadBalancer</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master">LoadBalancer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.417">getLoadBalancer</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master">LoadBalancer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.418">getLoadBalancer</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>load balancer</dd>
@@ -1235,7 +1238,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="inte
<ul class="blockList">
<li class="blockList">
<h4>isSplitOrMergeEnabled</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.419">isSplitOrMergeEnabled</a>(<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client">MasterSwitchType</a> switchType)</pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.420">isSplitOrMergeEnabled</a>(<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client">MasterSwitchType</a> switchType)</pre>
</li>
</ul>
<a name="getFavoredNodesManager--">
@@ -1244,7 +1247,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="inte
<ul class="blockList">
<li class="blockList">
<h4>getFavoredNodesManager</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesManager.html" title="class in org.apache.hadoop.hbase.favored">FavoredNodesManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.424">getFavoredNodesManager</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesManager.html" title="class in org.apache.hadoop.hbase.favored">FavoredNodesManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.425">getFavoredNodesManager</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Favored Nodes Manager</dd>
@@ -1257,7 +1260,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="inte
<ul class="blockList">
<li class="blockList">
<h4>addReplicationPeer</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.432">addReplicationPeer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId,
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.433">addReplicationPeer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId,
<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a> peerConfig,
boolean enabled)
throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a>,
@@ -1280,7 +1283,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="inte
<ul class="blockList">
<li class="blockList">
<h4>removeReplicationPeer</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.439">removeReplicationPeer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.440">removeReplicationPeer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)
throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Removes a peer and stops the replication</div>
@@ -1299,7 +1302,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="inte
<ul class="blockList">
<li class="blockList">
<h4>enableReplicationPeer</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.445">enableReplicationPeer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.446">enableReplicationPeer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)
throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Restart the replication stream to the specified peer</div>
@@ -1318,7 +1321,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="inte
<ul class="blockList">
<li class="blockList">
<h4>disableReplicationPeer</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.451">disableReplicationPeer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.452">disableReplicationPeer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)
throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Stop the replication stream to the specified peer</div>
@@ -1337,7 +1340,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="inte
<ul class="blockList">
<li class="blockList">
<h4>getReplicationPeerConfig</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.458">getReplicationPeerConfig</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)
+<pre><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.459">getReplicationPeerConfig</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)
throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Returns the configured ReplicationPeerConfig for the specified peer</div>
@@ -1358,7 +1361,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="inte
<ul class="blockList">
<li class="blockList">
<h4>getReplicationPeerManager</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.html" title="class in org.apache.hadoop.hbase.master.replication">ReplicationPeerManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.464">getReplicationPeerManager</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.html" title="class in org.apache.hadoop.hbase.master.replication">ReplicationPeerManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.465">getReplicationPeerManager</a>()</pre>
<div class="block">Returns the <a href="../../../../../org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.html" title="class in org.apache.hadoop.hbase.master.replication"><code>ReplicationPeerManager</code></a>.</div>
</li>
</ul>
@@ -1368,7 +1371,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="inte
<ul class="blockList">
<li class="blockList">
<h4>updateReplicationPeerConfig</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.471">updateReplicationPeerConfig</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId,
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.472">updateReplicationPeerConfig</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId,
<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a> peerConfig)
throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1389,7 +1392,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="inte
<ul class="blockList">
<li class="blockList">
<h4>listReplicationPeers</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerDescription</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.479">listReplicationPeers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> regex)
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerDescription</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.480">listReplicationPeers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> regex)
throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Return a list of replication peers.</div>
@@ -1410,7 +1413,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="inte
<ul class="blockList">
<li class="blockList">
<h4>getLockManager</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/master/locking/LockManager.html" title="class in org.apache.hadoop.hbase.master.locking">LockManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.485">getLockManager</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/master/locking/LockManager.html" title="class in org.apache.hadoop.hbase.master.locking">LockManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.486">getLockManager</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd><a href="../../../../../org/apache/hadoop/hbase/master/locking/LockManager.html" title="class in org.apache.hadoop.hbase.master.locking"><code>LockManager</code></a> to lock namespaces/tables/regions.</dd>
@@ -1423,7 +1426,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="inte
<ul class="blockList">
<li class="blockList">
<h4>getRegionServerVersion</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.487">getRegionServerVersion</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.488">getRegionServerVersion</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)</pre>
</li>
</ul>
<a name="checkIfShouldMoveSystemRegionAsync--">
@@ -1432,7 +1435,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="inte
<ul class="blockList">
<li class="blockList">
<h4>checkIfShouldMoveSystemRegionAsync</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.494">checkIfShouldMoveSystemRegionAsync</a>()</pre>
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.495">checkIfShouldMoveSystemRegionAsync</a>()</pre>
<div class="block">Called when a new RegionServer is added to the cluster.
Checks if new server has a newer version than any existing server and will move system tables
there if so.</div>
@@ -1444,7 +1447,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="inte
<ul class="blockList">
<li class="blockList">
<h4>recoverMeta</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.501">recoverMeta</a>()
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.502">recoverMeta</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Recover meta table. Will result in no-op is meta is already initialized. Any code that has
access to master and requires to access meta during process initialization can call this
@@ -1461,7 +1464,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="inte
<ul class="blockList">
<li class="blockList">
<h4>getClientIdAuditPrefix</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.503">getClientIdAuditPrefix</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.504">getClientIdAuditPrefix</a>()</pre>
</li>
</ul>
<a name="isClusterUp--">
@@ -1470,7 +1473,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="inte
<ul class="blockListLast">
<li class="blockList">
<h4>isClusterUp</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.508">isClusterUp</a>()</pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/MasterServices.html#line.509">isClusterUp</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>True if cluster is up; false if cluster is not up (we are shutting down).</dd>
[08/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.BufferNode.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.BufferNode.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.BufferNode.html
index 594ef24..17d5c40 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.BufferNode.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.BufferNode.html
@@ -170,241 +170,242 @@
<span class="sourceLineNo">162</span> }<a name="line.162"></a>
<span class="sourceLineNo">163</span><a name="line.163"></a>
<span class="sourceLineNo">164</span> /**<a name="line.164"></a>
-<span class="sourceLineNo">165</span> * Add a remote rpc. Be sure to check result for successful add.<a name="line.165"></a>
+<span class="sourceLineNo">165</span> * Add a remote rpc.<a name="line.165"></a>
<span class="sourceLineNo">166</span> * @param key the node identifier<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * @return True if we successfully added the operation.<a name="line.167"></a>
-<span class="sourceLineNo">168</span> */<a name="line.168"></a>
-<span class="sourceLineNo">169</span> public boolean addOperationToNode(final TRemote key, RemoteProcedure rp) {<a name="line.169"></a>
+<span class="sourceLineNo">167</span> */<a name="line.167"></a>
+<span class="sourceLineNo">168</span> public void addOperationToNode(final TRemote key, RemoteProcedure rp)<a name="line.168"></a>
+<span class="sourceLineNo">169</span> throws NullTargetServerDispatchException, NoServerDispatchException, NoNodeDispatchException {<a name="line.169"></a>
<span class="sourceLineNo">170</span> if (key == null) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span> // Key is remote server name. Be careful. It could have been nulled by a concurrent<a name="line.171"></a>
-<span class="sourceLineNo">172</span> // ServerCrashProcedure shutting down outstanding RPC requests. See remoteCallFailed.<a name="line.172"></a>
-<span class="sourceLineNo">173</span> return false;<a name="line.173"></a>
-<span class="sourceLineNo">174</span> }<a name="line.174"></a>
-<span class="sourceLineNo">175</span> assert key != null : "found null key for node";<a name="line.175"></a>
-<span class="sourceLineNo">176</span> BufferNode node = nodeMap.get(key);<a name="line.176"></a>
-<span class="sourceLineNo">177</span> if (node == null) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span> return false;<a name="line.178"></a>
-<span class="sourceLineNo">179</span> }<a name="line.179"></a>
-<span class="sourceLineNo">180</span> node.add(rp);<a name="line.180"></a>
-<span class="sourceLineNo">181</span> // Check our node still in the map; could have been removed by #removeNode.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> return nodeMap.containsValue(node);<a name="line.182"></a>
-<span class="sourceLineNo">183</span> }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span> /**<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * Remove a remote node<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * @param key the node identifier<a name="line.187"></a>
-<span class="sourceLineNo">188</span> */<a name="line.188"></a>
-<span class="sourceLineNo">189</span> public boolean removeNode(final TRemote key) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span> final BufferNode node = nodeMap.remove(key);<a name="line.190"></a>
-<span class="sourceLineNo">191</span> if (node == null) return false;<a name="line.191"></a>
-<span class="sourceLineNo">192</span> node.abortOperationsInQueue();<a name="line.192"></a>
-<span class="sourceLineNo">193</span> return true;<a name="line.193"></a>
-<span class="sourceLineNo">194</span> }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span> // ============================================================================================<a name="line.196"></a>
-<span class="sourceLineNo">197</span> // Task Helpers<a name="line.197"></a>
-<span class="sourceLineNo">198</span> // ============================================================================================<a name="line.198"></a>
-<span class="sourceLineNo">199</span> protected Future<Void> submitTask(Callable<Void> task) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span> return threadPool.submit(task);<a name="line.200"></a>
-<span class="sourceLineNo">201</span> }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span> protected Future<Void> submitTask(Callable<Void> task, long delay, TimeUnit unit) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span> final FutureTask<Void> futureTask = new FutureTask(task);<a name="line.204"></a>
-<span class="sourceLineNo">205</span> timeoutExecutor.add(new DelayedTask(futureTask, delay, unit));<a name="line.205"></a>
-<span class="sourceLineNo">206</span> return futureTask;<a name="line.206"></a>
-<span class="sourceLineNo">207</span> }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span> protected abstract void remoteDispatch(TRemote key, Set<RemoteProcedure> operations);<a name="line.209"></a>
-<span class="sourceLineNo">210</span> protected abstract void abortPendingOperations(TRemote key, Set<RemoteProcedure> operations);<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span> /**<a name="line.212"></a>
-<span class="sourceLineNo">213</span> * Data structure with reference to remote operation.<a name="line.213"></a>
-<span class="sourceLineNo">214</span> */<a name="line.214"></a>
-<span class="sourceLineNo">215</span> public static abstract class RemoteOperation {<a name="line.215"></a>
-<span class="sourceLineNo">216</span> private final RemoteProcedure remoteProcedure;<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span> protected RemoteOperation(final RemoteProcedure remoteProcedure) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span> this.remoteProcedure = remoteProcedure;<a name="line.219"></a>
-<span class="sourceLineNo">220</span> }<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span> public RemoteProcedure getRemoteProcedure() {<a name="line.222"></a>
-<span class="sourceLineNo">223</span> return remoteProcedure;<a name="line.223"></a>
-<span class="sourceLineNo">224</span> }<a name="line.224"></a>
-<span class="sourceLineNo">225</span> }<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span> /**<a name="line.227"></a>
-<span class="sourceLineNo">228</span> * Remote procedure reference.<a name="line.228"></a>
-<span class="sourceLineNo">229</span> */<a name="line.229"></a>
-<span class="sourceLineNo">230</span> public interface RemoteProcedure<TEnv, TRemote> {<a name="line.230"></a>
-<span class="sourceLineNo">231</span> /**<a name="line.231"></a>
-<span class="sourceLineNo">232</span> * For building the remote operation.<a name="line.232"></a>
-<span class="sourceLineNo">233</span> */<a name="line.233"></a>
-<span class="sourceLineNo">234</span> RemoteOperation remoteCallBuild(TEnv env, TRemote remote);<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span> /**<a name="line.236"></a>
-<span class="sourceLineNo">237</span> * Called when the executeProcedure call is failed.<a name="line.237"></a>
-<span class="sourceLineNo">238</span> */<a name="line.238"></a>
-<span class="sourceLineNo">239</span> void remoteCallFailed(TEnv env, TRemote remote, IOException exception);<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span> /**<a name="line.241"></a>
-<span class="sourceLineNo">242</span> * Called when RS tells the remote procedure is succeeded through the<a name="line.242"></a>
-<span class="sourceLineNo">243</span> * {@code reportProcedureDone} method.<a name="line.243"></a>
-<span class="sourceLineNo">244</span> */<a name="line.244"></a>
-<span class="sourceLineNo">245</span> void remoteOperationCompleted(TEnv env);<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span> /**<a name="line.247"></a>
-<span class="sourceLineNo">248</span> * Called when RS tells the remote procedure is failed through the {@code reportProcedureDone}<a name="line.248"></a>
-<span class="sourceLineNo">249</span> * method.<a name="line.249"></a>
-<span class="sourceLineNo">250</span> */<a name="line.250"></a>
-<span class="sourceLineNo">251</span> void remoteOperationFailed(TEnv env, RemoteProcedureException error);<a name="line.251"></a>
-<span class="sourceLineNo">252</span> }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span> /**<a name="line.254"></a>
-<span class="sourceLineNo">255</span> * Account of what procedures are running on remote node.<a name="line.255"></a>
-<span class="sourceLineNo">256</span> * @param <TEnv><a name="line.256"></a>
-<span class="sourceLineNo">257</span> * @param <TRemote><a name="line.257"></a>
-<span class="sourceLineNo">258</span> */<a name="line.258"></a>
-<span class="sourceLineNo">259</span> public interface RemoteNode<TEnv, TRemote> {<a name="line.259"></a>
-<span class="sourceLineNo">260</span> TRemote getKey();<a name="line.260"></a>
-<span class="sourceLineNo">261</span> void add(RemoteProcedure<TEnv, TRemote> operation);<a name="line.261"></a>
-<span class="sourceLineNo">262</span> void dispatch();<a name="line.262"></a>
-<span class="sourceLineNo">263</span> }<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span> protected ArrayListMultimap<Class<?>, RemoteOperation> buildAndGroupRequestByType(final TEnv env,<a name="line.265"></a>
-<span class="sourceLineNo">266</span> final TRemote remote, final Set<RemoteProcedure> remoteProcedures) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span> final ArrayListMultimap<Class<?>, RemoteOperation> requestByType = ArrayListMultimap.create();<a name="line.267"></a>
-<span class="sourceLineNo">268</span> for (RemoteProcedure proc: remoteProcedures) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span> RemoteOperation operation = proc.remoteCallBuild(env, remote);<a name="line.269"></a>
-<span class="sourceLineNo">270</span> requestByType.put(operation.getClass(), operation);<a name="line.270"></a>
-<span class="sourceLineNo">271</span> }<a name="line.271"></a>
-<span class="sourceLineNo">272</span> return requestByType;<a name="line.272"></a>
-<span class="sourceLineNo">273</span> }<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span> protected <T extends RemoteOperation> List<T> fetchType(<a name="line.275"></a>
-<span class="sourceLineNo">276</span> final ArrayListMultimap<Class<?>, RemoteOperation> requestByType, final Class<T> type) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span> return (List<T>)requestByType.removeAll(type);<a name="line.277"></a>
-<span class="sourceLineNo">278</span> }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span> // ============================================================================================<a name="line.280"></a>
-<span class="sourceLineNo">281</span> // Timeout Helpers<a name="line.281"></a>
-<span class="sourceLineNo">282</span> // ============================================================================================<a name="line.282"></a>
-<span class="sourceLineNo">283</span> private final class TimeoutExecutorThread extends Thread {<a name="line.283"></a>
-<span class="sourceLineNo">284</span> private final DelayQueue<DelayedWithTimeout> queue = new DelayQueue<DelayedWithTimeout>();<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span> public TimeoutExecutorThread() {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> super("ProcedureDispatcherTimeoutThread");<a name="line.287"></a>
-<span class="sourceLineNo">288</span> }<a name="line.288"></a>
-<span class="sourceLineNo">289</span><a name="line.289"></a>
-<span class="sourceLineNo">290</span> @Override<a name="line.290"></a>
-<span class="sourceLineNo">291</span> public void run() {<a name="line.291"></a>
-<span class="sourceLineNo">292</span> while (running.get()) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span> final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.293"></a>
-<span class="sourceLineNo">294</span> if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span> // the executor may be shutting down, and the task is just the shutdown request<a name="line.295"></a>
-<span class="sourceLineNo">296</span> continue;<a name="line.296"></a>
-<span class="sourceLineNo">297</span> }<a name="line.297"></a>
-<span class="sourceLineNo">298</span> if (task instanceof DelayedTask) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span> threadPool.execute(((DelayedTask)task).getObject());<a name="line.299"></a>
-<span class="sourceLineNo">300</span> } else {<a name="line.300"></a>
-<span class="sourceLineNo">301</span> ((BufferNode)task).dispatch();<a name="line.301"></a>
-<span class="sourceLineNo">302</span> }<a name="line.302"></a>
-<span class="sourceLineNo">303</span> }<a name="line.303"></a>
-<span class="sourceLineNo">304</span> }<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span> public void add(final DelayedWithTimeout delayed) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span> queue.add(delayed);<a name="line.307"></a>
-<span class="sourceLineNo">308</span> }<a name="line.308"></a>
-<span class="sourceLineNo">309</span><a name="line.309"></a>
-<span class="sourceLineNo">310</span> public void remove(final DelayedWithTimeout delayed) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span> queue.remove(delayed);<a name="line.311"></a>
-<span class="sourceLineNo">312</span> }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span> public void sendStopSignal() {<a name="line.314"></a>
-<span class="sourceLineNo">315</span> queue.add(DelayedUtil.DELAYED_POISON);<a name="line.315"></a>
-<span class="sourceLineNo">316</span> }<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span> public void awaitTermination() {<a name="line.318"></a>
-<span class="sourceLineNo">319</span> try {<a name="line.319"></a>
-<span class="sourceLineNo">320</span> final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.320"></a>
-<span class="sourceLineNo">321</span> for (int i = 0; isAlive(); ++i) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span> sendStopSignal();<a name="line.322"></a>
-<span class="sourceLineNo">323</span> join(250);<a name="line.323"></a>
-<span class="sourceLineNo">324</span> if (i > 0 && (i % 8) == 0) {<a name="line.324"></a>
-<span class="sourceLineNo">325</span> LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.325"></a>
-<span class="sourceLineNo">326</span> StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.326"></a>
-<span class="sourceLineNo">327</span> }<a name="line.327"></a>
-<span class="sourceLineNo">328</span> }<a name="line.328"></a>
-<span class="sourceLineNo">329</span> } catch (InterruptedException e) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span> LOG.warn(getName() + " join wait got interrupted", e);<a name="line.330"></a>
-<span class="sourceLineNo">331</span> }<a name="line.331"></a>
-<span class="sourceLineNo">332</span> }<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> // ============================================================================================<a name="line.335"></a>
-<span class="sourceLineNo">336</span> // Internals Helpers<a name="line.336"></a>
-<span class="sourceLineNo">337</span> // ============================================================================================<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span> /**<a name="line.339"></a>
-<span class="sourceLineNo">340</span> * Node that contains a set of RemoteProcedures<a name="line.340"></a>
-<span class="sourceLineNo">341</span> */<a name="line.341"></a>
-<span class="sourceLineNo">342</span> protected final class BufferNode extends DelayedContainerWithTimestamp<TRemote><a name="line.342"></a>
-<span class="sourceLineNo">343</span> implements RemoteNode<TEnv, TRemote> {<a name="line.343"></a>
-<span class="sourceLineNo">344</span> private Set<RemoteProcedure> operations;<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span> protected BufferNode(final TRemote key) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> super(key, 0);<a name="line.347"></a>
-<span class="sourceLineNo">348</span> }<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span> @Override<a name="line.350"></a>
-<span class="sourceLineNo">351</span> public TRemote getKey() {<a name="line.351"></a>
-<span class="sourceLineNo">352</span> return getObject();<a name="line.352"></a>
-<span class="sourceLineNo">353</span> }<a name="line.353"></a>
-<span class="sourceLineNo">354</span><a name="line.354"></a>
-<span class="sourceLineNo">355</span> @Override<a name="line.355"></a>
-<span class="sourceLineNo">356</span> public synchronized void add(final RemoteProcedure operation) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span> if (this.operations == null) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> this.operations = new HashSet<>();<a name="line.358"></a>
-<span class="sourceLineNo">359</span> setTimeout(EnvironmentEdgeManager.currentTime() + operationDelay);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> timeoutExecutor.add(this);<a name="line.360"></a>
-<span class="sourceLineNo">361</span> }<a name="line.361"></a>
-<span class="sourceLineNo">362</span> this.operations.add(operation);<a name="line.362"></a>
-<span class="sourceLineNo">363</span> if (this.operations.size() > queueMaxSize) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span> timeoutExecutor.remove(this);<a name="line.364"></a>
-<span class="sourceLineNo">365</span> dispatch();<a name="line.365"></a>
-<span class="sourceLineNo">366</span> }<a name="line.366"></a>
-<span class="sourceLineNo">367</span> }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span> @Override<a name="line.369"></a>
-<span class="sourceLineNo">370</span> public synchronized void dispatch() {<a name="line.370"></a>
-<span class="sourceLineNo">371</span> if (operations != null) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span> remoteDispatch(getKey(), operations);<a name="line.372"></a>
-<span class="sourceLineNo">373</span> this.operations = null;<a name="line.373"></a>
-<span class="sourceLineNo">374</span> }<a name="line.374"></a>
-<span class="sourceLineNo">375</span> }<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span> public synchronized void abortOperationsInQueue() {<a name="line.377"></a>
-<span class="sourceLineNo">378</span> if (operations != null) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span> abortPendingOperations(getKey(), operations);<a name="line.379"></a>
-<span class="sourceLineNo">380</span> this.operations = null;<a name="line.380"></a>
-<span class="sourceLineNo">381</span> }<a name="line.381"></a>
-<span class="sourceLineNo">382</span> }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span> @Override<a name="line.384"></a>
-<span class="sourceLineNo">385</span> public String toString() {<a name="line.385"></a>
-<span class="sourceLineNo">386</span> return super.toString() + ", operations=" + this.operations;<a name="line.386"></a>
-<span class="sourceLineNo">387</span> }<a name="line.387"></a>
-<span class="sourceLineNo">388</span> }<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span> /**<a name="line.390"></a>
-<span class="sourceLineNo">391</span> * Delayed object that holds a FutureTask.<a name="line.391"></a>
-<span class="sourceLineNo">392</span> * used to submit something later to the thread-pool.<a name="line.392"></a>
-<span class="sourceLineNo">393</span> */<a name="line.393"></a>
-<span class="sourceLineNo">394</span> private static final class DelayedTask extends DelayedContainerWithTimestamp<FutureTask<Void>> {<a name="line.394"></a>
-<span class="sourceLineNo">395</span> public DelayedTask(final FutureTask<Void> task, final long delay, final TimeUnit unit) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span> super(task, EnvironmentEdgeManager.currentTime() + unit.toMillis(delay));<a name="line.396"></a>
-<span class="sourceLineNo">397</span> }<a name="line.397"></a>
-<span class="sourceLineNo">398</span> }<a name="line.398"></a>
-<span class="sourceLineNo">399</span>}<a name="line.399"></a>
+<span class="sourceLineNo">171</span> throw new NullTargetServerDispatchException(rp.toString());<a name="line.171"></a>
+<span class="sourceLineNo">172</span> }<a name="line.172"></a>
+<span class="sourceLineNo">173</span> BufferNode node = nodeMap.get(key);<a name="line.173"></a>
+<span class="sourceLineNo">174</span> if (node == null) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span> // If null here, it means node has been removed because it crashed. This happens when server<a name="line.175"></a>
+<span class="sourceLineNo">176</span> // is expired in ServerManager. ServerCrashProcedure may or may not have run.<a name="line.176"></a>
+<span class="sourceLineNo">177</span> throw new NoServerDispatchException(key.toString() + "; " + rp.toString());<a name="line.177"></a>
+<span class="sourceLineNo">178</span> }<a name="line.178"></a>
+<span class="sourceLineNo">179</span> node.add(rp);<a name="line.179"></a>
+<span class="sourceLineNo">180</span> // Check our node still in the map; could have been removed by #removeNode.<a name="line.180"></a>
+<span class="sourceLineNo">181</span> if (!nodeMap.containsValue(node)) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span> throw new NoNodeDispatchException(key.toString() + "; " + rp.toString());<a name="line.182"></a>
+<span class="sourceLineNo">183</span> }<a name="line.183"></a>
+<span class="sourceLineNo">184</span> }<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span> /**<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * Remove a remote node<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * @param key the node identifier<a name="line.188"></a>
+<span class="sourceLineNo">189</span> */<a name="line.189"></a>
+<span class="sourceLineNo">190</span> public boolean removeNode(final TRemote key) {<a name="line.190"></a>
+<span class="sourceLineNo">191</span> final BufferNode node = nodeMap.remove(key);<a name="line.191"></a>
+<span class="sourceLineNo">192</span> if (node == null) return false;<a name="line.192"></a>
+<span class="sourceLineNo">193</span> node.abortOperationsInQueue();<a name="line.193"></a>
+<span class="sourceLineNo">194</span> return true;<a name="line.194"></a>
+<span class="sourceLineNo">195</span> }<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span> // ============================================================================================<a name="line.197"></a>
+<span class="sourceLineNo">198</span> // Task Helpers<a name="line.198"></a>
+<span class="sourceLineNo">199</span> // ============================================================================================<a name="line.199"></a>
+<span class="sourceLineNo">200</span> protected Future<Void> submitTask(Callable<Void> task) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span> return threadPool.submit(task);<a name="line.201"></a>
+<span class="sourceLineNo">202</span> }<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span> protected Future<Void> submitTask(Callable<Void> task, long delay, TimeUnit unit) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span> final FutureTask<Void> futureTask = new FutureTask(task);<a name="line.205"></a>
+<span class="sourceLineNo">206</span> timeoutExecutor.add(new DelayedTask(futureTask, delay, unit));<a name="line.206"></a>
+<span class="sourceLineNo">207</span> return futureTask;<a name="line.207"></a>
+<span class="sourceLineNo">208</span> }<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span> protected abstract void remoteDispatch(TRemote key, Set<RemoteProcedure> operations);<a name="line.210"></a>
+<span class="sourceLineNo">211</span> protected abstract void abortPendingOperations(TRemote key, Set<RemoteProcedure> operations);<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span> /**<a name="line.213"></a>
+<span class="sourceLineNo">214</span> * Data structure with reference to remote operation.<a name="line.214"></a>
+<span class="sourceLineNo">215</span> */<a name="line.215"></a>
+<span class="sourceLineNo">216</span> public static abstract class RemoteOperation {<a name="line.216"></a>
+<span class="sourceLineNo">217</span> private final RemoteProcedure remoteProcedure;<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span> protected RemoteOperation(final RemoteProcedure remoteProcedure) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span> this.remoteProcedure = remoteProcedure;<a name="line.220"></a>
+<span class="sourceLineNo">221</span> }<a name="line.221"></a>
+<span class="sourceLineNo">222</span><a name="line.222"></a>
+<span class="sourceLineNo">223</span> public RemoteProcedure getRemoteProcedure() {<a name="line.223"></a>
+<span class="sourceLineNo">224</span> return remoteProcedure;<a name="line.224"></a>
+<span class="sourceLineNo">225</span> }<a name="line.225"></a>
+<span class="sourceLineNo">226</span> }<a name="line.226"></a>
+<span class="sourceLineNo">227</span><a name="line.227"></a>
+<span class="sourceLineNo">228</span> /**<a name="line.228"></a>
+<span class="sourceLineNo">229</span> * Remote procedure reference.<a name="line.229"></a>
+<span class="sourceLineNo">230</span> */<a name="line.230"></a>
+<span class="sourceLineNo">231</span> public interface RemoteProcedure<TEnv, TRemote> {<a name="line.231"></a>
+<span class="sourceLineNo">232</span> /**<a name="line.232"></a>
+<span class="sourceLineNo">233</span> * For building the remote operation.<a name="line.233"></a>
+<span class="sourceLineNo">234</span> */<a name="line.234"></a>
+<span class="sourceLineNo">235</span> RemoteOperation remoteCallBuild(TEnv env, TRemote remote);<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span> /**<a name="line.237"></a>
+<span class="sourceLineNo">238</span> * Called when the executeProcedure call is failed.<a name="line.238"></a>
+<span class="sourceLineNo">239</span> */<a name="line.239"></a>
+<span class="sourceLineNo">240</span> void remoteCallFailed(TEnv env, TRemote remote, IOException exception);<a name="line.240"></a>
+<span class="sourceLineNo">241</span><a name="line.241"></a>
+<span class="sourceLineNo">242</span> /**<a name="line.242"></a>
+<span class="sourceLineNo">243</span> * Called when RS tells the remote procedure is succeeded through the<a name="line.243"></a>
+<span class="sourceLineNo">244</span> * {@code reportProcedureDone} method.<a name="line.244"></a>
+<span class="sourceLineNo">245</span> */<a name="line.245"></a>
+<span class="sourceLineNo">246</span> void remoteOperationCompleted(TEnv env);<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span> /**<a name="line.248"></a>
+<span class="sourceLineNo">249</span> * Called when RS tells the remote procedure is failed through the {@code reportProcedureDone}<a name="line.249"></a>
+<span class="sourceLineNo">250</span> * method.<a name="line.250"></a>
+<span class="sourceLineNo">251</span> */<a name="line.251"></a>
+<span class="sourceLineNo">252</span> void remoteOperationFailed(TEnv env, RemoteProcedureException error);<a name="line.252"></a>
+<span class="sourceLineNo">253</span> }<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span> /**<a name="line.255"></a>
+<span class="sourceLineNo">256</span> * Account of what procedures are running on remote node.<a name="line.256"></a>
+<span class="sourceLineNo">257</span> * @param <TEnv><a name="line.257"></a>
+<span class="sourceLineNo">258</span> * @param <TRemote><a name="line.258"></a>
+<span class="sourceLineNo">259</span> */<a name="line.259"></a>
+<span class="sourceLineNo">260</span> public interface RemoteNode<TEnv, TRemote> {<a name="line.260"></a>
+<span class="sourceLineNo">261</span> TRemote getKey();<a name="line.261"></a>
+<span class="sourceLineNo">262</span> void add(RemoteProcedure<TEnv, TRemote> operation);<a name="line.262"></a>
+<span class="sourceLineNo">263</span> void dispatch();<a name="line.263"></a>
+<span class="sourceLineNo">264</span> }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span> protected ArrayListMultimap<Class<?>, RemoteOperation> buildAndGroupRequestByType(final TEnv env,<a name="line.266"></a>
+<span class="sourceLineNo">267</span> final TRemote remote, final Set<RemoteProcedure> remoteProcedures) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span> final ArrayListMultimap<Class<?>, RemoteOperation> requestByType = ArrayListMultimap.create();<a name="line.268"></a>
+<span class="sourceLineNo">269</span> for (RemoteProcedure proc: remoteProcedures) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span> RemoteOperation operation = proc.remoteCallBuild(env, remote);<a name="line.270"></a>
+<span class="sourceLineNo">271</span> requestByType.put(operation.getClass(), operation);<a name="line.271"></a>
+<span class="sourceLineNo">272</span> }<a name="line.272"></a>
+<span class="sourceLineNo">273</span> return requestByType;<a name="line.273"></a>
+<span class="sourceLineNo">274</span> }<a name="line.274"></a>
+<span class="sourceLineNo">275</span><a name="line.275"></a>
+<span class="sourceLineNo">276</span> protected <T extends RemoteOperation> List<T> fetchType(<a name="line.276"></a>
+<span class="sourceLineNo">277</span> final ArrayListMultimap<Class<?>, RemoteOperation> requestByType, final Class<T> type) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span> return (List<T>)requestByType.removeAll(type);<a name="line.278"></a>
+<span class="sourceLineNo">279</span> }<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span> // ============================================================================================<a name="line.281"></a>
+<span class="sourceLineNo">282</span> // Timeout Helpers<a name="line.282"></a>
+<span class="sourceLineNo">283</span> // ============================================================================================<a name="line.283"></a>
+<span class="sourceLineNo">284</span> private final class TimeoutExecutorThread extends Thread {<a name="line.284"></a>
+<span class="sourceLineNo">285</span> private final DelayQueue<DelayedWithTimeout> queue = new DelayQueue<DelayedWithTimeout>();<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span> public TimeoutExecutorThread() {<a name="line.287"></a>
+<span class="sourceLineNo">288</span> super("ProcedureDispatcherTimeoutThread");<a name="line.288"></a>
+<span class="sourceLineNo">289</span> }<a name="line.289"></a>
+<span class="sourceLineNo">290</span><a name="line.290"></a>
+<span class="sourceLineNo">291</span> @Override<a name="line.291"></a>
+<span class="sourceLineNo">292</span> public void run() {<a name="line.292"></a>
+<span class="sourceLineNo">293</span> while (running.get()) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span> final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.294"></a>
+<span class="sourceLineNo">295</span> if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.295"></a>
+<span class="sourceLineNo">296</span> // the executor may be shutting down, and the task is just the shutdown request<a name="line.296"></a>
+<span class="sourceLineNo">297</span> continue;<a name="line.297"></a>
+<span class="sourceLineNo">298</span> }<a name="line.298"></a>
+<span class="sourceLineNo">299</span> if (task instanceof DelayedTask) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span> threadPool.execute(((DelayedTask)task).getObject());<a name="line.300"></a>
+<span class="sourceLineNo">301</span> } else {<a name="line.301"></a>
+<span class="sourceLineNo">302</span> ((BufferNode)task).dispatch();<a name="line.302"></a>
+<span class="sourceLineNo">303</span> }<a name="line.303"></a>
+<span class="sourceLineNo">304</span> }<a name="line.304"></a>
+<span class="sourceLineNo">305</span> }<a name="line.305"></a>
+<span class="sourceLineNo">306</span><a name="line.306"></a>
+<span class="sourceLineNo">307</span> public void add(final DelayedWithTimeout delayed) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span> queue.add(delayed);<a name="line.308"></a>
+<span class="sourceLineNo">309</span> }<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span> public void remove(final DelayedWithTimeout delayed) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span> queue.remove(delayed);<a name="line.312"></a>
+<span class="sourceLineNo">313</span> }<a name="line.313"></a>
+<span class="sourceLineNo">314</span><a name="line.314"></a>
+<span class="sourceLineNo">315</span> public void sendStopSignal() {<a name="line.315"></a>
+<span class="sourceLineNo">316</span> queue.add(DelayedUtil.DELAYED_POISON);<a name="line.316"></a>
+<span class="sourceLineNo">317</span> }<a name="line.317"></a>
+<span class="sourceLineNo">318</span><a name="line.318"></a>
+<span class="sourceLineNo">319</span> public void awaitTermination() {<a name="line.319"></a>
+<span class="sourceLineNo">320</span> try {<a name="line.320"></a>
+<span class="sourceLineNo">321</span> final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.321"></a>
+<span class="sourceLineNo">322</span> for (int i = 0; isAlive(); ++i) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span> sendStopSignal();<a name="line.323"></a>
+<span class="sourceLineNo">324</span> join(250);<a name="line.324"></a>
+<span class="sourceLineNo">325</span> if (i > 0 && (i % 8) == 0) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span> LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.326"></a>
+<span class="sourceLineNo">327</span> StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.327"></a>
+<span class="sourceLineNo">328</span> }<a name="line.328"></a>
+<span class="sourceLineNo">329</span> }<a name="line.329"></a>
+<span class="sourceLineNo">330</span> } catch (InterruptedException e) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span> LOG.warn(getName() + " join wait got interrupted", e);<a name="line.331"></a>
+<span class="sourceLineNo">332</span> }<a name="line.332"></a>
+<span class="sourceLineNo">333</span> }<a name="line.333"></a>
+<span class="sourceLineNo">334</span> }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span> // ============================================================================================<a name="line.336"></a>
+<span class="sourceLineNo">337</span> // Internals Helpers<a name="line.337"></a>
+<span class="sourceLineNo">338</span> // ============================================================================================<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span> /**<a name="line.340"></a>
+<span class="sourceLineNo">341</span> * Node that contains a set of RemoteProcedures<a name="line.341"></a>
+<span class="sourceLineNo">342</span> */<a name="line.342"></a>
+<span class="sourceLineNo">343</span> protected final class BufferNode extends DelayedContainerWithTimestamp<TRemote><a name="line.343"></a>
+<span class="sourceLineNo">344</span> implements RemoteNode<TEnv, TRemote> {<a name="line.344"></a>
+<span class="sourceLineNo">345</span> private Set<RemoteProcedure> operations;<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span> protected BufferNode(final TRemote key) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span> super(key, 0);<a name="line.348"></a>
+<span class="sourceLineNo">349</span> }<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span> @Override<a name="line.351"></a>
+<span class="sourceLineNo">352</span> public TRemote getKey() {<a name="line.352"></a>
+<span class="sourceLineNo">353</span> return getObject();<a name="line.353"></a>
+<span class="sourceLineNo">354</span> }<a name="line.354"></a>
+<span class="sourceLineNo">355</span><a name="line.355"></a>
+<span class="sourceLineNo">356</span> @Override<a name="line.356"></a>
+<span class="sourceLineNo">357</span> public synchronized void add(final RemoteProcedure operation) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span> if (this.operations == null) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span> this.operations = new HashSet<>();<a name="line.359"></a>
+<span class="sourceLineNo">360</span> setTimeout(EnvironmentEdgeManager.currentTime() + operationDelay);<a name="line.360"></a>
+<span class="sourceLineNo">361</span> timeoutExecutor.add(this);<a name="line.361"></a>
+<span class="sourceLineNo">362</span> }<a name="line.362"></a>
+<span class="sourceLineNo">363</span> this.operations.add(operation);<a name="line.363"></a>
+<span class="sourceLineNo">364</span> if (this.operations.size() > queueMaxSize) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span> timeoutExecutor.remove(this);<a name="line.365"></a>
+<span class="sourceLineNo">366</span> dispatch();<a name="line.366"></a>
+<span class="sourceLineNo">367</span> }<a name="line.367"></a>
+<span class="sourceLineNo">368</span> }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span> @Override<a name="line.370"></a>
+<span class="sourceLineNo">371</span> public synchronized void dispatch() {<a name="line.371"></a>
+<span class="sourceLineNo">372</span> if (operations != null) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> remoteDispatch(getKey(), operations);<a name="line.373"></a>
+<span class="sourceLineNo">374</span> this.operations = null;<a name="line.374"></a>
+<span class="sourceLineNo">375</span> }<a name="line.375"></a>
+<span class="sourceLineNo">376</span> }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span> public synchronized void abortOperationsInQueue() {<a name="line.378"></a>
+<span class="sourceLineNo">379</span> if (operations != null) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span> abortPendingOperations(getKey(), operations);<a name="line.380"></a>
+<span class="sourceLineNo">381</span> this.operations = null;<a name="line.381"></a>
+<span class="sourceLineNo">382</span> }<a name="line.382"></a>
+<span class="sourceLineNo">383</span> }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
+<span class="sourceLineNo">386</span> public String toString() {<a name="line.386"></a>
+<span class="sourceLineNo">387</span> return super.toString() + ", operations=" + this.operations;<a name="line.387"></a>
+<span class="sourceLineNo">388</span> }<a name="line.388"></a>
+<span class="sourceLineNo">389</span> }<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span> /**<a name="line.391"></a>
+<span class="sourceLineNo">392</span> * Delayed object that holds a FutureTask.<a name="line.392"></a>
+<span class="sourceLineNo">393</span> * used to submit something later to the thread-pool.<a name="line.393"></a>
+<span class="sourceLineNo">394</span> */<a name="line.394"></a>
+<span class="sourceLineNo">395</span> private static final class DelayedTask extends DelayedContainerWithTimestamp<FutureTask<Void>> {<a name="line.395"></a>
+<span class="sourceLineNo">396</span> public DelayedTask(final FutureTask<Void> task, final long delay, final TimeUnit unit) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span> super(task, EnvironmentEdgeManager.currentTime() + unit.toMillis(delay));<a name="line.397"></a>
+<span class="sourceLineNo">398</span> }<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>}<a name="line.400"></a>
[49/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/apidocs/deprecated-list.html
----------------------------------------------------------------------
diff --git a/apidocs/deprecated-list.html b/apidocs/deprecated-list.html
index 6463414..22e3d45 100644
--- a/apidocs/deprecated-list.html
+++ b/apidocs/deprecated-list.html
@@ -2249,7 +2249,7 @@
</tr>
<tr class="altColor">
<td class="colOne"><a href="org/apache/hadoop/hbase/client/Scan.html#setStopRow-byte:A-">org.apache.hadoop.hbase.client.Scan.setStopRow(byte[])</a>
-<div class="block"><span class="deprecationComment">use <a href="org/apache/hadoop/hbase/client/Scan.html#withStartRow-byte:A-"><code>Scan.withStartRow(byte[])</code></a> instead. This method may change the inclusive of
+<div class="block"><span class="deprecationComment">use <a href="org/apache/hadoop/hbase/client/Scan.html#withStopRow-byte:A-"><code>Scan.withStopRow(byte[])</code></a> instead. This method may change the inclusive of
the stop row to keep compatible with the old behavior.</span></div>
</td>
</tr>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/apidocs/index-all.html
----------------------------------------------------------------------
diff --git a/apidocs/index-all.html b/apidocs/index-all.html
index c388812..415bbef 100644
--- a/apidocs/index-all.html
+++ b/apidocs/index-all.html
@@ -17051,7 +17051,7 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Scan.html#setStopRow-byte:A-">setStopRow(byte[])</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></dt>
<dd>
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
-<div class="block"><span class="deprecationComment">use <a href="org/apache/hadoop/hbase/client/Scan.html#withStartRow-byte:A-"><code>Scan.withStartRow(byte[])</code></a> instead. This method may change the inclusive of
+<div class="block"><span class="deprecationComment">use <a href="org/apache/hadoop/hbase/client/Scan.html#withStopRow-byte:A-"><code>Scan.withStopRow(byte[])</code></a> instead. This method may change the inclusive of
the stop row to keep compatible with the old behavior.</span></div>
</div>
</dd>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/apidocs/org/apache/hadoop/hbase/client/Scan.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/client/Scan.html b/apidocs/org/apache/hadoop/hbase/client/Scan.html
index 5a02583..c424600 100644
--- a/apidocs/org/apache/hadoop/hbase/client/Scan.html
+++ b/apidocs/org/apache/hadoop/hbase/client/Scan.html
@@ -708,7 +708,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Query.html" title
<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setStopRow-byte:A-">setStopRow</a></span>(byte[] stopRow)</code>
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
-<div class="block"><span class="deprecationComment">use <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#withStartRow-byte:A-"><code>withStartRow(byte[])</code></a> instead. This method may change the inclusive of
+<div class="block"><span class="deprecationComment">use <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#withStopRow-byte:A-"><code>withStopRow(byte[])</code></a> instead. This method may change the inclusive of
the stop row to keep compatible with the old behavior.</span></div>
</div>
</td>
@@ -1223,7 +1223,7 @@ public <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" ti
<h4>setStopRow</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
public <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.490">setStopRow</a>(byte[] stopRow)</pre>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span> <span class="deprecationComment">use <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#withStartRow-byte:A-"><code>withStartRow(byte[])</code></a> instead. This method may change the inclusive of
+<div class="block"><span class="deprecatedLabel">Deprecated.</span> <span class="deprecationComment">use <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#withStopRow-byte:A-"><code>withStopRow(byte[])</code></a> instead. This method may change the inclusive of
the stop row to keep compatible with the old behavior.</span></div>
<div class="block">Set the stop row of the scan.
<p>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/apidocs/org/apache/hadoop/hbase/client/class-use/Scan.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/client/class-use/Scan.html b/apidocs/org/apache/hadoop/hbase/client/class-use/Scan.html
index 14f5be1..3080d57 100644
--- a/apidocs/org/apache/hadoop/hbase/client/class-use/Scan.html
+++ b/apidocs/org/apache/hadoop/hbase/client/class-use/Scan.html
@@ -350,7 +350,7 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
<td class="colLast"><span class="typeNameLabel">Scan.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html#setStopRow-byte:A-">setStopRow</a></span>(byte[] stopRow)</code>
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
-<div class="block"><span class="deprecationComment">use <a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html#withStartRow-byte:A-"><code>withStartRow(byte[])</code></a> instead. This method may change the inclusive of
+<div class="block"><span class="deprecationComment">use <a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html#withStopRow-byte:A-"><code>withStopRow(byte[])</code></a> instead. This method may change the inclusive of
the stop row to keep compatible with the old behavior.</span></div>
</div>
</td>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/apidocs/src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html b/apidocs/src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html
index 070e349..efeb69a 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html
@@ -491,7 +491,7 @@
<span class="sourceLineNo">483</span> * @return this<a name="line.483"></a>
<span class="sourceLineNo">484</span> * @throws IllegalArgumentException if stopRow does not meet criteria for a row key (when length<a name="line.484"></a>
<span class="sourceLineNo">485</span> * exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.485"></a>
-<span class="sourceLineNo">486</span> * @deprecated use {@link #withStartRow(byte[])} instead. This method may change the inclusive of<a name="line.486"></a>
+<span class="sourceLineNo">486</span> * @deprecated use {@link #withStopRow(byte[])} instead. This method may change the inclusive of<a name="line.486"></a>
<span class="sourceLineNo">487</span> * the stop row to keep compatible with the old behavior.<a name="line.487"></a>
<span class="sourceLineNo">488</span> */<a name="line.488"></a>
<span class="sourceLineNo">489</span> @Deprecated<a name="line.489"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/apidocs/src-html/org/apache/hadoop/hbase/client/Scan.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/client/Scan.html b/apidocs/src-html/org/apache/hadoop/hbase/client/Scan.html
index 070e349..efeb69a 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/client/Scan.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/client/Scan.html
@@ -491,7 +491,7 @@
<span class="sourceLineNo">483</span> * @return this<a name="line.483"></a>
<span class="sourceLineNo">484</span> * @throws IllegalArgumentException if stopRow does not meet criteria for a row key (when length<a name="line.484"></a>
<span class="sourceLineNo">485</span> * exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.485"></a>
-<span class="sourceLineNo">486</span> * @deprecated use {@link #withStartRow(byte[])} instead. This method may change the inclusive of<a name="line.486"></a>
+<span class="sourceLineNo">486</span> * @deprecated use {@link #withStopRow(byte[])} instead. This method may change the inclusive of<a name="line.486"></a>
<span class="sourceLineNo">487</span> * the stop row to keep compatible with the old behavior.<a name="line.487"></a>
<span class="sourceLineNo">488</span> */<a name="line.488"></a>
<span class="sourceLineNo">489</span> @Deprecated<a name="line.489"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index faa972a..7771653 100644
--- a/book.html
+++ b/book.html
@@ -12111,7 +12111,8 @@ You also need to enable the DataBlockEncoder for the column family, for encoding
Tag compression uses dictionary encoding.</p>
</div>
<div class="paragraph">
-<p>Tag compression is not supported when using WAL encryption.</p>
+<p>Coprocessors that run server-side on RegionServers can perform get and set operations on cell Tags. Tags are stripped out at the RPC layer before the read response is sent back, so clients do not see these tags.
+Tag compression is not supported when using WAL encryption.</p>
</div>
</div>
</div>
@@ -38050,7 +38051,7 @@ The server will return cellblocks compressed using this same compressor as long
<div id="footer">
<div id="footer-text">
Version 3.0.0-SNAPSHOT<br>
-Last updated 2018-06-04 14:29:53 UTC
+Last updated 2018-06-05 14:29:53 UTC
</div>
</div>
</body>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index 336bd6e..ad47e17 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180604" />
+ <meta name="Date-Revision-yyyymmdd" content="20180605" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase –
Bulk Loads in Apache HBase (TM)
@@ -306,7 +306,7 @@ under the License. -->
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-06-04</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-06-05</li>
</p>
</div>
[32/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html b/devapidocs/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html
index 90fd656..85c6bf7 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html
@@ -972,7 +972,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
<ul class="blockList">
<li class="blockList">
<h4>removeReplicatorIfQueueIsEmpty</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.442">removeReplicatorIfQueueIsEmpty</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.443">removeReplicatorIfQueueIsEmpty</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)
throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#removeReplicatorIfQueueIsEmpty-org.apache.hadoop.hbase.ServerName-">ReplicationQueueStorage</a></code></span></div>
<div class="block">Remove the record of region server if the queue is empty.</div>
@@ -990,7 +990,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
<ul class="blockList">
<li class="blockList">
<h4>getListOfReplicators0</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.452">getListOfReplicators0</a>()
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.453">getListOfReplicators0</a>()
throws org.apache.zookeeper.KeeperException</pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -1004,7 +1004,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
<ul class="blockList">
<li class="blockList">
<h4>getListOfReplicators</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.461">getListOfReplicators</a>()
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.462">getListOfReplicators</a>()
throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#getListOfReplicators--">ReplicationQueueStorage</a></code></span></div>
<div class="block">Get a list of all region servers that have outstanding replication queues. These servers could
@@ -1025,7 +1025,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
<ul class="blockList">
<li class="blockList">
<h4>getWALsInQueue0</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.469">getWALsInQueue0</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.470">getWALsInQueue0</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> queueId)
throws org.apache.zookeeper.KeeperException</pre>
<dl>
@@ -1040,7 +1040,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
<ul class="blockList">
<li class="blockList">
<h4>getWALsInQueue</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.477">getWALsInQueue</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.478">getWALsInQueue</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> queueId)
throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#getWALsInQueue-org.apache.hadoop.hbase.ServerName-java.lang.String-">ReplicationQueueStorage</a></code></span></div>
@@ -1064,7 +1064,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
<ul class="blockList">
<li class="blockList">
<h4>getAllQueues0</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.488">getAllQueues0</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.489">getAllQueues0</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)
throws org.apache.zookeeper.KeeperException</pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -1078,7 +1078,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
<ul class="blockList">
<li class="blockList">
<h4>getAllQueues</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.494">getAllQueues</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.495">getAllQueues</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)
throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#getAllQueues-org.apache.hadoop.hbase.ServerName-">ReplicationQueueStorage</a></code></span></div>
<div class="block">Get a list of all queues for the specified region server.</div>
@@ -1100,7 +1100,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
<ul class="blockList">
<li class="blockList">
<h4>getQueuesZNodeCversion</h4>
-<pre>protected int <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.504">getQueuesZNodeCversion</a>()
+<pre>protected int <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.505">getQueuesZNodeCversion</a>()
throws org.apache.zookeeper.KeeperException</pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -1114,7 +1114,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
<ul class="blockList">
<li class="blockList">
<h4>getAllWALs</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.511">getAllWALs</a>()
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.512">getAllWALs</a>()
throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#getAllWALs--">ReplicationQueueStorage</a></code></span></div>
<div class="block">Load all wals in all replication queues. This method guarantees to return a snapshot which
@@ -1134,7 +1134,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
<ul class="blockList">
<li class="blockList">
<h4>getHFileRefsPeerNode</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.538">getHFileRefsPeerNode</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)</pre>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.539">getHFileRefsPeerNode</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)</pre>
</li>
</ul>
<a name="getHFileNode-java.lang.String-java.lang.String-">
@@ -1143,7 +1143,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
<ul class="blockList">
<li class="blockList">
<h4>getHFileNode</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.542">getHFileNode</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerNode,
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.543">getHFileNode</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerNode,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> fileName)</pre>
</li>
</ul>
@@ -1153,7 +1153,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
<ul class="blockList">
<li class="blockList">
<h4>addPeerToHFileRefs</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.547">addPeerToHFileRefs</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.548">addPeerToHFileRefs</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)
throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#addPeerToHFileRefs-java.lang.String-">ReplicationQueueStorage</a></code></span></div>
<div class="block">Add a peer to hfile reference queue if peer does not exist.</div>
@@ -1173,7 +1173,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
<ul class="blockList">
<li class="blockList">
<h4>removePeerFromHFileRefs</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.561">removePeerFromHFileRefs</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.562">removePeerFromHFileRefs</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)
throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#removePeerFromHFileRefs-java.lang.String-">ReplicationQueueStorage</a></code></span></div>
<div class="block">Remove a peer from hfile reference queue.</div>
@@ -1193,7 +1193,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
<ul class="blockList">
<li class="blockList">
<h4>addHFileRefs</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.577">addHFileRefs</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.578">addHFileRefs</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a><org.apache.hadoop.fs.Path,org.apache.hadoop.fs.Path>> pairs)
throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#addHFileRefs-java.lang.String-java.util.List-">ReplicationQueueStorage</a></code></span></div>
@@ -1216,7 +1216,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
<ul class="blockList">
<li class="blockList">
<h4>removeHFileRefs</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.594">removeHFileRefs</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.595">removeHFileRefs</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> files)
throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#removeHFileRefs-java.lang.String-java.util.List-">ReplicationQueueStorage</a></code></span></div>
@@ -1238,7 +1238,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
<ul class="blockList">
<li class="blockList">
<h4>getAllPeersFromHFileRefsQueue0</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.609">getAllPeersFromHFileRefsQueue0</a>()
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.610">getAllPeersFromHFileRefsQueue0</a>()
throws org.apache.zookeeper.KeeperException</pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -1252,7 +1252,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
<ul class="blockList">
<li class="blockList">
<h4>getAllPeersFromHFileRefsQueue</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.615">getAllPeersFromHFileRefsQueue</a>()
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.616">getAllPeersFromHFileRefsQueue</a>()
throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#getAllPeersFromHFileRefsQueue--">ReplicationQueueStorage</a></code></span></div>
<div class="block">Get list of all peers from hfile reference queue.</div>
@@ -1272,7 +1272,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
<ul class="blockList">
<li class="blockList">
<h4>getReplicableHFiles0</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.624">getReplicableHFiles0</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.625">getReplicableHFiles0</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)
throws org.apache.zookeeper.KeeperException</pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -1286,7 +1286,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
<ul class="blockList">
<li class="blockList">
<h4>getReplicableHFiles</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.631">getReplicableHFiles</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.632">getReplicableHFiles</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)
throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#getReplicableHFiles-java.lang.String-">ReplicationQueueStorage</a></code></span></div>
<div class="block">Get a list of all hfile references in the given peer.</div>
@@ -1308,7 +1308,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
<ul class="blockList">
<li class="blockList">
<h4>getHFileRefsZNodeCversion</h4>
-<pre>protected int <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.642">getHFileRefsZNodeCversion</a>()
+<pre>protected int <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.643">getHFileRefsZNodeCversion</a>()
throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -1322,7 +1322,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
<ul class="blockListLast">
<li class="blockList">
<h4>getAllHFileRefs</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.653">getAllHFileRefs</a>()
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ZKReplicationQueueStorage.html#line.654">getAllHFileRefs</a>()
throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html#getAllHFileRefs--">ReplicationQueueStorage</a></code></span></div>
<div class="block">Load all hfile references in all replication queues. This method guarantees to return a
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
index d1e114d..193a3a3032 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
@@ -198,8 +198,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceFactoryImpl.SourceHolder.html" title="enum in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">MetricsReplicationSourceFactoryImpl.SourceHolder</span></a></li>
<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">ReplicationSourceShipper.WorkerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceFactoryImpl.SourceHolder.html" title="enum in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">MetricsReplicationSourceFactoryImpl.SourceHolder</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
index e0eb9a0..d02c856 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -137,9 +137,9 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
index 67b7e3a..dfa02b5 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -191,9 +191,9 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
+<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
index 4ade4c1..2853d09 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -200,8 +200,8 @@
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.ThriftServerType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftMetrics.ThriftServerType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftServerRunner.ImplType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftServerRunner.ImplType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftServerRunner.ImplType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftServerRunner.ImplType</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
index 78caaed..708b5f1 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -533,13 +533,13 @@
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLock.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLock.ReferenceType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HBaseFsck.ErrorReporter.ERROR_CODE</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a><T>)</li>
<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a><T>)</li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HBaseFsck.ErrorReporter.ERROR_CODE</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a><T>)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index c0e28b4..9ec5b35 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -189,8 +189,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/RegionGroupingProvider.Strategies.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">RegionGroupingProvider.Strategies</span></a></li>
<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALFactory.Providers</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/RegionGroupingProvider.Strategies.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">RegionGroupingProvider.Strategies</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/overview-tree.html b/devapidocs/overview-tree.html
index b1e29cd..6336953 100644
--- a/devapidocs/overview-tree.html
+++ b/devapidocs/overview-tree.html
@@ -2402,6 +2402,7 @@
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/ReversedKeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ReversedKeyValueHeap</span></a></li>
</ul>
</li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SnapshotSegmentScanner</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">StoreScanner</span></a> (implements org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">ChangedReadersObserver</a>, org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/InternalScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">InternalScanner</a>, org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>)
<ul>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MobStoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MobStoreScanner</span></a></li>
@@ -3895,7 +3896,13 @@
<li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/UnknownScannerException.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">UnknownScannerException</span></a></li>
</ul>
</li>
-<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">FailedRemoteDispatchException</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">FailedRemoteDispatchException</span></a>
+<ul>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">NoNodeDispatchException</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">NoServerDispatchException</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">NullTargetServerDispatchException</span></a></li>
+</ul>
+</li>
<li type="circle">org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/FailedServerException.html" title="class in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">FailedServerException</span></a></li>
<li type="circle">org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/FallbackDisallowedException.html" title="class in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">FallbackDisallowedException</span></a></li>
<li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/LeaseNotRecoveredException.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">LeaseNotRecoveredException</span></a></li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/serialized-form.html
----------------------------------------------------------------------
diff --git a/devapidocs/serialized-form.html b/devapidocs/serialized-form.html
index b0dd06d..cbdfec9 100644
--- a/devapidocs/serialized-form.html
+++ b/devapidocs/serialized-form.html
@@ -1231,16 +1231,6 @@
</ul>
</li>
<li class="blockList">
-<h2 title="Package">Package org.apache.hadoop.hbase.master.assignment</h2>
-<ul class="blockList">
-<li class="blockList"><a name="org.apache.hadoop.hbase.master.assignment.FailedRemoteDispatchException">
-<!-- -->
-</a>
-<h3>Class <a href="org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.master.assignment">org.apache.hadoop.hbase.master.assignment.FailedRemoteDispatchException</a> extends <a href="org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a> implements Serializable</h3>
-</li>
-</ul>
-</li>
-<li class="blockList">
<h2 title="Package">Package org.apache.hadoop.hbase.master.procedure</h2>
<ul class="blockList">
<li class="blockList"><a name="org.apache.hadoop.hbase.master.procedure.ServerCrashException">
@@ -1287,6 +1277,11 @@
</a>
<h3>Class <a href="org/apache/hadoop/hbase/procedure2/BadProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2.BadProcedureException</a> extends <a href="org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a> implements Serializable</h3>
</li>
+<li class="blockList"><a name="org.apache.hadoop.hbase.procedure2.FailedRemoteDispatchException">
+<!-- -->
+</a>
+<h3>Class <a href="org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2.FailedRemoteDispatchException</a> extends <a href="org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a> implements Serializable</h3>
+</li>
<li class="blockList"><a name="org.apache.hadoop.hbase.procedure2.LockAndQueue">
<!-- -->
</a>
@@ -1307,6 +1302,21 @@
</li>
</ul>
</li>
+<li class="blockList"><a name="org.apache.hadoop.hbase.procedure2.NoNodeDispatchException">
+<!-- -->
+</a>
+<h3>Class <a href="org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2.NoNodeDispatchException</a> extends <a href="org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">FailedRemoteDispatchException</a> implements Serializable</h3>
+</li>
+<li class="blockList"><a name="org.apache.hadoop.hbase.procedure2.NoServerDispatchException">
+<!-- -->
+</a>
+<h3>Class <a href="org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2.NoServerDispatchException</a> extends <a href="org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">FailedRemoteDispatchException</a> implements Serializable</h3>
+</li>
+<li class="blockList"><a name="org.apache.hadoop.hbase.procedure2.NullTargetServerDispatchException">
+<!-- -->
+</a>
+<h3>Class <a href="org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2.NullTargetServerDispatchException</a> extends <a href="org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">FailedRemoteDispatchException</a> implements Serializable</h3>
+</li>
<li class="blockList"><a name="org.apache.hadoop.hbase.procedure2.ProcedureAbortedException">
<!-- -->
</a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
index ac9211c..5903516 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -16,11 +16,11 @@
<span class="sourceLineNo">008</span>@InterfaceAudience.Private<a name="line.8"></a>
<span class="sourceLineNo">009</span>public class Version {<a name="line.9"></a>
<span class="sourceLineNo">010</span> public static final String version = "3.0.0-SNAPSHOT";<a name="line.10"></a>
-<span class="sourceLineNo">011</span> public static final String revision = "7da0015a3b58a28ccbae0b03ba7de9ce62b751e1";<a name="line.11"></a>
+<span class="sourceLineNo">011</span> public static final String revision = "7d3750bd9fc9747623549c242cc4171e224b3eaf";<a name="line.11"></a>
<span class="sourceLineNo">012</span> public static final String user = "jenkins";<a name="line.12"></a>
-<span class="sourceLineNo">013</span> public static final String date = "Mon Jun 4 14:39:33 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span> public static final String date = "Tue Jun 5 14:39:21 UTC 2018";<a name="line.13"></a>
<span class="sourceLineNo">014</span> public static final String url = "git://jenkins-websites1.apache.org/home/jenkins/jenkins-slave/workspace/hbase_generate_website/hbase";<a name="line.14"></a>
-<span class="sourceLineNo">015</span> public static final String srcChecksum = "989bd889a2d1d1df7f1398541236c61a";<a name="line.15"></a>
+<span class="sourceLineNo">015</span> public static final String srcChecksum = "e9b6cda5f76e49e801042c444f21287b";<a name="line.15"></a>
<span class="sourceLineNo">016</span>}<a name="line.16"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html
index 070e349..efeb69a 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/Scan.ReadType.html
@@ -491,7 +491,7 @@
<span class="sourceLineNo">483</span> * @return this<a name="line.483"></a>
<span class="sourceLineNo">484</span> * @throws IllegalArgumentException if stopRow does not meet criteria for a row key (when length<a name="line.484"></a>
<span class="sourceLineNo">485</span> * exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.485"></a>
-<span class="sourceLineNo">486</span> * @deprecated use {@link #withStartRow(byte[])} instead. This method may change the inclusive of<a name="line.486"></a>
+<span class="sourceLineNo">486</span> * @deprecated use {@link #withStopRow(byte[])} instead. This method may change the inclusive of<a name="line.486"></a>
<span class="sourceLineNo">487</span> * the stop row to keep compatible with the old behavior.<a name="line.487"></a>
<span class="sourceLineNo">488</span> */<a name="line.488"></a>
<span class="sourceLineNo">489</span> @Deprecated<a name="line.489"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/client/Scan.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/Scan.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/Scan.html
index 070e349..efeb69a 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/Scan.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/Scan.html
@@ -491,7 +491,7 @@
<span class="sourceLineNo">483</span> * @return this<a name="line.483"></a>
<span class="sourceLineNo">484</span> * @throws IllegalArgumentException if stopRow does not meet criteria for a row key (when length<a name="line.484"></a>
<span class="sourceLineNo">485</span> * exceeds {@link HConstants#MAX_ROW_LENGTH})<a name="line.485"></a>
-<span class="sourceLineNo">486</span> * @deprecated use {@link #withStartRow(byte[])} instead. This method may change the inclusive of<a name="line.486"></a>
+<span class="sourceLineNo">486</span> * @deprecated use {@link #withStopRow(byte[])} instead. This method may change the inclusive of<a name="line.486"></a>
<span class="sourceLineNo">487</span> * the stop row to keep compatible with the old behavior.<a name="line.487"></a>
<span class="sourceLineNo">488</span> */<a name="line.488"></a>
<span class="sourceLineNo">489</span> @Deprecated<a name="line.489"></a>
[45/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html b/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
index a6c9234..89f25b0 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
@@ -3506,7 +3506,7 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> right)</code> </td>
</tr>
<tr class="rowColor">
-<td class="colFirst"><code>void</code></td>
+<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><span class="typeNameLabel">ServerManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#expireServer-org.apache.hadoop.hbase.ServerName-">expireServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code> </td>
</tr>
<tr class="altColor">
@@ -4162,7 +4162,9 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
</tr>
<tr class="rowColor">
<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a></code></td>
-<td class="colLast"><span class="typeNameLabel">RegionStates.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#getOrCreateServer-org.apache.hadoop.hbase.ServerName-">getOrCreateServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code> </td>
+<td class="colLast"><span class="typeNameLabel">RegionStates.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#getOrCreateServer-org.apache.hadoop.hbase.ServerName-">getOrCreateServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code>
+<div class="block">Be judicious calling this method.</div>
+</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>(package private) static org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse</code></td>
@@ -4213,17 +4215,31 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</code> </td>
</tr>
<tr class="rowColor">
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">AssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#isDeadServerProcessed-org.apache.hadoop.hbase.ServerName-">isDeadServerProcessed</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code>
+<div class="block">This is a very particular check.</div>
+</td>
+</tr>
+<tr class="altColor">
<td class="colFirst"><code>protected boolean</code></td>
<td class="colLast"><span class="typeNameLabel">RegionTransitionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#isServerOnline-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.ServerName-">isServerOnline</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code> </td>
</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><span class="typeNameLabel">AssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#killRegionServer-org.apache.hadoop.hbase.ServerName-">killRegionServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code> </td>
+</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">AssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#killRegionServer-org.apache.hadoop.hbase.ServerName-">killRegionServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code> </td>
+<td class="colLast"><span class="typeNameLabel">RegionStates.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#logSplit-org.apache.hadoop.hbase.ServerName-">logSplit</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code>
+<div class="block">Called after we've split all logs on a crashed Server.</div>
+</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">RegionStates.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#logSplit-org.apache.hadoop.hbase.ServerName-">logSplit</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code> </td>
+<td class="colLast"><span class="typeNameLabel">RegionStates.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#logSplitting-org.apache.hadoop.hbase.ServerName-">logSplitting</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code>
+<div class="block">Call this when we start log splitting a crashed Server.</div>
+</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/client/Scan.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/Scan.html b/devapidocs/org/apache/hadoop/hbase/client/Scan.html
index 595e718..9662819 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/Scan.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/Scan.html
@@ -846,7 +846,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Query.html" title
<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#setStopRow-byte:A-">setStopRow</a></span>(byte[] stopRow)</code>
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
-<div class="block"><span class="deprecationComment">use <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#withStartRow-byte:A-"><code>withStartRow(byte[])</code></a> instead. This method may change the inclusive of
+<div class="block"><span class="deprecationComment">use <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#withStopRow-byte:A-"><code>withStopRow(byte[])</code></a> instead. This method may change the inclusive of
the stop row to keep compatible with the old behavior.</span></div>
</div>
</td>
@@ -1595,7 +1595,7 @@ public <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" ti
<h4>setStopRow</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
public <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Scan.html#line.490">setStopRow</a>(byte[] stopRow)</pre>
-<div class="block"><span class="deprecatedLabel">Deprecated.</span> <span class="deprecationComment">use <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#withStartRow-byte:A-"><code>withStartRow(byte[])</code></a> instead. This method may change the inclusive of
+<div class="block"><span class="deprecatedLabel">Deprecated.</span> <span class="deprecationComment">use <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html#withStopRow-byte:A-"><code>withStopRow(byte[])</code></a> instead. This method may change the inclusive of
the stop row to keep compatible with the old behavior.</span></div>
<div class="block">Set the stop row of the scan.
<p>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/client/class-use/Scan.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/class-use/Scan.html b/devapidocs/org/apache/hadoop/hbase/client/class-use/Scan.html
index 4add23c..8b0d75a 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/class-use/Scan.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/class-use/Scan.html
@@ -570,7 +570,7 @@ service.</div>
<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></code></td>
<td class="colLast"><span class="typeNameLabel">Scan.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html#setStopRow-byte:A-">setStopRow</a></span>(byte[] stopRow)</code>
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
-<div class="block"><span class="deprecationComment">use <a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html#withStartRow-byte:A-"><code>withStartRow(byte[])</code></a> instead. This method may change the inclusive of
+<div class="block"><span class="deprecationComment">use <a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html#withStopRow-byte:A-"><code>withStopRow(byte[])</code></a> instead. This method may change the inclusive of
the stop row to keep compatible with the old behavior.</span></div>
</div>
</td>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
index ba2cbd2..44b9e57 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -552,24 +552,24 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcessTask.SubmittedRows.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncProcessTask.SubmittedRows</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRequestFutureImpl.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncRequestFutureImpl.Retry</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcessTask.SubmittedRows.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncProcessTask.SubmittedRows</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRequestFutureImpl.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncRequestFutureImpl.Retry</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
index ce037ae..a9d1ebe 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -183,14 +183,14 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">CompareFilter.CompareOp</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index ac94fd7..687c216 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -273,12 +273,12 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">Cacheable.MemoryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">CacheConfig.ExternalBlockCaches</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">CacheConfig.ExternalBlockCaches</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">Cacheable.MemoryType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
index 6a2998c..29a79fd 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
@@ -349,8 +349,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.SourceStorage.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">MetricsHBaseServerSourceFactoryImpl.SourceStorage</span></a></li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
index bc33c0a..76f6d8f 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -293,10 +293,10 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
</ul>
</li>
</ul>
[10/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html
index ca94fbc..269fcc2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html
@@ -207,114 +207,154 @@
<span class="sourceLineNo">199</span> return false;<a name="line.199"></a>
<span class="sourceLineNo">200</span> }<a name="line.200"></a>
<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span> // Mark the region as CLOSING.<a name="line.202"></a>
-<span class="sourceLineNo">203</span> env.getAssignmentManager().markRegionAsClosing(regionNode);<a name="line.203"></a>
-<span class="sourceLineNo">204</span><a name="line.204"></a>
-<span class="sourceLineNo">205</span> // Add the close region operation the the server dispatch queue.<a name="line.205"></a>
-<span class="sourceLineNo">206</span> if (!addToRemoteDispatcher(env, regionNode.getRegionLocation())) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span> // If addToRemoteDispatcher fails, it calls the callback #remoteCallFailed.<a name="line.207"></a>
-<span class="sourceLineNo">208</span> }<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span> // Return true to keep the procedure running.<a name="line.210"></a>
-<span class="sourceLineNo">211</span> return true;<a name="line.211"></a>
-<span class="sourceLineNo">212</span> }<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span> @Override<a name="line.214"></a>
-<span class="sourceLineNo">215</span> protected void finishTransition(final MasterProcedureEnv env, final RegionStateNode regionNode)<a name="line.215"></a>
-<span class="sourceLineNo">216</span> throws IOException {<a name="line.216"></a>
-<span class="sourceLineNo">217</span> AssignmentManager am = env.getAssignmentManager();<a name="line.217"></a>
-<span class="sourceLineNo">218</span> RegionInfo regionInfo = getRegionInfo();<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span> if (!removeAfterUnassigning) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span> am.markRegionAsClosed(regionNode);<a name="line.221"></a>
-<span class="sourceLineNo">222</span> } else {<a name="line.222"></a>
-<span class="sourceLineNo">223</span> // Remove from in-memory states<a name="line.223"></a>
-<span class="sourceLineNo">224</span> am.getRegionStates().deleteRegion(regionInfo);<a name="line.224"></a>
-<span class="sourceLineNo">225</span> env.getMasterServices().getServerManager().removeRegion(regionInfo);<a name="line.225"></a>
-<span class="sourceLineNo">226</span> FavoredNodesManager fnm = env.getMasterServices().getFavoredNodesManager();<a name="line.226"></a>
-<span class="sourceLineNo">227</span> if (fnm != null) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span> fnm.deleteFavoredNodesForRegions(Lists.newArrayList(regionInfo));<a name="line.228"></a>
-<span class="sourceLineNo">229</span> }<a name="line.229"></a>
-<span class="sourceLineNo">230</span> }<a name="line.230"></a>
-<span class="sourceLineNo">231</span> }<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span> @Override<a name="line.233"></a>
-<span class="sourceLineNo">234</span> public RemoteOperation remoteCallBuild(final MasterProcedureEnv env, final ServerName serverName) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span> assert serverName.equals(getRegionState(env).getRegionLocation());<a name="line.235"></a>
-<span class="sourceLineNo">236</span> return new RegionCloseOperation(this, getRegionInfo(), this.destinationServer);<a name="line.236"></a>
-<span class="sourceLineNo">237</span> }<a name="line.237"></a>
-<span class="sourceLineNo">238</span><a name="line.238"></a>
-<span class="sourceLineNo">239</span> @Override<a name="line.239"></a>
-<span class="sourceLineNo">240</span> protected void reportTransition(final MasterProcedureEnv env, final RegionStateNode regionNode,<a name="line.240"></a>
-<span class="sourceLineNo">241</span> final TransitionCode code, final long seqId) throws UnexpectedStateException {<a name="line.241"></a>
-<span class="sourceLineNo">242</span> switch (code) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span> case CLOSED:<a name="line.243"></a>
-<span class="sourceLineNo">244</span> setTransitionState(RegionTransitionState.REGION_TRANSITION_FINISH);<a name="line.244"></a>
-<span class="sourceLineNo">245</span> break;<a name="line.245"></a>
-<span class="sourceLineNo">246</span> default:<a name="line.246"></a>
-<span class="sourceLineNo">247</span> throw new UnexpectedStateException(String.format(<a name="line.247"></a>
-<span class="sourceLineNo">248</span> "Received report unexpected transition state=%s for region=%s server=%s, expected CLOSED.",<a name="line.248"></a>
-<span class="sourceLineNo">249</span> code, regionNode.getRegionInfo(), regionNode.getRegionLocation()));<a name="line.249"></a>
-<span class="sourceLineNo">250</span> }<a name="line.250"></a>
-<span class="sourceLineNo">251</span> }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span> @Override<a name="line.253"></a>
-<span class="sourceLineNo">254</span> protected boolean remoteCallFailed(final MasterProcedureEnv env, final RegionStateNode regionNode,<a name="line.254"></a>
-<span class="sourceLineNo">255</span> final IOException exception) {<a name="line.255"></a>
-<span class="sourceLineNo">256</span> // TODO: Is there on-going rpc to cleanup?<a name="line.256"></a>
-<span class="sourceLineNo">257</span> if (exception instanceof ServerCrashException) {<a name="line.257"></a>
-<span class="sourceLineNo">258</span> // This exception comes from ServerCrashProcedure AFTER log splitting.<a name="line.258"></a>
-<span class="sourceLineNo">259</span> // SCP found this region as a RIT. Its call into here says it is ok to let this procedure go<a name="line.259"></a>
-<span class="sourceLineNo">260</span> // complete. This complete will release lock on this region so subsequent action on region<a name="line.260"></a>
-<span class="sourceLineNo">261</span> // can succeed; e.g. the assign that follows this unassign when a move (w/o wait on SCP<a name="line.261"></a>
-<span class="sourceLineNo">262</span> // the assign could run w/o logs being split so data loss).<a name="line.262"></a>
-<span class="sourceLineNo">263</span> try {<a name="line.263"></a>
-<span class="sourceLineNo">264</span> reportTransition(env, regionNode, TransitionCode.CLOSED, HConstants.NO_SEQNUM);<a name="line.264"></a>
-<span class="sourceLineNo">265</span> } catch (UnexpectedStateException e) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span> // Should never happen.<a name="line.266"></a>
-<span class="sourceLineNo">267</span> throw new RuntimeException(e);<a name="line.267"></a>
-<span class="sourceLineNo">268</span> }<a name="line.268"></a>
-<span class="sourceLineNo">269</span> } else if (exception instanceof RegionServerAbortedException ||<a name="line.269"></a>
-<span class="sourceLineNo">270</span> exception instanceof RegionServerStoppedException ||<a name="line.270"></a>
-<span class="sourceLineNo">271</span> exception instanceof ServerNotRunningYetException) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span> // RS is aborting, we cannot offline the region since the region may need to do WAL<a name="line.272"></a>
-<span class="sourceLineNo">273</span> // recovery. Until we see the RS expiration, we should retry.<a name="line.273"></a>
-<span class="sourceLineNo">274</span> // TODO: This should be suspend like the below where we call expire on server?<a name="line.274"></a>
-<span class="sourceLineNo">275</span> LOG.info("Ignoring; waiting on ServerCrashProcedure", exception);<a name="line.275"></a>
-<span class="sourceLineNo">276</span> } else if (exception instanceof NotServingRegionException) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span> LOG.info("IS THIS OK? ANY LOGS TO REPLAY; ACTING AS THOUGH ALL GOOD " + regionNode,<a name="line.277"></a>
-<span class="sourceLineNo">278</span> exception);<a name="line.278"></a>
-<span class="sourceLineNo">279</span> setTransitionState(RegionTransitionState.REGION_TRANSITION_FINISH);<a name="line.279"></a>
-<span class="sourceLineNo">280</span> } else {<a name="line.280"></a>
-<span class="sourceLineNo">281</span> LOG.warn("Expiring server " + this + "; " + regionNode.toShortString() +<a name="line.281"></a>
-<span class="sourceLineNo">282</span> ", exception=" + exception);<a name="line.282"></a>
-<span class="sourceLineNo">283</span> env.getMasterServices().getServerManager().expireServer(regionNode.getRegionLocation());<a name="line.283"></a>
-<span class="sourceLineNo">284</span> // Return false so this procedure stays in suspended state. It will be woken up by the<a name="line.284"></a>
-<span class="sourceLineNo">285</span> // ServerCrashProcedure that was scheduled when we called #expireServer above. SCP calls<a name="line.285"></a>
-<span class="sourceLineNo">286</span> // #handleRIT which will call this method only the exception will be a ServerCrashException<a name="line.286"></a>
-<span class="sourceLineNo">287</span> // this time around (See above).<a name="line.287"></a>
-<span class="sourceLineNo">288</span> // TODO: Add a SCP as a new subprocedure that we now come to depend on.<a name="line.288"></a>
-<span class="sourceLineNo">289</span> return false;<a name="line.289"></a>
-<span class="sourceLineNo">290</span> }<a name="line.290"></a>
-<span class="sourceLineNo">291</span> return true;<a name="line.291"></a>
-<span class="sourceLineNo">292</span> }<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span> @Override<a name="line.294"></a>
-<span class="sourceLineNo">295</span> public void toStringClassDetails(StringBuilder sb) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span> super.toStringClassDetails(sb);<a name="line.296"></a>
-<span class="sourceLineNo">297</span> sb.append(", server=").append(this.hostingServer);<a name="line.297"></a>
-<span class="sourceLineNo">298</span> }<a name="line.298"></a>
-<span class="sourceLineNo">299</span><a name="line.299"></a>
-<span class="sourceLineNo">300</span> @Override<a name="line.300"></a>
-<span class="sourceLineNo">301</span> public ServerName getServer(final MasterProcedureEnv env) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span> return this.hostingServer;<a name="line.302"></a>
-<span class="sourceLineNo">303</span> }<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span> @Override<a name="line.305"></a>
-<span class="sourceLineNo">306</span> protected ProcedureMetrics getProcedureMetrics(MasterProcedureEnv env) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span> return env.getAssignmentManager().getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.307"></a>
-<span class="sourceLineNo">308</span> }<a name="line.308"></a>
-<span class="sourceLineNo">309</span>}<a name="line.309"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span> // Mark the region as CLOSING.<a name="line.203"></a>
+<span class="sourceLineNo">204</span> env.getAssignmentManager().markRegionAsClosing(regionNode);<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span> // Add the close region operation to the server dispatch queue.<a name="line.206"></a>
+<span class="sourceLineNo">207</span> if (!addToRemoteDispatcher(env, regionNode.getRegionLocation())) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span> // If addToRemoteDispatcher fails, it calls the callback #remoteCallFailed.<a name="line.208"></a>
+<span class="sourceLineNo">209</span> }<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span> // Return true to keep the procedure running.<a name="line.211"></a>
+<span class="sourceLineNo">212</span> return true;<a name="line.212"></a>
+<span class="sourceLineNo">213</span> }<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span> @Override<a name="line.215"></a>
+<span class="sourceLineNo">216</span> protected void finishTransition(final MasterProcedureEnv env, final RegionStateNode regionNode)<a name="line.216"></a>
+<span class="sourceLineNo">217</span> throws IOException {<a name="line.217"></a>
+<span class="sourceLineNo">218</span> AssignmentManager am = env.getAssignmentManager();<a name="line.218"></a>
+<span class="sourceLineNo">219</span> RegionInfo regionInfo = getRegionInfo();<a name="line.219"></a>
+<span class="sourceLineNo">220</span><a name="line.220"></a>
+<span class="sourceLineNo">221</span> if (!removeAfterUnassigning) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span> am.markRegionAsClosed(regionNode);<a name="line.222"></a>
+<span class="sourceLineNo">223</span> } else {<a name="line.223"></a>
+<span class="sourceLineNo">224</span> // Remove from in-memory states<a name="line.224"></a>
+<span class="sourceLineNo">225</span> am.getRegionStates().deleteRegion(regionInfo);<a name="line.225"></a>
+<span class="sourceLineNo">226</span> env.getMasterServices().getServerManager().removeRegion(regionInfo);<a name="line.226"></a>
+<span class="sourceLineNo">227</span> FavoredNodesManager fnm = env.getMasterServices().getFavoredNodesManager();<a name="line.227"></a>
+<span class="sourceLineNo">228</span> if (fnm != null) {<a name="line.228"></a>
+<span class="sourceLineNo">229</span> fnm.deleteFavoredNodesForRegions(Lists.newArrayList(regionInfo));<a name="line.229"></a>
+<span class="sourceLineNo">230</span> }<a name="line.230"></a>
+<span class="sourceLineNo">231</span> }<a name="line.231"></a>
+<span class="sourceLineNo">232</span> }<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span> @Override<a name="line.234"></a>
+<span class="sourceLineNo">235</span> public RemoteOperation remoteCallBuild(final MasterProcedureEnv env, final ServerName serverName) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span> assert serverName.equals(getRegionState(env).getRegionLocation());<a name="line.236"></a>
+<span class="sourceLineNo">237</span> return new RegionCloseOperation(this, getRegionInfo(), this.destinationServer);<a name="line.237"></a>
+<span class="sourceLineNo">238</span> }<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span> @Override<a name="line.240"></a>
+<span class="sourceLineNo">241</span> protected void reportTransition(final MasterProcedureEnv env, final RegionStateNode regionNode,<a name="line.241"></a>
+<span class="sourceLineNo">242</span> final TransitionCode code, final long seqId) throws UnexpectedStateException {<a name="line.242"></a>
+<span class="sourceLineNo">243</span> switch (code) {<a name="line.243"></a>
+<span class="sourceLineNo">244</span> case CLOSED:<a name="line.244"></a>
+<span class="sourceLineNo">245</span> setTransitionState(RegionTransitionState.REGION_TRANSITION_FINISH);<a name="line.245"></a>
+<span class="sourceLineNo">246</span> break;<a name="line.246"></a>
+<span class="sourceLineNo">247</span> default:<a name="line.247"></a>
+<span class="sourceLineNo">248</span> throw new UnexpectedStateException(String.format(<a name="line.248"></a>
+<span class="sourceLineNo">249</span> "Received report unexpected transition state=%s for region=%s server=%s, expected CLOSED.",<a name="line.249"></a>
+<span class="sourceLineNo">250</span> code, regionNode.getRegionInfo(), regionNode.getRegionLocation()));<a name="line.250"></a>
+<span class="sourceLineNo">251</span> }<a name="line.251"></a>
+<span class="sourceLineNo">252</span> }<a name="line.252"></a>
+<span class="sourceLineNo">253</span><a name="line.253"></a>
+<span class="sourceLineNo">254</span> /**<a name="line.254"></a>
+<span class="sourceLineNo">255</span> * Our remote call failed but there are a few states where it is safe to proceed with the<a name="line.255"></a>
+<span class="sourceLineNo">256</span> * unassign; e.g. if a server crash and it has had all of its WALs processed, then we can allow<a name="line.256"></a>
+<span class="sourceLineNo">257</span> * this unassign to go to completion.<a name="line.257"></a>
+<span class="sourceLineNo">258</span> * @return True if it is safe to proceed with the unassign.<a name="line.258"></a>
+<span class="sourceLineNo">259</span> */<a name="line.259"></a>
+<span class="sourceLineNo">260</span> private boolean isSafeToProceed(final MasterProcedureEnv env, final RegionStateNode regionNode,<a name="line.260"></a>
+<span class="sourceLineNo">261</span> final IOException exception) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span> if (exception instanceof ServerCrashException) {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> // This exception comes from ServerCrashProcedure AFTER log splitting. Its a signaling<a name="line.263"></a>
+<span class="sourceLineNo">264</span> // exception. SCP found this region as a RIT during its processing of the crash. Its call<a name="line.264"></a>
+<span class="sourceLineNo">265</span> // into here says it is ok to let this procedure go complete.<a name="line.265"></a>
+<span class="sourceLineNo">266</span> return true;<a name="line.266"></a>
+<span class="sourceLineNo">267</span> }<a name="line.267"></a>
+<span class="sourceLineNo">268</span> if (exception instanceof NotServingRegionException) {<a name="line.268"></a>
+<span class="sourceLineNo">269</span> LOG.warn("IS OK? ANY LOGS TO REPLAY; ACTING AS THOUGH ALL GOOD {}", regionNode, exception);<a name="line.269"></a>
+<span class="sourceLineNo">270</span> return true;<a name="line.270"></a>
+<span class="sourceLineNo">271</span> }<a name="line.271"></a>
+<span class="sourceLineNo">272</span> return false;<a name="line.272"></a>
+<span class="sourceLineNo">273</span> }<a name="line.273"></a>
+<span class="sourceLineNo">274</span><a name="line.274"></a>
+<span class="sourceLineNo">275</span> /**<a name="line.275"></a>
+<span class="sourceLineNo">276</span> * Set it up so when procedure is unsuspended, we'll move to the procedure finish.<a name="line.276"></a>
+<span class="sourceLineNo">277</span> */<a name="line.277"></a>
+<span class="sourceLineNo">278</span> protected void proceed(final MasterProcedureEnv env, final RegionStateNode regionNode) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span> try {<a name="line.279"></a>
+<span class="sourceLineNo">280</span> reportTransition(env, regionNode, TransitionCode.CLOSED, HConstants.NO_SEQNUM);<a name="line.280"></a>
+<span class="sourceLineNo">281</span> } catch (UnexpectedStateException e) {<a name="line.281"></a>
+<span class="sourceLineNo">282</span> // Should never happen.<a name="line.282"></a>
+<span class="sourceLineNo">283</span> throw new RuntimeException(e);<a name="line.283"></a>
+<span class="sourceLineNo">284</span> }<a name="line.284"></a>
+<span class="sourceLineNo">285</span> }<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span> /**<a name="line.287"></a>
+<span class="sourceLineNo">288</span> * @return If true, we will re-wake up this procedure; if false, the procedure stays suspended.<a name="line.288"></a>
+<span class="sourceLineNo">289</span> */<a name="line.289"></a>
+<span class="sourceLineNo">290</span> @Override<a name="line.290"></a>
+<span class="sourceLineNo">291</span> protected boolean remoteCallFailed(final MasterProcedureEnv env, final RegionStateNode regionNode,<a name="line.291"></a>
+<span class="sourceLineNo">292</span> final IOException exception) {<a name="line.292"></a>
+<span class="sourceLineNo">293</span> // Be careful reading the below; we do returns in middle of the method a few times.<a name="line.293"></a>
+<span class="sourceLineNo">294</span> if (isSafeToProceed(env, regionNode, exception)) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span> proceed(env, regionNode);<a name="line.295"></a>
+<span class="sourceLineNo">296</span> } else if (exception instanceof RegionServerAbortedException ||<a name="line.296"></a>
+<span class="sourceLineNo">297</span> exception instanceof RegionServerStoppedException) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span> // RS is aborting/stopping, we cannot offline the region since the region may need to do WAL<a name="line.298"></a>
+<span class="sourceLineNo">299</span> // recovery. Until we see the RS expiration, stay suspended; return false.<a name="line.299"></a>
+<span class="sourceLineNo">300</span> LOG.info("Ignoring; waiting on ServerCrashProcedure", exception);<a name="line.300"></a>
+<span class="sourceLineNo">301</span> return false;<a name="line.301"></a>
+<span class="sourceLineNo">302</span> } else if (exception instanceof ServerNotRunningYetException) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span> // This should not happen. If it does, procedure will be woken-up and we'll retry.<a name="line.303"></a>
+<span class="sourceLineNo">304</span> // TODO: Needs a pause and backoff?<a name="line.304"></a>
+<span class="sourceLineNo">305</span> LOG.info("Retry", exception);<a name="line.305"></a>
+<span class="sourceLineNo">306</span> } else {<a name="line.306"></a>
+<span class="sourceLineNo">307</span> // We failed to RPC this server. Set it as expired.<a name="line.307"></a>
+<span class="sourceLineNo">308</span> ServerName serverName = regionNode.getRegionLocation();<a name="line.308"></a>
+<span class="sourceLineNo">309</span> LOG.warn("Expiring {}, {} {}; exception={}", serverName, this, regionNode.toShortString(),<a name="line.309"></a>
+<span class="sourceLineNo">310</span> exception.getClass().getSimpleName());<a name="line.310"></a>
+<span class="sourceLineNo">311</span> if (!env.getMasterServices().getServerManager().expireServer(serverName)) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span> // Failed to queue an expire. Lots of possible reasons including it may be already expired.<a name="line.312"></a>
+<span class="sourceLineNo">313</span> // If so, is it beyond the state where we will be woken-up if go ahead and suspend the<a name="line.313"></a>
+<span class="sourceLineNo">314</span> // procedure. Look for this rare condition.<a name="line.314"></a>
+<span class="sourceLineNo">315</span> if (env.getAssignmentManager().isDeadServerProcessed(serverName)) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span> // Its ok to proceed with this unassign.<a name="line.316"></a>
+<span class="sourceLineNo">317</span> LOG.info("{} is dead and processed; moving procedure to finished state; {}",<a name="line.317"></a>
+<span class="sourceLineNo">318</span> serverName, this);<a name="line.318"></a>
+<span class="sourceLineNo">319</span> proceed(env, regionNode);<a name="line.319"></a>
+<span class="sourceLineNo">320</span> // Return true; wake up the procedure so we can act on proceed.<a name="line.320"></a>
+<span class="sourceLineNo">321</span> return true;<a name="line.321"></a>
+<span class="sourceLineNo">322</span> }<a name="line.322"></a>
+<span class="sourceLineNo">323</span> }<a name="line.323"></a>
+<span class="sourceLineNo">324</span> // Return false so this procedure stays in suspended state. It will be woken up by the<a name="line.324"></a>
+<span class="sourceLineNo">325</span> // ServerCrashProcedure that was scheduled when we called #expireServer above. SCP calls<a name="line.325"></a>
+<span class="sourceLineNo">326</span> // #handleRIT which will call this method only the exception will be a ServerCrashException<a name="line.326"></a>
+<span class="sourceLineNo">327</span> // this time around (See above).<a name="line.327"></a>
+<span class="sourceLineNo">328</span> // TODO: Add a SCP as a new subprocedure that we now come to depend on.<a name="line.328"></a>
+<span class="sourceLineNo">329</span> return false;<a name="line.329"></a>
+<span class="sourceLineNo">330</span> }<a name="line.330"></a>
+<span class="sourceLineNo">331</span> return true;<a name="line.331"></a>
+<span class="sourceLineNo">332</span> }<a name="line.332"></a>
+<span class="sourceLineNo">333</span><a name="line.333"></a>
+<span class="sourceLineNo">334</span> @Override<a name="line.334"></a>
+<span class="sourceLineNo">335</span> public void toStringClassDetails(StringBuilder sb) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span> super.toStringClassDetails(sb);<a name="line.336"></a>
+<span class="sourceLineNo">337</span> sb.append(", server=").append(this.hostingServer);<a name="line.337"></a>
+<span class="sourceLineNo">338</span> }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span> @Override<a name="line.340"></a>
+<span class="sourceLineNo">341</span> public ServerName getServer(final MasterProcedureEnv env) {<a name="line.341"></a>
+<span class="sourceLineNo">342</span> return this.hostingServer;<a name="line.342"></a>
+<span class="sourceLineNo">343</span> }<a name="line.343"></a>
+<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">345</span> @Override<a name="line.345"></a>
+<span class="sourceLineNo">346</span> protected ProcedureMetrics getProcedureMetrics(MasterProcedureEnv env) {<a name="line.346"></a>
+<span class="sourceLineNo">347</span> return env.getAssignmentManager().getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.347"></a>
+<span class="sourceLineNo">348</span> }<a name="line.348"></a>
+<span class="sourceLineNo">349</span>}<a name="line.349"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html
index bd8f253..455d1b4 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html
@@ -171,265 +171,267 @@
<span class="sourceLineNo">163</span> "; cycles=" + getCycles());<a name="line.163"></a>
<span class="sourceLineNo">164</span> }<a name="line.164"></a>
<span class="sourceLineNo">165</span> // Handle RIT against crashed server. Will cancel any ongoing assigns/unassigns.<a name="line.165"></a>
-<span class="sourceLineNo">166</span> // Returns list of regions we need to reassign.<a name="line.166"></a>
-<span class="sourceLineNo">167</span> List<RegionInfo> toAssign = handleRIT(env, regionsOnCrashedServer);<a name="line.167"></a>
-<span class="sourceLineNo">168</span> AssignmentManager am = env.getAssignmentManager();<a name="line.168"></a>
-<span class="sourceLineNo">169</span> // CreateAssignProcedure will try to use the old location for the region deploy.<a name="line.169"></a>
-<span class="sourceLineNo">170</span> addChildProcedure(am.createAssignProcedures(toAssign));<a name="line.170"></a>
-<span class="sourceLineNo">171</span> setNextState(ServerCrashState.SERVER_CRASH_HANDLE_RIT2);<a name="line.171"></a>
-<span class="sourceLineNo">172</span> } else {<a name="line.172"></a>
-<span class="sourceLineNo">173</span> setNextState(ServerCrashState.SERVER_CRASH_FINISH);<a name="line.173"></a>
-<span class="sourceLineNo">174</span> }<a name="line.174"></a>
-<span class="sourceLineNo">175</span> break;<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span> case SERVER_CRASH_HANDLE_RIT2:<a name="line.177"></a>
-<span class="sourceLineNo">178</span> // Run the handleRIT again for case where another procedure managed to grab the lock on<a name="line.178"></a>
-<span class="sourceLineNo">179</span> // a region ahead of this crash handling procedure. Can happen in rare case. See<a name="line.179"></a>
-<span class="sourceLineNo">180</span> handleRIT(env, regionsOnCrashedServer);<a name="line.180"></a>
-<span class="sourceLineNo">181</span> setNextState(ServerCrashState.SERVER_CRASH_FINISH);<a name="line.181"></a>
-<span class="sourceLineNo">182</span> break;<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span> case SERVER_CRASH_FINISH:<a name="line.184"></a>
-<span class="sourceLineNo">185</span> services.getAssignmentManager().getRegionStates().removeServer(serverName);<a name="line.185"></a>
-<span class="sourceLineNo">186</span> services.getServerManager().getDeadServers().finish(serverName);<a name="line.186"></a>
-<span class="sourceLineNo">187</span> return Flow.NO_MORE_STATE;<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span> default:<a name="line.189"></a>
-<span class="sourceLineNo">190</span> throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.190"></a>
-<span class="sourceLineNo">191</span> }<a name="line.191"></a>
-<span class="sourceLineNo">192</span> } catch (IOException e) {<a name="line.192"></a>
-<span class="sourceLineNo">193</span> LOG.warn("Failed state=" + state + ", retry " + this + "; cycles=" + getCycles(), e);<a name="line.193"></a>
-<span class="sourceLineNo">194</span> }<a name="line.194"></a>
-<span class="sourceLineNo">195</span> return Flow.HAS_MORE_STATE;<a name="line.195"></a>
-<span class="sourceLineNo">196</span> }<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span> /**<a name="line.199"></a>
-<span class="sourceLineNo">200</span> * @param env<a name="line.200"></a>
-<span class="sourceLineNo">201</span> * @throws IOException<a name="line.201"></a>
-<span class="sourceLineNo">202</span> */<a name="line.202"></a>
-<span class="sourceLineNo">203</span> private void processMeta(final MasterProcedureEnv env) throws IOException {<a name="line.203"></a>
-<span class="sourceLineNo">204</span> LOG.debug("{}; processing hbase:meta", this);<a name="line.204"></a>
-<span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span> // Assign meta if still carrying it. Check again: region may be assigned because of RIT timeout<a name="line.206"></a>
-<span class="sourceLineNo">207</span> final AssignmentManager am = env.getMasterServices().getAssignmentManager();<a name="line.207"></a>
-<span class="sourceLineNo">208</span> for (RegionInfo hri: am.getRegionStates().getServerRegionInfoSet(serverName)) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span> if (!isDefaultMetaRegion(hri)) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span> continue;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> }<a name="line.211"></a>
-<span class="sourceLineNo">212</span> addChildProcedure(new RecoverMetaProcedure(serverName, this.shouldSplitWal));<a name="line.212"></a>
-<span class="sourceLineNo">213</span> }<a name="line.213"></a>
-<span class="sourceLineNo">214</span> }<a name="line.214"></a>
-<span class="sourceLineNo">215</span><a name="line.215"></a>
-<span class="sourceLineNo">216</span> private boolean filterDefaultMetaRegions(final List<RegionInfo> regions) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span> if (regions == null) return false;<a name="line.217"></a>
-<span class="sourceLineNo">218</span> regions.removeIf(this::isDefaultMetaRegion);<a name="line.218"></a>
-<span class="sourceLineNo">219</span> return !regions.isEmpty();<a name="line.219"></a>
-<span class="sourceLineNo">220</span> }<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span> private boolean isDefaultMetaRegion(final RegionInfo hri) {<a name="line.222"></a>
-<span class="sourceLineNo">223</span> return hri.getTable().equals(TableName.META_TABLE_NAME) &&<a name="line.223"></a>
-<span class="sourceLineNo">224</span> RegionReplicaUtil.isDefaultReplica(hri);<a name="line.224"></a>
-<span class="sourceLineNo">225</span> }<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span> private void splitLogs(final MasterProcedureEnv env) throws IOException {<a name="line.227"></a>
-<span class="sourceLineNo">228</span> if (LOG.isDebugEnabled()) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span> LOG.debug("Splitting WALs " + this);<a name="line.229"></a>
-<span class="sourceLineNo">230</span> }<a name="line.230"></a>
-<span class="sourceLineNo">231</span> MasterWalManager mwm = env.getMasterServices().getMasterWalManager();<a name="line.231"></a>
-<span class="sourceLineNo">232</span> AssignmentManager am = env.getMasterServices().getAssignmentManager();<a name="line.232"></a>
-<span class="sourceLineNo">233</span> // TODO: For Matteo. Below BLOCKs!!!! Redo so can relinquish executor while it is running.<a name="line.233"></a>
-<span class="sourceLineNo">234</span> // PROBLEM!!! WE BLOCK HERE.<a name="line.234"></a>
-<span class="sourceLineNo">235</span> mwm.splitLog(this.serverName);<a name="line.235"></a>
-<span class="sourceLineNo">236</span> if (LOG.isDebugEnabled()) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span> LOG.debug("Done splitting WALs " + this);<a name="line.237"></a>
-<span class="sourceLineNo">238</span> }<a name="line.238"></a>
-<span class="sourceLineNo">239</span> am.getRegionStates().logSplit(this.serverName);<a name="line.239"></a>
-<span class="sourceLineNo">240</span> }<a name="line.240"></a>
-<span class="sourceLineNo">241</span><a name="line.241"></a>
-<span class="sourceLineNo">242</span> @Override<a name="line.242"></a>
-<span class="sourceLineNo">243</span> protected void rollbackState(MasterProcedureEnv env, ServerCrashState state)<a name="line.243"></a>
-<span class="sourceLineNo">244</span> throws IOException {<a name="line.244"></a>
-<span class="sourceLineNo">245</span> // Can't rollback.<a name="line.245"></a>
-<span class="sourceLineNo">246</span> throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.246"></a>
-<span class="sourceLineNo">247</span> }<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span> @Override<a name="line.249"></a>
-<span class="sourceLineNo">250</span> protected ServerCrashState getState(int stateId) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span> return ServerCrashState.forNumber(stateId);<a name="line.251"></a>
-<span class="sourceLineNo">252</span> }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span> @Override<a name="line.254"></a>
-<span class="sourceLineNo">255</span> protected int getStateId(ServerCrashState state) {<a name="line.255"></a>
-<span class="sourceLineNo">256</span> return state.getNumber();<a name="line.256"></a>
-<span class="sourceLineNo">257</span> }<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span> @Override<a name="line.259"></a>
-<span class="sourceLineNo">260</span> protected ServerCrashState getInitialState() {<a name="line.260"></a>
-<span class="sourceLineNo">261</span> return ServerCrashState.SERVER_CRASH_START;<a name="line.261"></a>
-<span class="sourceLineNo">262</span> }<a name="line.262"></a>
-<span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span> @Override<a name="line.264"></a>
-<span class="sourceLineNo">265</span> protected boolean abort(MasterProcedureEnv env) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span> // TODO<a name="line.266"></a>
-<span class="sourceLineNo">267</span> return false;<a name="line.267"></a>
-<span class="sourceLineNo">268</span> }<a name="line.268"></a>
-<span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span> @Override<a name="line.270"></a>
-<span class="sourceLineNo">271</span> protected LockState acquireLock(final MasterProcedureEnv env) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span> // TODO: Put this BACK AFTER AMv2 goes in!!!!<a name="line.272"></a>
-<span class="sourceLineNo">273</span> // if (env.waitFailoverCleanup(this)) return LockState.LOCK_EVENT_WAIT;<a name="line.273"></a>
-<span class="sourceLineNo">274</span> if (env.waitServerCrashProcessingEnabled(this)) return LockState.LOCK_EVENT_WAIT;<a name="line.274"></a>
-<span class="sourceLineNo">275</span> if (env.getProcedureScheduler().waitServerExclusiveLock(this, getServerName())) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span> return LockState.LOCK_EVENT_WAIT;<a name="line.276"></a>
-<span class="sourceLineNo">277</span> }<a name="line.277"></a>
-<span class="sourceLineNo">278</span> return LockState.LOCK_ACQUIRED;<a name="line.278"></a>
-<span class="sourceLineNo">279</span> }<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span> @Override<a name="line.281"></a>
-<span class="sourceLineNo">282</span> protected void releaseLock(final MasterProcedureEnv env) {<a name="line.282"></a>
-<span class="sourceLineNo">283</span> env.getProcedureScheduler().wakeServerExclusiveLock(this, getServerName());<a name="line.283"></a>
-<span class="sourceLineNo">284</span> }<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span> @Override<a name="line.286"></a>
-<span class="sourceLineNo">287</span> public void toStringClassDetails(StringBuilder sb) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span> sb.append(getClass().getSimpleName());<a name="line.288"></a>
-<span class="sourceLineNo">289</span> sb.append(" server=");<a name="line.289"></a>
-<span class="sourceLineNo">290</span> sb.append(serverName);<a name="line.290"></a>
-<span class="sourceLineNo">291</span> sb.append(", splitWal=");<a name="line.291"></a>
-<span class="sourceLineNo">292</span> sb.append(shouldSplitWal);<a name="line.292"></a>
-<span class="sourceLineNo">293</span> sb.append(", meta=");<a name="line.293"></a>
-<span class="sourceLineNo">294</span> sb.append(carryingMeta);<a name="line.294"></a>
-<span class="sourceLineNo">295</span> }<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span> @Override<a name="line.297"></a>
-<span class="sourceLineNo">298</span> protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.298"></a>
-<span class="sourceLineNo">299</span> throws IOException {<a name="line.299"></a>
-<span class="sourceLineNo">300</span> super.serializeStateData(serializer);<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span> MasterProcedureProtos.ServerCrashStateData.Builder state =<a name="line.302"></a>
-<span class="sourceLineNo">303</span> MasterProcedureProtos.ServerCrashStateData.newBuilder().<a name="line.303"></a>
-<span class="sourceLineNo">304</span> setServerName(ProtobufUtil.toServerName(this.serverName)).<a name="line.304"></a>
-<span class="sourceLineNo">305</span> setCarryingMeta(this.carryingMeta).<a name="line.305"></a>
-<span class="sourceLineNo">306</span> setShouldSplitWal(this.shouldSplitWal);<a name="line.306"></a>
-<span class="sourceLineNo">307</span> if (this.regionsOnCrashedServer != null && !this.regionsOnCrashedServer.isEmpty()) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span> for (RegionInfo hri: this.regionsOnCrashedServer) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span> state.addRegionsOnCrashedServer(ProtobufUtil.toRegionInfo(hri));<a name="line.309"></a>
-<span class="sourceLineNo">310</span> }<a name="line.310"></a>
-<span class="sourceLineNo">311</span> }<a name="line.311"></a>
-<span class="sourceLineNo">312</span> serializer.serialize(state.build());<a name="line.312"></a>
-<span class="sourceLineNo">313</span> }<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> @Override<a name="line.315"></a>
-<span class="sourceLineNo">316</span> protected void deserializeStateData(ProcedureStateSerializer serializer)<a name="line.316"></a>
-<span class="sourceLineNo">317</span> throws IOException {<a name="line.317"></a>
-<span class="sourceLineNo">318</span> super.deserializeStateData(serializer);<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span> MasterProcedureProtos.ServerCrashStateData state =<a name="line.320"></a>
-<span class="sourceLineNo">321</span> serializer.deserialize(MasterProcedureProtos.ServerCrashStateData.class);<a name="line.321"></a>
-<span class="sourceLineNo">322</span> this.serverName = ProtobufUtil.toServerName(state.getServerName());<a name="line.322"></a>
-<span class="sourceLineNo">323</span> this.carryingMeta = state.hasCarryingMeta()? state.getCarryingMeta(): false;<a name="line.323"></a>
-<span class="sourceLineNo">324</span> // shouldSplitWAL has a default over in pb so this invocation will always work.<a name="line.324"></a>
-<span class="sourceLineNo">325</span> this.shouldSplitWal = state.getShouldSplitWal();<a name="line.325"></a>
-<span class="sourceLineNo">326</span> int size = state.getRegionsOnCrashedServerCount();<a name="line.326"></a>
-<span class="sourceLineNo">327</span> if (size > 0) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span> this.regionsOnCrashedServer = new ArrayList<>(size);<a name="line.328"></a>
-<span class="sourceLineNo">329</span> for (org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo ri: state.getRegionsOnCrashedServerList()) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span> this.regionsOnCrashedServer.add(ProtobufUtil.toRegionInfo(ri));<a name="line.330"></a>
-<span class="sourceLineNo">331</span> }<a name="line.331"></a>
-<span class="sourceLineNo">332</span> }<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> @Override<a name="line.335"></a>
-<span class="sourceLineNo">336</span> public ServerName getServerName() {<a name="line.336"></a>
-<span class="sourceLineNo">337</span> return this.serverName;<a name="line.337"></a>
-<span class="sourceLineNo">338</span> }<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span> @Override<a name="line.340"></a>
-<span class="sourceLineNo">341</span> public boolean hasMetaTableRegion() {<a name="line.341"></a>
-<span class="sourceLineNo">342</span> return this.carryingMeta;<a name="line.342"></a>
-<span class="sourceLineNo">343</span> }<a name="line.343"></a>
-<span class="sourceLineNo">344</span><a name="line.344"></a>
-<span class="sourceLineNo">345</span> @Override<a name="line.345"></a>
-<span class="sourceLineNo">346</span> public ServerOperationType getServerOperationType() {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> return ServerOperationType.CRASH_HANDLER;<a name="line.347"></a>
-<span class="sourceLineNo">348</span> }<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span> /**<a name="line.350"></a>
-<span class="sourceLineNo">351</span> * For this procedure, yield at end of each successful flow step so that all crashed servers<a name="line.351"></a>
-<span class="sourceLineNo">352</span> * can make progress rather than do the default which has each procedure running to completion<a name="line.352"></a>
-<span class="sourceLineNo">353</span> * before we move to the next. For crashed servers, especially if running with distributed log<a name="line.353"></a>
-<span class="sourceLineNo">354</span> * replay, we will want all servers to come along; we do not want the scenario where a server is<a name="line.354"></a>
-<span class="sourceLineNo">355</span> * stuck waiting for regions to online so it can replay edits.<a name="line.355"></a>
-<span class="sourceLineNo">356</span> */<a name="line.356"></a>
-<span class="sourceLineNo">357</span> @Override<a name="line.357"></a>
-<span class="sourceLineNo">358</span> protected boolean isYieldBeforeExecuteFromState(MasterProcedureEnv env, ServerCrashState state) {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> return true;<a name="line.359"></a>
-<span class="sourceLineNo">360</span> }<a name="line.360"></a>
-<span class="sourceLineNo">361</span><a name="line.361"></a>
-<span class="sourceLineNo">362</span> @Override<a name="line.362"></a>
-<span class="sourceLineNo">363</span> protected boolean shouldWaitClientAck(MasterProcedureEnv env) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span> // The operation is triggered internally on the server<a name="line.364"></a>
-<span class="sourceLineNo">365</span> // the client does not know about this procedure.<a name="line.365"></a>
-<span class="sourceLineNo">366</span> return false;<a name="line.366"></a>
-<span class="sourceLineNo">367</span> }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span> /**<a name="line.369"></a>
-<span class="sourceLineNo">370</span> * Handle any outstanding RIT that are up against this.serverName, the crashed server.<a name="line.370"></a>
-<span class="sourceLineNo">371</span> * Notify them of crash. Remove assign entries from the passed in <code>regions</code><a name="line.371"></a>
-<span class="sourceLineNo">372</span> * otherwise we have two assigns going on and they will fight over who has lock.<a name="line.372"></a>
-<span class="sourceLineNo">373</span> * Notify Unassigns. If unable to unassign because server went away, unassigns block waiting<a name="line.373"></a>
-<span class="sourceLineNo">374</span> * on the below callback from a ServerCrashProcedure before proceeding.<a name="line.374"></a>
-<span class="sourceLineNo">375</span> * @param regions Regions on the Crashed Server.<a name="line.375"></a>
-<span class="sourceLineNo">376</span> * @return List of regions we should assign to new homes (not same as regions on crashed server).<a name="line.376"></a>
-<span class="sourceLineNo">377</span> */<a name="line.377"></a>
-<span class="sourceLineNo">378</span> private List<RegionInfo> handleRIT(final MasterProcedureEnv env, List<RegionInfo> regions) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span> if (regions == null || regions.isEmpty()) {<a name="line.379"></a>
-<span class="sourceLineNo">380</span> return Collections.emptyList();<a name="line.380"></a>
-<span class="sourceLineNo">381</span> }<a name="line.381"></a>
-<span class="sourceLineNo">382</span> AssignmentManager am = env.getMasterServices().getAssignmentManager();<a name="line.382"></a>
-<span class="sourceLineNo">383</span> List<RegionInfo> toAssign = new ArrayList<RegionInfo>(regions);<a name="line.383"></a>
-<span class="sourceLineNo">384</span> // Get an iterator so can remove items.<a name="line.384"></a>
-<span class="sourceLineNo">385</span> final Iterator<RegionInfo> it = toAssign.iterator();<a name="line.385"></a>
-<span class="sourceLineNo">386</span> ServerCrashException sce = null;<a name="line.386"></a>
-<span class="sourceLineNo">387</span> while (it.hasNext()) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> final RegionInfo hri = it.next();<a name="line.388"></a>
-<span class="sourceLineNo">389</span> RegionTransitionProcedure rtp = am.getRegionStates().getRegionTransitionProcedure(hri);<a name="line.389"></a>
-<span class="sourceLineNo">390</span> if (rtp == null) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span> continue;<a name="line.391"></a>
-<span class="sourceLineNo">392</span> }<a name="line.392"></a>
-<span class="sourceLineNo">393</span> // Make sure the RIT is against this crashed server. In the case where there are many<a name="line.393"></a>
-<span class="sourceLineNo">394</span> // processings of a crashed server -- backed up for whatever reason (slow WAL split) --<a name="line.394"></a>
-<span class="sourceLineNo">395</span> // then a previous SCP may have already failed an assign, etc., and it may have a new<a name="line.395"></a>
-<span class="sourceLineNo">396</span> // location target; DO NOT fail these else we make for assign flux.<a name="line.396"></a>
-<span class="sourceLineNo">397</span> ServerName rtpServerName = rtp.getServer(env);<a name="line.397"></a>
-<span class="sourceLineNo">398</span> if (rtpServerName == null) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span> LOG.warn("RIT with ServerName null! " + rtp);<a name="line.399"></a>
-<span class="sourceLineNo">400</span> continue;<a name="line.400"></a>
-<span class="sourceLineNo">401</span> }<a name="line.401"></a>
-<span class="sourceLineNo">402</span> if (!rtpServerName.equals(this.serverName)) continue;<a name="line.402"></a>
-<span class="sourceLineNo">403</span> LOG.info("pid=" + getProcId() + " found RIT " + rtp + "; " +<a name="line.403"></a>
-<span class="sourceLineNo">404</span> rtp.getRegionState(env).toShortString());<a name="line.404"></a>
-<span class="sourceLineNo">405</span> // Notify RIT on server crash.<a name="line.405"></a>
-<span class="sourceLineNo">406</span> if (sce == null) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span> sce = new ServerCrashException(getProcId(), getServerName());<a name="line.407"></a>
-<span class="sourceLineNo">408</span> }<a name="line.408"></a>
-<span class="sourceLineNo">409</span> rtp.remoteCallFailed(env, this.serverName, sce);<a name="line.409"></a>
-<span class="sourceLineNo">410</span> // If an assign, remove from passed-in list of regions so we subsequently do not create<a name="line.410"></a>
-<span class="sourceLineNo">411</span> // a new assign; the exisitng assign after the call to remoteCallFailed will recalibrate<a name="line.411"></a>
-<span class="sourceLineNo">412</span> // and assign to a server other than the crashed one; no need to create new assign.<a name="line.412"></a>
-<span class="sourceLineNo">413</span> // If an unassign, do not return this region; the above cancel will wake up the unassign and<a name="line.413"></a>
-<span class="sourceLineNo">414</span> // it will complete. Done.<a name="line.414"></a>
-<span class="sourceLineNo">415</span> it.remove();<a name="line.415"></a>
-<span class="sourceLineNo">416</span> }<a name="line.416"></a>
-<span class="sourceLineNo">417</span> return toAssign;<a name="line.417"></a>
-<span class="sourceLineNo">418</span> }<a name="line.418"></a>
-<span class="sourceLineNo">419</span><a name="line.419"></a>
-<span class="sourceLineNo">420</span> @Override<a name="line.420"></a>
-<span class="sourceLineNo">421</span> protected ProcedureMetrics getProcedureMetrics(MasterProcedureEnv env) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span> return env.getMasterServices().getMasterMetrics().getServerCrashProcMetrics();<a name="line.422"></a>
-<span class="sourceLineNo">423</span> }<a name="line.423"></a>
-<span class="sourceLineNo">424</span>}<a name="line.424"></a>
+<span class="sourceLineNo">166</span> // Returns list of regions we need to reassign. NOTE: there is nothing to stop a<a name="line.166"></a>
+<span class="sourceLineNo">167</span> // dispatch happening AFTER this point. Check for the condition if a dispatch RPC fails<a name="line.167"></a>
+<span class="sourceLineNo">168</span> // inside in AssignProcedure/UnassignProcedure. AssignProcedure just keeps retrying.<a name="line.168"></a>
+<span class="sourceLineNo">169</span> // UnassignProcedure is more complicated. See where it does the check by calling<a name="line.169"></a>
+<span class="sourceLineNo">170</span> // am#isDeadServerProcessed.<a name="line.170"></a>
+<span class="sourceLineNo">171</span> List<RegionInfo> toAssign = handleRIT(env, regionsOnCrashedServer);<a name="line.171"></a>
+<span class="sourceLineNo">172</span> AssignmentManager am = env.getAssignmentManager();<a name="line.172"></a>
+<span class="sourceLineNo">173</span> // CreateAssignProcedure will try to use the old location for the region deploy.<a name="line.173"></a>
+<span class="sourceLineNo">174</span> addChildProcedure(am.createAssignProcedures(toAssign));<a name="line.174"></a>
+<span class="sourceLineNo">175</span> setNextState(ServerCrashState.SERVER_CRASH_HANDLE_RIT2);<a name="line.175"></a>
+<span class="sourceLineNo">176</span> } else {<a name="line.176"></a>
+<span class="sourceLineNo">177</span> setNextState(ServerCrashState.SERVER_CRASH_FINISH);<a name="line.177"></a>
+<span class="sourceLineNo">178</span> }<a name="line.178"></a>
+<span class="sourceLineNo">179</span> break;<a name="line.179"></a>
+<span class="sourceLineNo">180</span><a name="line.180"></a>
+<span class="sourceLineNo">181</span> case SERVER_CRASH_HANDLE_RIT2:<a name="line.181"></a>
+<span class="sourceLineNo">182</span> // Noop. Left in place because we used to call handleRIT here for a second time<a name="line.182"></a>
+<span class="sourceLineNo">183</span> // but no longer necessary since HBASE-20634.<a name="line.183"></a>
+<span class="sourceLineNo">184</span> setNextState(ServerCrashState.SERVER_CRASH_FINISH);<a name="line.184"></a>
+<span class="sourceLineNo">185</span> break;<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span> case SERVER_CRASH_FINISH:<a name="line.187"></a>
+<span class="sourceLineNo">188</span> services.getAssignmentManager().getRegionStates().removeServer(serverName);<a name="line.188"></a>
+<span class="sourceLineNo">189</span> services.getServerManager().getDeadServers().finish(serverName);<a name="line.189"></a>
+<span class="sourceLineNo">190</span> return Flow.NO_MORE_STATE;<a name="line.190"></a>
+<span class="sourceLineNo">191</span><a name="line.191"></a>
+<span class="sourceLineNo">192</span> default:<a name="line.192"></a>
+<span class="sourceLineNo">193</span> throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.193"></a>
+<span class="sourceLineNo">194</span> }<a name="line.194"></a>
+<span class="sourceLineNo">195</span> } catch (IOException e) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span> LOG.warn("Failed state=" + state + ", retry " + this + "; cycles=" + getCycles(), e);<a name="line.196"></a>
+<span class="sourceLineNo">197</span> }<a name="line.197"></a>
+<span class="sourceLineNo">198</span> return Flow.HAS_MORE_STATE;<a name="line.198"></a>
+<span class="sourceLineNo">199</span> }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span> /**<a name="line.202"></a>
+<span class="sourceLineNo">203</span> * @param env<a name="line.203"></a>
+<span class="sourceLineNo">204</span> * @throws IOException<a name="line.204"></a>
+<span class="sourceLineNo">205</span> */<a name="line.205"></a>
+<span class="sourceLineNo">206</span> private void processMeta(final MasterProcedureEnv env) throws IOException {<a name="line.206"></a>
+<span class="sourceLineNo">207</span> LOG.debug("{}; processing hbase:meta", this);<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span> // Assign meta if still carrying it. Check again: region may be assigned because of RIT timeout<a name="line.209"></a>
+<span class="sourceLineNo">210</span> final AssignmentManager am = env.getMasterServices().getAssignmentManager();<a name="line.210"></a>
+<span class="sourceLineNo">211</span> for (RegionInfo hri: am.getRegionStates().getServerRegionInfoSet(serverName)) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span> if (!isDefaultMetaRegion(hri)) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> continue;<a name="line.213"></a>
+<span class="sourceLineNo">214</span> }<a name="line.214"></a>
+<span class="sourceLineNo">215</span> addChildProcedure(new RecoverMetaProcedure(serverName, this.shouldSplitWal));<a name="line.215"></a>
+<span class="sourceLineNo">216</span> }<a name="line.216"></a>
+<span class="sourceLineNo">217</span> }<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span> private boolean filterDefaultMetaRegions(final List<RegionInfo> regions) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span> if (regions == null) return false;<a name="line.220"></a>
+<span class="sourceLineNo">221</span> regions.removeIf(this::isDefaultMetaRegion);<a name="line.221"></a>
+<span class="sourceLineNo">222</span> return !regions.isEmpty();<a name="line.222"></a>
+<span class="sourceLineNo">223</span> }<a name="line.223"></a>
+<span class="sourceLineNo">224</span><a name="line.224"></a>
+<span class="sourceLineNo">225</span> private boolean isDefaultMetaRegion(final RegionInfo hri) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span> return hri.getTable().equals(TableName.META_TABLE_NAME) &&<a name="line.226"></a>
+<span class="sourceLineNo">227</span> RegionReplicaUtil.isDefaultReplica(hri);<a name="line.227"></a>
+<span class="sourceLineNo">228</span> }<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span> private void splitLogs(final MasterProcedureEnv env) throws IOException {<a name="line.230"></a>
+<span class="sourceLineNo">231</span> if (LOG.isDebugEnabled()) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span> LOG.debug("Splitting WALs " + this);<a name="line.232"></a>
+<span class="sourceLineNo">233</span> }<a name="line.233"></a>
+<span class="sourceLineNo">234</span> MasterWalManager mwm = env.getMasterServices().getMasterWalManager();<a name="line.234"></a>
+<span class="sourceLineNo">235</span> AssignmentManager am = env.getMasterServices().getAssignmentManager();<a name="line.235"></a>
+<span class="sourceLineNo">236</span> // TODO: For Matteo. Below BLOCKs!!!! Redo so can relinquish executor while it is running.<a name="line.236"></a>
+<span class="sourceLineNo">237</span> // PROBLEM!!! WE BLOCK HERE.<a name="line.237"></a>
+<span class="sourceLineNo">238</span> am.getRegionStates().logSplitting(this.serverName);<a name="line.238"></a>
+<span class="sourceLineNo">239</span> mwm.splitLog(this.serverName);<a name="line.239"></a>
+<span class="sourceLineNo">240</span> am.getRegionStates().logSplit(this.serverName);<a name="line.240"></a>
+<span class="sourceLineNo">241</span> LOG.debug("Done splitting WALs {}", this);<a name="line.241"></a>
+<span class="sourceLineNo">242</span> }<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span> @Override<a name="line.244"></a>
+<span class="sourceLineNo">245</span> protected void rollbackState(MasterProcedureEnv env, ServerCrashState state)<a name="line.245"></a>
+<span class="sourceLineNo">246</span> throws IOException {<a name="line.246"></a>
+<span class="sourceLineNo">247</span> // Can't rollback.<a name="line.247"></a>
+<span class="sourceLineNo">248</span> throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.248"></a>
+<span class="sourceLineNo">249</span> }<a name="line.249"></a>
+<span class="sourceLineNo">250</span><a name="line.250"></a>
+<span class="sourceLineNo">251</span> @Override<a name="line.251"></a>
+<span class="sourceLineNo">252</span> protected ServerCrashState getState(int stateId) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span> return ServerCrashState.forNumber(stateId);<a name="line.253"></a>
+<span class="sourceLineNo">254</span> }<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span> @Override<a name="line.256"></a>
+<span class="sourceLineNo">257</span> protected int getStateId(ServerCrashState state) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span> return state.getNumber();<a name="line.258"></a>
+<span class="sourceLineNo">259</span> }<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span> @Override<a name="line.261"></a>
+<span class="sourceLineNo">262</span> protected ServerCrashState getInitialState() {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> return ServerCrashState.SERVER_CRASH_START;<a name="line.263"></a>
+<span class="sourceLineNo">264</span> }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span> @Override<a name="line.266"></a>
+<span class="sourceLineNo">267</span> protected boolean abort(MasterProcedureEnv env) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span> // TODO<a name="line.268"></a>
+<span class="sourceLineNo">269</span> return false;<a name="line.269"></a>
+<span class="sourceLineNo">270</span> }<a name="line.270"></a>
+<span class="sourceLineNo">271</span><a name="line.271"></a>
+<span class="sourceLineNo">272</span> @Override<a name="line.272"></a>
+<span class="sourceLineNo">273</span> protected LockState acquireLock(final MasterProcedureEnv env) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span> // TODO: Put this BACK AFTER AMv2 goes in!!!!<a name="line.274"></a>
+<span class="sourceLineNo">275</span> // if (env.waitFailoverCleanup(this)) return LockState.LOCK_EVENT_WAIT;<a name="line.275"></a>
+<span class="sourceLineNo">276</span> if (env.waitServerCrashProcessingEnabled(this)) return LockState.LOCK_EVENT_WAIT;<a name="line.276"></a>
+<span class="sourceLineNo">277</span> if (env.getProcedureScheduler().waitServerExclusiveLock(this, getServerName())) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span> return LockState.LOCK_EVENT_WAIT;<a name="line.278"></a>
+<span class="sourceLineNo">279</span> }<a name="line.279"></a>
+<span class="sourceLineNo">280</span> return LockState.LOCK_ACQUIRED;<a name="line.280"></a>
+<span class="sourceLineNo">281</span> }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span> @Override<a name="line.283"></a>
+<span class="sourceLineNo">284</span> protected void releaseLock(final MasterProcedureEnv env) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span> env.getProcedureScheduler().wakeServerExclusiveLock(this, getServerName());<a name="line.285"></a>
+<span class="sourceLineNo">286</span> }<a name="line.286"></a>
+<span class="sourceLineNo">287</span><a name="line.287"></a>
+<span class="sourceLineNo">288</span> @Override<a name="line.288"></a>
+<span class="sourceLineNo">289</span> public void toStringClassDetails(StringBuilder sb) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span> sb.append(getClass().getSimpleName());<a name="line.290"></a>
+<span class="sourceLineNo">291</span> sb.append(" server=");<a name="line.291"></a>
+<span class="sourceLineNo">292</span> sb.append(serverName);<a name="line.292"></a>
+<span class="sourceLineNo">293</span> sb.append(", splitWal=");<a name="line.293"></a>
+<span class="sourceLineNo">294</span> sb.append(shouldSplitWal);<a name="line.294"></a>
+<span class="sourceLineNo">295</span> sb.append(", meta=");<a name="line.295"></a>
+<span class="sourceLineNo">296</span> sb.append(carryingMeta);<a name="line.296"></a>
+<span class="sourceLineNo">297</span> }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span> @Override<a name="line.299"></a>
+<span class="sourceLineNo">300</span> protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.300"></a>
+<span class="sourceLineNo">301</span> throws IOException {<a name="line.301"></a>
+<span class="sourceLineNo">302</span> super.serializeStateData(serializer);<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span> MasterProcedureProtos.ServerCrashStateData.Builder state =<a name="line.304"></a>
+<span class="sourceLineNo">305</span> MasterProcedureProtos.ServerCrashStateData.newBuilder().<a name="line.305"></a>
+<span class="sourceLineNo">306</span> setServerName(ProtobufUtil.toServerName(this.serverName)).<a name="line.306"></a>
+<span class="sourceLineNo">307</span> setCarryingMeta(this.carryingMeta).<a name="line.307"></a>
+<span class="sourceLineNo">308</span> setShouldSplitWal(this.shouldSplitWal);<a name="line.308"></a>
+<span class="sourceLineNo">309</span> if (this.regionsOnCrashedServer != null && !this.regionsOnCrashedServer.isEmpty()) {<a name="line.309"></a>
+<span class="sourceLineNo">310</span> for (RegionInfo hri: this.regionsOnCrashedServer) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span> state.addRegionsOnCrashedServer(ProtobufUtil.toRegionInfo(hri));<a name="line.311"></a>
+<span class="sourceLineNo">312</span> }<a name="line.312"></a>
+<span class="sourceLineNo">313</span> }<a name="line.313"></a>
+<span class="sourceLineNo">314</span> serializer.serialize(state.build());<a name="line.314"></a>
+<span class="sourceLineNo">315</span> }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span> @Override<a name="line.317"></a>
+<span class="sourceLineNo">318</span> protected void deserializeStateData(ProcedureStateSerializer serializer)<a name="line.318"></a>
+<span class="sourceLineNo">319</span> throws IOException {<a name="line.319"></a>
+<span class="sourceLineNo">320</span> super.deserializeStateData(serializer);<a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span> MasterProcedureProtos.ServerCrashStateData state =<a name="line.322"></a>
+<span class="sourceLineNo">323</span> serializer.deserialize(MasterProcedureProtos.ServerCrashStateData.class);<a name="line.323"></a>
+<span class="sourceLineNo">324</span> this.serverName = ProtobufUtil.toServerName(state.getServerName());<a name="line.324"></a>
+<span class="sourceLineNo">325</span> this.carryingMeta = state.hasCarryingMeta()? state.getCarryingMeta(): false;<a name="line.325"></a>
+<span class="sourceLineNo">326</span> // shouldSplitWAL has a default over in pb so this invocation will always work.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> this.shouldSplitWal = state.getShouldSplitWal();<a name="line.327"></a>
+<span class="sourceLineNo">328</span> int size = state.getRegionsOnCrashedServerCount();<a name="line.328"></a>
+<span class="sourceLineNo">329</span> if (size > 0) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span> this.regionsOnCrashedServer = new ArrayList<>(size);<a name="line.330"></a>
+<span class="sourceLineNo">331</span> for (org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo ri: state.getRegionsOnCrashedServerList()) {<a name="line.331"></a>
+<span class="sourceLineNo">332</span> this.regionsOnCrashedServer.add(ProtobufUtil.toRegionInfo(ri));<a name="line.332"></a>
+<span class="sourceLineNo">333</span> }<a name="line.333"></a>
+<span class="sourceLineNo">334</span> }<a name="line.334"></a>
+<span class="sourceLineNo">335</span> }<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> @Override<a name="line.337"></a>
+<span class="sourceLineNo">338</span> public ServerName getServerName() {<a name="line.338"></a>
+<span class="sourceLineNo">339</span> return this.serverName;<a name="line.339"></a>
+<span class="sourceLineNo">340</span> }<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span> @Override<a name="line.342"></a>
+<span class="sourceLineNo">343</span> public boolean hasMetaTableRegion() {<a name="line.343"></a>
+<span class="sourceLineNo">344</span> return this.carryingMeta;<a name="line.344"></a>
+<span class="sourceLineNo">345</span> }<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span> @Override<a name="line.347"></a>
+<span class="sourceLineNo">348</span> public ServerOperationType getServerOperationType() {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> return ServerOperationType.CRASH_HANDLER;<a name="line.349"></a>
+<span class="sourceLineNo">350</span> }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span> /**<a name="line.352"></a>
+<span class="sourceLineNo">353</span> * For this procedure, yield at end of each successful flow step so that all crashed servers<a name="line.353"></a>
+<span class="sourceLineNo">354</span> * can make progress rather than do the default which has each procedure running to completion<a name="line.354"></a>
+<span class="sourceLineNo">355</span> * before we move to the next. For crashed servers, especially if running with distributed log<a name="line.355"></a>
+<span class="sourceLineNo">356</span> * replay, we will want all servers to come along; we do not want the scenario where a server is<a name="line.356"></a>
+<span class="sourceLineNo">357</span> * stuck waiting for regions to online so it can replay edits.<a name="line.357"></a>
+<span class="sourceLineNo">358</span> */<a name="line.358"></a>
+<span class="sourceLineNo">359</span> @Override<a name="line.359"></a>
+<span class="sourceLineNo">360</span> protected boolean isYieldBeforeExecuteFromState(MasterProcedureEnv env, ServerCrashState state) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span> return true;<a name="line.361"></a>
+<span class="sourceLineNo">362</span> }<a name="line.362"></a>
+<span class="sourceLineNo">363</span><a name="line.363"></a>
+<span class="sourceLineNo">364</span> @Override<a name="line.364"></a>
+<span class="sourceLineNo">365</span> protected boolean shouldWaitClientAck(MasterProcedureEnv env) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span> // The operation is triggered internally on the server<a name="line.366"></a>
+<span class="sourceLineNo">367</span> // the client does not know about this procedure.<a name="line.367"></a>
+<span class="sourceLineNo">368</span> return false;<a name="line.368"></a>
+<span class="sourceLineNo">369</span> }<a name="line.369"></a>
+<span class="sourceLineNo">370</span><a name="line.370"></a>
+<span class="sourceLineNo">371</span> /**<a name="line.371"></a>
+<span class="sourceLineNo">372</span> * Handle any outstanding RIT that are up against this.serverName, the crashed server.<a name="line.372"></a>
+<span class="sourceLineNo">373</span> * Notify them of crash. Remove assign entries from the passed in <code>regions</code><a name="line.373"></a>
+<span class="sourceLineNo">374</span> * otherwise we have two assigns going on and they will fight over who has lock.<a name="line.374"></a>
+<span class="sourceLineNo">375</span> * Notify Unassigns. If unable to unassign because server went away, unassigns block waiting<a name="line.375"></a>
+<span class="sourceLineNo">376</span> * on the below callback from a ServerCrashProcedure before proceeding.<a name="line.376"></a>
+<span class="sourceLineNo">377</span> * @param regions Regions on the Crashed Server.<a name="line.377"></a>
+<span class="sourceLineNo">378</span> * @return List of regions we should assign to new homes (not same as regions on crashed server).<a name="line.378"></a>
+<span class="sourceLineNo">379</span> */<a name="line.379"></a>
+<span class="sourceLineNo">380</span> private List<RegionInfo> handleRIT(final MasterProcedureEnv env, List<RegionInfo> regions) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span> if (regions == null || regions.isEmpty()) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span> return Collections.emptyList();<a name="line.382"></a>
+<span class="sourceLineNo">383</span> }<a name="line.383"></a>
+<span class="sourceLineNo">384</span> AssignmentManager am = env.getMasterServices().getAssignmentManager();<a name="line.384"></a>
+<span class="sourceLineNo">385</span> List<RegionInfo> toAssign = new ArrayList<RegionInfo>(regions);<a name="line.385"></a>
+<span class="sourceLineNo">386</span> // Get an iterator so can remove items.<a name="line.386"></a>
+<span class="sourceLineNo">387</span> final Iterator<RegionInfo> it = toAssign.iterator();<a name="line.387"></a>
+<span class="sourceLineNo">388</span> ServerCrashException sce = null;<a name="line.388"></a>
+<span class="sourceLineNo">389</span> while (it.hasNext()) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> final RegionInfo hri = it.next();<a name="line.390"></a>
+<span class="sourceLineNo">391</span> RegionTransitionProcedure rtp = am.getRegionStates().getRegionTransitionProcedure(hri);<a name="line.391"></a>
+<span class="sourceLineNo">392</span> if (rtp == null) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span> continue;<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span> // Make sure the RIT is against this crashed server. In the case where there are many<a name="line.395"></a>
+<span class="sourceLineNo">396</span> // processings of a crashed server -- backed up for whatever reason (slow WAL split) --<a name="line.396"></a>
+<span class="sourceLineNo">397</span> // then a previous SCP may have already failed an assign, etc., and it may have a new<a name="line.397"></a>
+<span class="sourceLineNo">398</span> // location target; DO NOT fail these else we make for assign flux.<a name="line.398"></a>
+<span class="sourceLineNo">399</span> ServerName rtpServerName = rtp.getServer(env);<a name="line.399"></a>
+<span class="sourceLineNo">400</span> if (rtpServerName == null) {<a name="line.400"></a>
+<span class="sourceLineNo">401</span> LOG.warn("RIT with ServerName null! " + rtp);<a name="line.401"></a>
+<span class="sourceLineNo">402</span> continue;<a name="line.402"></a>
+<span class="sourceLineNo">403</span> }<a name="line.403"></a>
+<span class="sourceLineNo">404</span> if (!rtpServerName.equals(this.serverName)) continue;<a name="line.404"></a>
+<span class="sourceLineNo">405</span> LOG.info("pid=" + getProcId() + " found RIT " + rtp + "; " +<a name="line.405"></a>
+<span class="sourceLineNo">406</span> rtp.getRegionState(env).toShortString());<a name="line.406"></a>
+<span class="sourceLineNo">407</span> // Notify RIT on server crash.<a name="line.407"></a>
+<span class="sourceLineNo">408</span> if (sce == null) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span> sce = new ServerCrashException(getProcId(), getServerName());<a name="line.409"></a>
+<span class="sourceLineNo">410</span> }<a name="line.410"></a>
+<span class="sourceLineNo">411</span> rtp.remoteCallFailed(env, this.serverName, sce);<a name="line.411"></a>
+<span class="sourceLineNo">412</span> // If an assign, remove from passed-in list of regions so we subsequently do not create<a name="line.412"></a>
+<span class="sourceLineNo">413</span> // a new assign; the exisitng assign after the call to remoteCallFailed will recalibrate<a name="line.413"></a>
+<span class="sourceLineNo">414</span> // and assign to a server other than the crashed one; no need to create new assign.<a name="line.414"></a>
+<span class="sourceLineNo">415</span> // If an unassign, do not return this region; the above cancel will wake up the unassign and<a name="line.415"></a>
+<span class="sourceLineNo">416</span> // it will complete. Done.<a name="line.416"></a>
+<span class="sourceLineNo">417</span> it.remove();<a name="line.417"></a>
+<span class="sourceLineNo">418</span> }<a name="line.418"></a>
+<span class="sourceLineNo">419</span> return toAssign;<a name="line.419"></a>
+<span class="sourceLineNo">420</span> }<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span> @Override<a name="line.422"></a>
+<span class="sourceLineNo">423</span> protected ProcedureMetrics getProcedureMetrics(MasterProcedureEnv env) {<a name="line.423"></a>
+<span class="sourceLineNo">424</span> return env.getMasterServices().getMasterMetrics().getServerCrashProcMetrics();<a name="line.424"></a>
+<span class="sourceLineNo">425</span> }<a name="line.425"></a>
+<span class="sourceLineNo">426</span>}<a name="line.426"></a>
[42/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/ServerManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/ServerManager.html b/devapidocs/org/apache/hadoop/hbase/master/ServerManager.html
index 49b399a..af6c596 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/ServerManager.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/ServerManager.html
@@ -353,7 +353,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
</td>
</tr>
<tr id="i10" class="altColor">
-<td class="colFirst"><code>void</code></td>
+<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#expireServer-org.apache.hadoop.hbase.ServerName-">expireServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code> </td>
</tr>
<tr id="i11" class="rowColor">
@@ -1126,7 +1126,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>expireServer</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.561">expireServer</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.565">expireServer</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
</li>
</ul>
<a name="moveFromOnlineToDeadServers-org.apache.hadoop.hbase.ServerName-">
@@ -1135,7 +1135,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>moveFromOnlineToDeadServers</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.608">moveFromOnlineToDeadServers</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.614">moveFromOnlineToDeadServers</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)</pre>
</li>
</ul>
<a name="processDeadServer-org.apache.hadoop.hbase.ServerName-boolean-">
@@ -1144,7 +1144,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>processDeadServer</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.623">processDeadServer</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.629">processDeadServer</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
boolean shouldSplitWal)</pre>
</li>
</ul>
@@ -1154,7 +1154,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>processQueuedDeadServers</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.645">processQueuedDeadServers</a>()</pre>
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.651">processQueuedDeadServers</a>()</pre>
<div class="block">Process the servers which died during master's initialization. It will be
called after HMaster#assignMeta and AssignmentManager#joinCluster.</div>
</li>
@@ -1165,7 +1165,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>removeServerFromDrainList</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.672">removeServerFromDrainList</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.678">removeServerFromDrainList</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)</pre>
</li>
</ul>
<a name="addServerToDrainList-org.apache.hadoop.hbase.ServerName-">
@@ -1174,7 +1174,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>addServerToDrainList</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.689">addServerToDrainList</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.695">addServerToDrainList</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)</pre>
<div class="block">Add the server to the drain list.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -1190,7 +1190,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>newRpcController</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRpcController.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRpcController</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.711">newRpcController</a>()</pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRpcController.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRpcController</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.717">newRpcController</a>()</pre>
</li>
</ul>
<a name="sendRegionWarmup-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -1199,7 +1199,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>sendRegionWarmup</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.723">sendRegionWarmup</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> server,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.729">sendRegionWarmup</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> server,
<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> region)</pre>
<div class="block">Sends a WARMUP RPC to the specified server to warmup the specified region.
<p>
@@ -1218,7 +1218,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>closeRegionSilentlyAndWait</h4>
-<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.741">closeRegionSilentlyAndWait</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a> connection,
+<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.747">closeRegionSilentlyAndWait</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a> connection,
<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> server,
<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> region,
long timeout)
@@ -1239,7 +1239,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getRsAdmin</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.775">getRsAdmin</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.781">getRsAdmin</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> sn)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -1258,7 +1258,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getMinToStart</h4>
-<pre>private int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.796">getMinToStart</a>()</pre>
+<pre>private int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.802">getMinToStart</a>()</pre>
<div class="block">Calculate min necessary to start. This is not an absolute. It is just
a friction that will cause us hang around a bit longer waiting on
RegionServers to check-in.</div>
@@ -1270,7 +1270,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>waitForRegionServers</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.825">waitForRegionServers</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a> status)
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.831">waitForRegionServers</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a> status)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
<div class="block">Wait for the region servers to report in.
We will wait until one of this condition is met:
@@ -1293,7 +1293,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getStrForMax</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.892">getStrForMax</a>(int max)</pre>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.898">getStrForMax</a>(int max)</pre>
</li>
</ul>
<a name="getOnlineServersList--">
@@ -1302,7 +1302,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getOnlineServersList</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.899">getOnlineServersList</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.905">getOnlineServersList</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A copy of the internal list of online servers.</dd>
@@ -1315,7 +1315,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getOnlineServersListWithPredicator</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.910">getOnlineServersListWithPredicator</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> keys,
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.916">getOnlineServersListWithPredicator</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> keys,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Predicate.html?is-external=true" title="class or interface in java.util.function">Predicate</a><<a href="../../../../../org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase">ServerMetrics</a>> idleServerPredicator)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -1332,7 +1332,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getDrainingServersList</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.929">getDrainingServersList</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.935">getDrainingServersList</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A copy of the internal list of draining servers.</dd>
@@ -1345,7 +1345,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getDeadNotExpiredServers</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.936">getDeadNotExpiredServers</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.942">getDeadNotExpiredServers</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A copy of the internal set of deadNotExpired servers.</dd>
@@ -1358,7 +1358,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>isServerOnline</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.940">isServerOnline</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.946">isServerOnline</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
</li>
</ul>
<a name="isServerDead-org.apache.hadoop.hbase.ServerName-">
@@ -1367,7 +1367,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>isServerDead</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.950">isServerDead</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.956">isServerDead</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
<div class="block">Check if a server is known to be dead. A server can be online,
or known to be dead, or unknown to this manager (i.e, not online,
not known to be dead either. it is simply not tracked by the
@@ -1380,7 +1380,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>shutdownCluster</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.956">shutdownCluster</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.962">shutdownCluster</a>()</pre>
</li>
</ul>
<a name="isClusterShutdown--">
@@ -1389,7 +1389,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>isClusterShutdown</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.966">isClusterShutdown</a>()</pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.972">isClusterShutdown</a>()</pre>
</li>
</ul>
<a name="stop--">
@@ -1398,7 +1398,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>stop</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.973">stop</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.979">stop</a>()</pre>
<div class="block">Stop the ServerManager.</div>
</li>
</ul>
@@ -1408,7 +1408,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>createDestinationServersList</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.982">createDestinationServersList</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> serversToExclude)</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.988">createDestinationServersList</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> serversToExclude)</pre>
<div class="block">Creates a list of possible destinations for a region. It contains the online servers, but not
the draining or dying servers.</div>
<dl>
@@ -1423,7 +1423,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>createDestinationServersList</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.1001">createDestinationServersList</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.1007">createDestinationServersList</a>()</pre>
<div class="block">Calls <a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html#createDestinationServersList-java.util.List-"><code>createDestinationServersList(java.util.List<org.apache.hadoop.hbase.ServerName>)</code></a> without server to exclude.</div>
</li>
</ul>
@@ -1433,7 +1433,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>removeDeadNotExpiredServers</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.1011">removeDeadNotExpiredServers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> servers)</pre>
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.1017">removeDeadNotExpiredServers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> servers)</pre>
<div class="block">Loop through the deadNotExpired server list and remove them from the
servers.
This function should be used carefully outside of this class. You should use a high level
@@ -1446,7 +1446,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>clearDeadServersWithSameHostNameAndPortOfOnlineServer</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.1025">clearDeadServersWithSameHostNameAndPortOfOnlineServer</a>()</pre>
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.1031">clearDeadServersWithSameHostNameAndPortOfOnlineServer</a>()</pre>
<div class="block">To clear any dead server with same host name and port of any online server</div>
</li>
</ul>
@@ -1456,7 +1456,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>removeRegion</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.1034">removeRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.1040">removeRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
<div class="block">Called by delete table and similar to notify the ServerManager that a region was removed.</div>
</li>
</ul>
@@ -1466,7 +1466,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>isRegionInServerManagerStates</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.1041">isRegionInServerManagerStates</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> hri)</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.1047">isRegionInServerManagerStates</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> hri)</pre>
</li>
</ul>
<a name="removeRegions-java.util.List-">
@@ -1475,7 +1475,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>removeRegions</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.1050">removeRegions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> regions)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/ServerManager.html#line.1056">removeRegions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> regions)</pre>
<div class="block">Called by delete table and similar to notify the ServerManager that a region was removed.</div>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignProcedure.CompareAssignProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignProcedure.CompareAssignProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignProcedure.CompareAssignProcedure.html
index 3b784b4..48ed585 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignProcedure.CompareAssignProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignProcedure.CompareAssignProcedure.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/GCMergedRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/AssignProcedure.CompareAssignProcedure.html" target="_top">Frames</a></li>
@@ -252,7 +252,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparat
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/GCMergedRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/AssignProcedure.CompareAssignProcedure.html" target="_top">Frames</a></li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html
index f3207fd..4a07c88 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>private static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1077">AssignmentManager.RegionInTransitionChore</a>
+<pre>private static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1080">AssignmentManager.RegionInTransitionChore</a>
extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureInMemoryChore.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureInMemoryChore</a><<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>></pre>
</li>
</ul>
@@ -240,7 +240,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureI
<ul class="blockListLast">
<li class="blockList">
<h4>RegionInTransitionChore</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html#line.1078">RegionInTransitionChore</a>(int timeoutMsec)</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html#line.1081">RegionInTransitionChore</a>(int timeoutMsec)</pre>
</li>
</ul>
</li>
@@ -257,7 +257,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureI
<ul class="blockListLast">
<li class="blockList">
<h4>periodicExecute</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html#line.1083">periodicExecute</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html#line.1086">periodicExecute</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureInMemoryChore.html#periodicExecute-TEnvironment-">periodicExecute</a></code> in class <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureInMemoryChore.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureInMemoryChore</a><<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>></code></dd>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html
index a6a4db7..769f992 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1104">AssignmentManager.RegionInTransitionStat</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1107">AssignmentManager.RegionInTransitionStat</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
</li>
</ul>
@@ -266,7 +266,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>ritThreshold</h4>
-<pre>private final int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1105">ritThreshold</a></pre>
+<pre>private final int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1108">ritThreshold</a></pre>
</li>
</ul>
<a name="ritsOverThreshold">
@@ -275,7 +275,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>ritsOverThreshold</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1107">ritsOverThreshold</a></pre>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1110">ritsOverThreshold</a></pre>
</li>
</ul>
<a name="statTimestamp">
@@ -284,7 +284,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>statTimestamp</h4>
-<pre>private long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1108">statTimestamp</a></pre>
+<pre>private long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1111">statTimestamp</a></pre>
</li>
</ul>
<a name="oldestRITTime">
@@ -293,7 +293,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>oldestRITTime</h4>
-<pre>private long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1109">oldestRITTime</a></pre>
+<pre>private long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1112">oldestRITTime</a></pre>
</li>
</ul>
<a name="totalRITsTwiceThreshold">
@@ -302,7 +302,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>totalRITsTwiceThreshold</h4>
-<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1110">totalRITsTwiceThreshold</a></pre>
+<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1113">totalRITsTwiceThreshold</a></pre>
</li>
</ul>
<a name="totalRITs">
@@ -311,7 +311,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>totalRITs</h4>
-<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1111">totalRITs</a></pre>
+<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1114">totalRITs</a></pre>
</li>
</ul>
</li>
@@ -328,7 +328,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>RegionInTransitionStat</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1114">RegionInTransitionStat</a>(org.apache.hadoop.conf.Configuration conf)</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1117">RegionInTransitionStat</a>(org.apache.hadoop.conf.Configuration conf)</pre>
</li>
</ul>
</li>
@@ -345,7 +345,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getRITThreshold</h4>
-<pre>public int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1119">getRITThreshold</a>()</pre>
+<pre>public int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1122">getRITThreshold</a>()</pre>
</li>
</ul>
<a name="getTimestamp--">
@@ -354,7 +354,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getTimestamp</h4>
-<pre>public long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1123">getTimestamp</a>()</pre>
+<pre>public long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1126">getTimestamp</a>()</pre>
</li>
</ul>
<a name="getTotalRITs--">
@@ -363,7 +363,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getTotalRITs</h4>
-<pre>public int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1127">getTotalRITs</a>()</pre>
+<pre>public int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1130">getTotalRITs</a>()</pre>
</li>
</ul>
<a name="getOldestRITTime--">
@@ -372,7 +372,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getOldestRITTime</h4>
-<pre>public long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1131">getOldestRITTime</a>()</pre>
+<pre>public long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1134">getOldestRITTime</a>()</pre>
</li>
</ul>
<a name="getTotalRITsOverThreshold--">
@@ -381,7 +381,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getTotalRITsOverThreshold</h4>
-<pre>public int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1135">getTotalRITsOverThreshold</a>()</pre>
+<pre>public int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1138">getTotalRITsOverThreshold</a>()</pre>
</li>
</ul>
<a name="hasRegionsTwiceOverThreshold--">
@@ -390,7 +390,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>hasRegionsTwiceOverThreshold</h4>
-<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1140">hasRegionsTwiceOverThreshold</a>()</pre>
+<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1143">hasRegionsTwiceOverThreshold</a>()</pre>
</li>
</ul>
<a name="hasRegionsOverThreshold--">
@@ -399,7 +399,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>hasRegionsOverThreshold</h4>
-<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1144">hasRegionsOverThreshold</a>()</pre>
+<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1147">hasRegionsOverThreshold</a>()</pre>
</li>
</ul>
<a name="getRegionOverThreshold--">
@@ -408,7 +408,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getRegionOverThreshold</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1149">getRegionOverThreshold</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1152">getRegionOverThreshold</a>()</pre>
</li>
</ul>
<a name="isRegionOverThreshold-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -417,7 +417,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>isRegionOverThreshold</h4>
-<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1154">isRegionOverThreshold</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
+<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1157">isRegionOverThreshold</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
</li>
</ul>
<a name="isRegionTwiceOverThreshold-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -426,7 +426,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>isRegionTwiceOverThreshold</h4>
-<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1159">isRegionTwiceOverThreshold</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
+<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1162">isRegionTwiceOverThreshold</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
</li>
</ul>
<a name="update-org.apache.hadoop.hbase.master.assignment.AssignmentManager-">
@@ -435,7 +435,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>update</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1167">update</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a> am)</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1170">update</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a> am)</pre>
</li>
</ul>
<a name="update-java.util.Collection-long-">
@@ -444,7 +444,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>update</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1174">update</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>> regions,
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#line.1177">update</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>> regions,
long currentTime)</pre>
</li>
</ul>
[23/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html
index fe1e077..90c31f4 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html
@@ -1072,894 +1072,913 @@
<span class="sourceLineNo">1064</span><a name="line.1064"></a>
<span class="sourceLineNo">1065</span> protected boolean waitServerReportEvent(final ServerName serverName, final Procedure proc) {<a name="line.1065"></a>
<span class="sourceLineNo">1066</span> final ServerStateNode serverNode = regionStates.getOrCreateServer(serverName);<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span> return serverNode.getReportEvent().suspendIfNotReady(proc);<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span> }<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span><a name="line.1069"></a>
-<span class="sourceLineNo">1070</span> protected void wakeServerReportEvent(final ServerStateNode serverNode) {<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span> serverNode.getReportEvent().wake(getProcedureScheduler());<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span> }<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span><a name="line.1073"></a>
-<span class="sourceLineNo">1074</span> // ============================================================================================<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span> // RIT chore<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span> // ============================================================================================<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span> private static class RegionInTransitionChore extends ProcedureInMemoryChore<MasterProcedureEnv> {<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span> public RegionInTransitionChore(final int timeoutMsec) {<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span> super(timeoutMsec);<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span> }<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span><a name="line.1081"></a>
-<span class="sourceLineNo">1082</span> @Override<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span> protected void periodicExecute(final MasterProcedureEnv env) {<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span> final AssignmentManager am = env.getAssignmentManager();<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span><a name="line.1085"></a>
-<span class="sourceLineNo">1086</span> final RegionInTransitionStat ritStat = am.computeRegionInTransitionStat();<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span> if (ritStat.hasRegionsOverThreshold()) {<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span> for (RegionState hri: ritStat.getRegionOverThreshold()) {<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span> am.handleRegionOverStuckWarningThreshold(hri.getRegion());<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span> }<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span> }<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span><a name="line.1092"></a>
-<span class="sourceLineNo">1093</span> // update metrics<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span> am.updateRegionsInTransitionMetrics(ritStat);<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span> }<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span> }<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span><a name="line.1097"></a>
-<span class="sourceLineNo">1098</span> public RegionInTransitionStat computeRegionInTransitionStat() {<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span> final RegionInTransitionStat rit = new RegionInTransitionStat(getConfiguration());<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span> rit.update(this);<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span> return rit;<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span> }<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span><a name="line.1103"></a>
-<span class="sourceLineNo">1104</span> public static class RegionInTransitionStat {<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span> private final int ritThreshold;<a name="line.1105"></a>
+<span class="sourceLineNo">1067</span> if (serverNode == null) {<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span> LOG.warn("serverName=null; {}", proc);<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span> }<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span> return serverNode.getReportEvent().suspendIfNotReady(proc);<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span> }<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span><a name="line.1072"></a>
+<span class="sourceLineNo">1073</span> protected void wakeServerReportEvent(final ServerStateNode serverNode) {<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span> serverNode.getReportEvent().wake(getProcedureScheduler());<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span> }<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span><a name="line.1076"></a>
+<span class="sourceLineNo">1077</span> // ============================================================================================<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span> // RIT chore<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span> // ============================================================================================<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span> private static class RegionInTransitionChore extends ProcedureInMemoryChore<MasterProcedureEnv> {<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span> public RegionInTransitionChore(final int timeoutMsec) {<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span> super(timeoutMsec);<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span> }<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span><a name="line.1084"></a>
+<span class="sourceLineNo">1085</span> @Override<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span> protected void periodicExecute(final MasterProcedureEnv env) {<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span> final AssignmentManager am = env.getAssignmentManager();<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span><a name="line.1088"></a>
+<span class="sourceLineNo">1089</span> final RegionInTransitionStat ritStat = am.computeRegionInTransitionStat();<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span> if (ritStat.hasRegionsOverThreshold()) {<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span> for (RegionState hri: ritStat.getRegionOverThreshold()) {<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span> am.handleRegionOverStuckWarningThreshold(hri.getRegion());<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span> }<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span> }<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span><a name="line.1095"></a>
+<span class="sourceLineNo">1096</span> // update metrics<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span> am.updateRegionsInTransitionMetrics(ritStat);<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span> }<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span> }<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span><a name="line.1100"></a>
+<span class="sourceLineNo">1101</span> public RegionInTransitionStat computeRegionInTransitionStat() {<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span> final RegionInTransitionStat rit = new RegionInTransitionStat(getConfiguration());<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span> rit.update(this);<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span> return rit;<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span> }<a name="line.1105"></a>
<span class="sourceLineNo">1106</span><a name="line.1106"></a>
-<span class="sourceLineNo">1107</span> private HashMap<String, RegionState> ritsOverThreshold = null;<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span> private long statTimestamp;<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span> private long oldestRITTime = 0;<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span> private int totalRITsTwiceThreshold = 0;<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span> private int totalRITs = 0;<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span><a name="line.1112"></a>
-<span class="sourceLineNo">1113</span> @VisibleForTesting<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span> public RegionInTransitionStat(final Configuration conf) {<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span> this.ritThreshold =<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span> conf.getInt(METRICS_RIT_STUCK_WARNING_THRESHOLD, DEFAULT_RIT_STUCK_WARNING_THRESHOLD);<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span> }<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span><a name="line.1118"></a>
-<span class="sourceLineNo">1119</span> public int getRITThreshold() {<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span> return ritThreshold;<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span> }<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span><a name="line.1122"></a>
-<span class="sourceLineNo">1123</span> public long getTimestamp() {<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span> return statTimestamp;<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span> }<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span><a name="line.1126"></a>
-<span class="sourceLineNo">1127</span> public int getTotalRITs() {<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span> return totalRITs;<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span> }<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span><a name="line.1130"></a>
-<span class="sourceLineNo">1131</span> public long getOldestRITTime() {<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span> return oldestRITTime;<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span> }<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span><a name="line.1134"></a>
-<span class="sourceLineNo">1135</span> public int getTotalRITsOverThreshold() {<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span> return m != null ? m.size() : 0;<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span> }<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span><a name="line.1139"></a>
-<span class="sourceLineNo">1140</span> public boolean hasRegionsTwiceOverThreshold() {<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span> return totalRITsTwiceThreshold > 0;<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span> }<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span><a name="line.1143"></a>
-<span class="sourceLineNo">1144</span> public boolean hasRegionsOverThreshold() {<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span> return m != null && !m.isEmpty();<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span> }<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span><a name="line.1148"></a>
-<span class="sourceLineNo">1149</span> public Collection<RegionState> getRegionOverThreshold() {<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span> return m != null? m.values(): Collections.EMPTY_SET;<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span> }<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span><a name="line.1153"></a>
-<span class="sourceLineNo">1154</span> public boolean isRegionOverThreshold(final RegionInfo regionInfo) {<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span> return m != null && m.containsKey(regionInfo.getEncodedName());<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span> }<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span><a name="line.1158"></a>
-<span class="sourceLineNo">1159</span> public boolean isRegionTwiceOverThreshold(final RegionInfo regionInfo) {<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span> if (m == null) return false;<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span> final RegionState state = m.get(regionInfo.getEncodedName());<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span> if (state == null) return false;<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span> return (statTimestamp - state.getStamp()) > (ritThreshold * 2);<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span> }<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span><a name="line.1166"></a>
-<span class="sourceLineNo">1167</span> protected void update(final AssignmentManager am) {<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span> final RegionStates regionStates = am.getRegionStates();<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span> this.statTimestamp = EnvironmentEdgeManager.currentTime();<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span> update(regionStates.getRegionsStateInTransition(), statTimestamp);<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span> update(regionStates.getRegionFailedOpen(), statTimestamp);<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span> }<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span><a name="line.1173"></a>
-<span class="sourceLineNo">1174</span> private void update(final Collection<RegionState> regions, final long currentTime) {<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span> for (RegionState state: regions) {<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span> totalRITs++;<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span> final long ritTime = currentTime - state.getStamp();<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span> if (ritTime > ritThreshold) {<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span> if (ritsOverThreshold == null) {<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span> ritsOverThreshold = new HashMap<String, RegionState>();<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span> }<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span> ritsOverThreshold.put(state.getRegion().getEncodedName(), state);<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span> totalRITsTwiceThreshold += (ritTime > (ritThreshold * 2)) ? 1 : 0;<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span> }<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span> if (oldestRITTime < ritTime) {<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span> oldestRITTime = ritTime;<a name="line.1186"></a>
+<span class="sourceLineNo">1107</span> public static class RegionInTransitionStat {<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span> private final int ritThreshold;<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span><a name="line.1109"></a>
+<span class="sourceLineNo">1110</span> private HashMap<String, RegionState> ritsOverThreshold = null;<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span> private long statTimestamp;<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span> private long oldestRITTime = 0;<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span> private int totalRITsTwiceThreshold = 0;<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span> private int totalRITs = 0;<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span><a name="line.1115"></a>
+<span class="sourceLineNo">1116</span> @VisibleForTesting<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span> public RegionInTransitionStat(final Configuration conf) {<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span> this.ritThreshold =<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span> conf.getInt(METRICS_RIT_STUCK_WARNING_THRESHOLD, DEFAULT_RIT_STUCK_WARNING_THRESHOLD);<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span> }<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span><a name="line.1121"></a>
+<span class="sourceLineNo">1122</span> public int getRITThreshold() {<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span> return ritThreshold;<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span> }<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span><a name="line.1125"></a>
+<span class="sourceLineNo">1126</span> public long getTimestamp() {<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span> return statTimestamp;<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span> }<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span><a name="line.1129"></a>
+<span class="sourceLineNo">1130</span> public int getTotalRITs() {<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span> return totalRITs;<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span> }<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span><a name="line.1133"></a>
+<span class="sourceLineNo">1134</span> public long getOldestRITTime() {<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span> return oldestRITTime;<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span> }<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span><a name="line.1137"></a>
+<span class="sourceLineNo">1138</span> public int getTotalRITsOverThreshold() {<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span> return m != null ? m.size() : 0;<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span> }<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span><a name="line.1142"></a>
+<span class="sourceLineNo">1143</span> public boolean hasRegionsTwiceOverThreshold() {<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span> return totalRITsTwiceThreshold > 0;<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span> }<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span><a name="line.1146"></a>
+<span class="sourceLineNo">1147</span> public boolean hasRegionsOverThreshold() {<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span> return m != null && !m.isEmpty();<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span> }<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span><a name="line.1151"></a>
+<span class="sourceLineNo">1152</span> public Collection<RegionState> getRegionOverThreshold() {<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span> return m != null? m.values(): Collections.EMPTY_SET;<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span> }<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span><a name="line.1156"></a>
+<span class="sourceLineNo">1157</span> public boolean isRegionOverThreshold(final RegionInfo regionInfo) {<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span> return m != null && m.containsKey(regionInfo.getEncodedName());<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span> }<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span><a name="line.1161"></a>
+<span class="sourceLineNo">1162</span> public boolean isRegionTwiceOverThreshold(final RegionInfo regionInfo) {<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span> if (m == null) return false;<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span> final RegionState state = m.get(regionInfo.getEncodedName());<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span> if (state == null) return false;<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span> return (statTimestamp - state.getStamp()) > (ritThreshold * 2);<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span> }<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span><a name="line.1169"></a>
+<span class="sourceLineNo">1170</span> protected void update(final AssignmentManager am) {<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span> final RegionStates regionStates = am.getRegionStates();<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span> this.statTimestamp = EnvironmentEdgeManager.currentTime();<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span> update(regionStates.getRegionsStateInTransition(), statTimestamp);<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span> update(regionStates.getRegionFailedOpen(), statTimestamp);<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span> }<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span><a name="line.1176"></a>
+<span class="sourceLineNo">1177</span> private void update(final Collection<RegionState> regions, final long currentTime) {<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span> for (RegionState state: regions) {<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span> totalRITs++;<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span> final long ritTime = currentTime - state.getStamp();<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span> if (ritTime > ritThreshold) {<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span> if (ritsOverThreshold == null) {<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span> ritsOverThreshold = new HashMap<String, RegionState>();<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span> }<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span> ritsOverThreshold.put(state.getRegion().getEncodedName(), state);<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span> totalRITsTwiceThreshold += (ritTime > (ritThreshold * 2)) ? 1 : 0;<a name="line.1186"></a>
<span class="sourceLineNo">1187</span> }<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span> }<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span> }<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span> }<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span><a name="line.1191"></a>
-<span class="sourceLineNo">1192</span> private void updateRegionsInTransitionMetrics(final RegionInTransitionStat ritStat) {<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span> metrics.updateRITOldestAge(ritStat.getOldestRITTime());<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span> metrics.updateRITCount(ritStat.getTotalRITs());<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span> metrics.updateRITCountOverThreshold(ritStat.getTotalRITsOverThreshold());<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span> }<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span><a name="line.1197"></a>
-<span class="sourceLineNo">1198</span> private void handleRegionOverStuckWarningThreshold(final RegionInfo regionInfo) {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span> final RegionStateNode regionNode = regionStates.getRegionStateNode(regionInfo);<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span> //if (regionNode.isStuck()) {<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span> LOG.warn("STUCK Region-In-Transition {}", regionNode);<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span> }<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span><a name="line.1203"></a>
-<span class="sourceLineNo">1204</span> // ============================================================================================<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span> // TODO: Master load/bootstrap<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span> // ============================================================================================<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span> public void joinCluster() throws IOException {<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span> final long startTime = System.currentTimeMillis();<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span> LOG.debug("Joining cluster...");<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span><a name="line.1210"></a>
-<span class="sourceLineNo">1211</span> // Scan hbase:meta to build list of existing regions, servers, and assignment<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span> // hbase:meta is online when we get to here and TableStateManager has been started.<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span> loadMeta();<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span><a name="line.1214"></a>
-<span class="sourceLineNo">1215</span> for (int i = 0; master.getServerManager().countOfRegionServers() < 1; ++i) {<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span> LOG.info("Waiting for RegionServers to join; current count=" +<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span> master.getServerManager().countOfRegionServers());<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span> Threads.sleep(250);<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span> }<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span> LOG.info("Number of RegionServers=" + master.getServerManager().countOfRegionServers());<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span><a name="line.1221"></a>
-<span class="sourceLineNo">1222</span> boolean failover = processofflineServersWithOnlineRegions();<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span><a name="line.1223"></a>
-<span class="sourceLineNo">1224</span> // Start the RIT chore<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span> master.getMasterProcedureExecutor().addChore(this.ritChore);<a name="line.1225"></a>
+<span class="sourceLineNo">1188</span> if (oldestRITTime < ritTime) {<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span> oldestRITTime = ritTime;<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span> }<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span> }<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span> }<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span> }<a name="line.1193"></a>
+<span class="sourceLineNo">1194</span><a name="line.1194"></a>
+<span class="sourceLineNo">1195</span> private void updateRegionsInTransitionMetrics(final RegionInTransitionStat ritStat) {<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span> metrics.updateRITOldestAge(ritStat.getOldestRITTime());<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span> metrics.updateRITCount(ritStat.getTotalRITs());<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span> metrics.updateRITCountOverThreshold(ritStat.getTotalRITsOverThreshold());<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span> }<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span><a name="line.1200"></a>
+<span class="sourceLineNo">1201</span> private void handleRegionOverStuckWarningThreshold(final RegionInfo regionInfo) {<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span> final RegionStateNode regionNode = regionStates.getRegionStateNode(regionInfo);<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span> //if (regionNode.isStuck()) {<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span> LOG.warn("STUCK Region-In-Transition {}", regionNode);<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span> }<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span><a name="line.1206"></a>
+<span class="sourceLineNo">1207</span> // ============================================================================================<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span> // TODO: Master load/bootstrap<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span> // ============================================================================================<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span> public void joinCluster() throws IOException {<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span> final long startTime = System.currentTimeMillis();<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span> LOG.debug("Joining cluster...");<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span><a name="line.1213"></a>
+<span class="sourceLineNo">1214</span> // Scan hbase:meta to build list of existing regions, servers, and assignment<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span> // hbase:meta is online when we get to here and TableStateManager has been started.<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span> loadMeta();<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span><a name="line.1217"></a>
+<span class="sourceLineNo">1218</span> for (int i = 0; master.getServerManager().countOfRegionServers() < 1; ++i) {<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span> LOG.info("Waiting for RegionServers to join; current count=" +<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span> master.getServerManager().countOfRegionServers());<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span> Threads.sleep(250);<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span> }<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span> LOG.info("Number of RegionServers=" + master.getServerManager().countOfRegionServers());<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span><a name="line.1224"></a>
+<span class="sourceLineNo">1225</span> boolean failover = processofflineServersWithOnlineRegions();<a name="line.1225"></a>
<span class="sourceLineNo">1226</span><a name="line.1226"></a>
-<span class="sourceLineNo">1227</span> LOG.info(String.format("Joined the cluster in %s, failover=%s",<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span> StringUtils.humanTimeDiff(System.currentTimeMillis() - startTime), failover));<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span> }<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span><a name="line.1230"></a>
-<span class="sourceLineNo">1231</span> private void loadMeta() throws IOException {<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span> // TODO: use a thread pool<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span> regionStateStore.visitMeta(new RegionStateStore.RegionStateVisitor() {<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span> @Override<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span> public void visitRegionState(final RegionInfo regionInfo, final State state,<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span> final ServerName regionLocation, final ServerName lastHost, final long openSeqNum) {<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span> final RegionStateNode regionNode = regionStates.getOrCreateRegionStateNode(regionInfo);<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span> State localState = state;<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span> if (localState == null) {<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span> // No region state column data in hbase:meta table! Are I doing a rolling upgrade from<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span> // hbase1 to hbase2? Am I restoring a SNAPSHOT or otherwise adding a region to hbase:meta?<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span> // In any of these cases, state is empty. For now, presume OFFLINE but there are probably<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span> // cases where we need to probe more to be sure this correct; TODO informed by experience.<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span> LOG.info(regionInfo.getEncodedName() + " regionState=null; presuming " + State.OFFLINE);<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span> localState = State.OFFLINE;<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span> }<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span> synchronized (regionNode) {<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span> if (!regionNode.isInTransition()) {<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span> regionNode.setState(localState);<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span> regionNode.setLastHost(lastHost);<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span> regionNode.setRegionLocation(regionLocation);<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span> regionNode.setOpenSeqNum(openSeqNum);<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span><a name="line.1253"></a>
-<span class="sourceLineNo">1254</span> if (localState == State.OPEN) {<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span> assert regionLocation != null : "found null region location for " + regionNode;<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span> regionStates.addRegionToServer(regionNode);<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span> } else if (localState == State.OFFLINE || regionInfo.isOffline()) {<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span> regionStates.addToOfflineRegions(regionNode);<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span> } else if (localState == State.CLOSED && getTableStateManager().<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span> isTableState(regionNode.getTable(), TableState.State.DISABLED,<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span> TableState.State.DISABLING)) {<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span> // The region is CLOSED and the table is DISABLED/ DISABLING, there is nothing to<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span> // schedule; the region is inert.<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span> } else {<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span> // These regions should have a procedure in replay<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span> regionStates.addRegionInTransition(regionNode, null);<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span> }<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span> }<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span> }<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span> }<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span> });<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span><a name="line.1272"></a>
-<span class="sourceLineNo">1273</span> // every assignment is blocked until meta is loaded.<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span> wakeMetaLoadedEvent();<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span> }<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span><a name="line.1276"></a>
-<span class="sourceLineNo">1277</span> /**<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span> * Look at what is in meta and the list of servers that have checked in and make reconciliation.<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span> * We cannot tell definitively the difference between a clean shutdown and a cluster that has<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span> * been crashed down. At this stage of a Master startup, they look the same: they have the<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span> * same state in hbase:meta. We could do detective work probing ZK and the FS for old WALs to<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span> * split but SCP does this already so just let it do its job.<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span> * <p>>The profiles of clean shutdown and cluster crash-down are the same because on clean<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span> * shutdown currently, we do not update hbase:meta with region close state (In AMv2, region<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span> * state is kept in hbse:meta). Usually the master runs all region transitions as of AMv2 but on<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span> * cluster controlled shutdown, the RegionServers close all their regions only reporting the<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span> * final change to the Master. Currently this report is ignored. Later we could take it and<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span> * update as many regions as we can before hbase:meta goes down or have the master run the<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span> * close of all regions out on the cluster but we may never be able to achieve the proper state on<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span> * all regions (at least not w/o lots of painful manipulations and waiting) so clean shutdown<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span> * might not be possible especially on big clusters.... And clean shutdown will take time. Given<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span> * this current state of affairs, we just run ServerCrashProcedure in both cases. It will always<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span> * do the right thing.<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span> * @return True if for sure this is a failover where a Master is starting up into an already<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span> * running cluster.<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span> */<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span> // The assumption here is that if RSs are crashing while we are executing this<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span> // they will be handled by the SSH that are put in the ServerManager deadservers "queue".<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span> private boolean processofflineServersWithOnlineRegions() {<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span> boolean deadServers = !master.getServerManager().getDeadServers().isEmpty();<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span> final Set<ServerName> offlineServersWithOnlineRegions = new HashSet<>();<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span> int size = regionStates.getRegionStateNodes().size();<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span> final List<RegionInfo> offlineRegionsToAssign = new ArrayList<>(size);<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span> // If deadservers then its a failover, else, we are not sure yet.<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span> boolean failover = deadServers;<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span> for (RegionStateNode regionNode: regionStates.getRegionStateNodes()) {<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span> // Region State can be OPEN even if we did controlled cluster shutdown; Master does not close<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span> // the regions in this case. The RegionServer does the close so hbase:meta is state in<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span> // hbase:meta is not updated -- Master does all updates -- and is left with OPEN as region<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span> // state in meta. How to tell difference between ordered shutdown and crashed-down cluster<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span> // then? We can't. Not currently. Perhaps if we updated hbase:meta with CLOSED on ordered<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span> // shutdown. This would slow shutdown though and not all edits would make it in anyways.<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span> // TODO: Examine.<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span> // Because we can't be sure it an ordered shutdown, we run ServerCrashProcedure always.<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span> // ServerCrashProcedure will try to retain old deploy when it goes to assign.<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span> if (regionNode.getState() == State.OPEN) {<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span> final ServerName serverName = regionNode.getRegionLocation();<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span> if (!master.getServerManager().isServerOnline(serverName)) {<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span> offlineServersWithOnlineRegions.add(serverName);<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span> } else {<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span> // Server is online. This a failover. Master is starting into already-running cluster.<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span> failover = true;<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span> }<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span> } else if (regionNode.getState() == State.OFFLINE) {<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span> if (isTableEnabled(regionNode.getTable())) {<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span> offlineRegionsToAssign.add(regionNode.getRegionInfo());<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span> }<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span> }<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span> }<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span> // Kill servers with online regions just-in-case. Runs ServerCrashProcedure.<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span> for (ServerName serverName: offlineServersWithOnlineRegions) {<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span> if (!master.getServerManager().isServerOnline(serverName)) {<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span> LOG.info("KILL RegionServer=" + serverName + " hosting regions but not online.");<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span> killRegionServer(serverName);<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span> }<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span> }<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span> setFailoverCleanupDone(true);<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span><a name="line.1338"></a>
-<span class="sourceLineNo">1339</span> // Assign offline regions. Uses round-robin.<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span> if (offlineRegionsToAssign.size() > 0) {<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span> master.getMasterProcedureExecutor().submitProcedures(master.getAssignmentManager().<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span> createRoundRobinAssignProcedures(offlineRegionsToAssign));<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span> }<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span><a name="line.1344"></a>
-<span class="sourceLineNo">1345</span> return failover;<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span> }<a name="line.1346"></a>
+<span class="sourceLineNo">1227</span> // Start the RIT chore<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span> master.getMasterProcedureExecutor().addChore(this.ritChore);<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span><a name="line.1229"></a>
+<span class="sourceLineNo">1230</span> LOG.info(String.format("Joined the cluster in %s, failover=%s",<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span> StringUtils.humanTimeDiff(System.currentTimeMillis() - startTime), failover));<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span> }<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span><a name="line.1233"></a>
+<span class="sourceLineNo">1234</span> private void loadMeta() throws IOException {<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span> // TODO: use a thread pool<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span> regionStateStore.visitMeta(new RegionStateStore.RegionStateVisitor() {<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span> @Override<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span> public void visitRegionState(final RegionInfo regionInfo, final State state,<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span> final ServerName regionLocation, final ServerName lastHost, final long openSeqNum) {<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span> final RegionStateNode regionNode = regionStates.getOrCreateRegionStateNode(regionInfo);<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span> State localState = state;<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span> if (localState == null) {<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span> // No region state column data in hbase:meta table! Are I doing a rolling upgrade from<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span> // hbase1 to hbase2? Am I restoring a SNAPSHOT or otherwise adding a region to hbase:meta?<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span> // In any of these cases, state is empty. For now, presume OFFLINE but there are probably<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span> // cases where we need to probe more to be sure this correct; TODO informed by experience.<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span> LOG.info(regionInfo.getEncodedName() + " regionState=null; presuming " + State.OFFLINE);<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span> localState = State.OFFLINE;<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span> }<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span> synchronized (regionNode) {<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span> if (!regionNode.isInTransition()) {<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span> regionNode.setState(localState);<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span> regionNode.setLastHost(lastHost);<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span> regionNode.setRegionLocation(regionLocation);<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span> regionNode.setOpenSeqNum(openSeqNum);<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span><a name="line.1256"></a>
+<span class="sourceLineNo">1257</span> if (localState == State.OPEN) {<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span> assert regionLocation != null : "found null region location for " + regionNode;<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span> regionStates.addRegionToServer(regionNode);<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span> } else if (localState == State.OFFLINE || regionInfo.isOffline()) {<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span> regionStates.addToOfflineRegions(regionNode);<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span> } else if (localState == State.CLOSED && getTableStateManager().<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span> isTableState(regionNode.getTable(), TableState.State.DISABLED,<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span> TableState.State.DISABLING)) {<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span> // The region is CLOSED and the table is DISABLED/ DISABLING, there is nothing to<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span> // schedule; the region is inert.<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span> } else {<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span> // These regions should have a procedure in replay<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span> regionStates.addRegionInTransition(regionNode, null);<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span> }<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span> }<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span> }<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span> }<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span> });<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span><a name="line.1275"></a>
+<span class="sourceLineNo">1276</span> // every assignment is blocked until meta is loaded.<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span> wakeMetaLoadedEvent();<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span> }<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span><a name="line.1279"></a>
+<span class="sourceLineNo">1280</span> /**<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span> * Look at what is in meta and the list of servers that have checked in and make reconciliation.<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span> * We cannot tell definitively the difference between a clean shutdown and a cluster that has<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span> * been crashed down. At this stage of a Master startup, they look the same: they have the<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span> * same state in hbase:meta. We could do detective work probing ZK and the FS for old WALs to<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span> * split but SCP does this already so just let it do its job.<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span> * <p>>The profiles of clean shutdown and cluster crash-down are the same because on clean<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span> * shutdown currently, we do not update hbase:meta with region close state (In AMv2, region<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span> * state is kept in hbse:meta). Usually the master runs all region transitions as of AMv2 but on<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span> * cluster controlled shutdown, the RegionServers close all their regions only reporting the<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span> * final change to the Master. Currently this report is ignored. Later we could take it and<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span> * update as many regions as we can before hbase:meta goes down or have the master run the<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span> * close of all regions out on the cluster but we may never be able to achieve the proper state on<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span> * all regions (at least not w/o lots of painful manipulations and waiting) so clean shutdown<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span> * might not be possible especially on big clusters.... And clean shutdown will take time. Given<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span> * this current state of affairs, we just run ServerCrashProcedure in both cases. It will always<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span> * do the right thing.<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span> * @return True if for sure this is a failover where a Master is starting up into an already<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span> * running cluster.<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span> */<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span> // The assumption here is that if RSs are crashing while we are executing this<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span> // they will be handled by the SSH that are put in the ServerManager deadservers "queue".<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span> private boolean processofflineServersWithOnlineRegions() {<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span> boolean deadServers = !master.getServerManager().getDeadServers().isEmpty();<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span> final Set<ServerName> offlineServersWithOnlineRegions = new HashSet<>();<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span> int size = regionStates.getRegionStateNodes().size();<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span> final List<RegionInfo> offlineRegionsToAssign = new ArrayList<>(size);<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span> // If deadservers then its a failover, else, we are not sure yet.<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span> boolean failover = deadServers;<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span> for (RegionStateNode regionNode: regionStates.getRegionStateNodes()) {<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span> // Region State can be OPEN even if we did controlled cluster shutdown; Master does not close<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span> // the regions in this case. The RegionServer does the close so hbase:meta is state in<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span> // hbase:meta is not updated -- Master does all updates -- and is left with OPEN as region<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span> // state in meta. How to tell difference between ordered shutdown and crashed-down cluster<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span> // then? We can't. Not currently. Perhaps if we updated hbase:meta with CLOSED on ordered<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span> // shutdown. This would slow shutdown though and not all edits would make it in anyways.<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span> // TODO: Examine.<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span> // Because we can't be sure it an ordered shutdown, we run ServerCrashProcedure always.<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span> // ServerCrashProcedure will try to retain old deploy when it goes to assign.<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span> if (regionNode.getState() == State.OPEN) {<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span> final ServerName serverName = regionNode.getRegionLocation();<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span> if (!master.getServerManager().isServerOnline(serverName)) {<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span> offlineServersWithOnlineRegions.add(serverName);<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span> } else {<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span> // Server is online. This a failover. Master is starting into already-running cluster.<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span> failover = true;<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span> }<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span> } else if (regionNode.getState() == State.OFFLINE) {<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span> if (isTableEnabled(regionNode.getTable())) {<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span> offlineRegionsToAssign.add(regionNode.getRegionInfo());<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span> }<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span> }<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span> }<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span> // Kill servers with online regions just-in-case. Runs ServerCrashProcedure.<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span> for (ServerName serverName: offlineServersWithOnlineRegions) {<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span> if (!master.getServerManager().isServerOnline(serverName)) {<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span> LOG.info("KILL RegionServer=" + serverName + " hosting regions but not online.");<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span> killRegionServer(serverName);<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span> }<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span> }<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span> setFailoverCleanupDone(true);<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span><a name="line.1341"></a>
+<span class="sourceLineNo">1342</span> // Assign offline regions. Uses round-robin.<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span> if (offlineRegionsToAssign.size() > 0) {<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span> master.getMasterProcedureExecutor().submitProcedures(master.getAssignmentManager().<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span> createRoundRobinAssignProcedures(offlineRegionsToAssign));<a name="line.1345"></a>
+<span class="sourceLineNo">1346</span> }<a name="line.1346"></a>
<span class="sourceLineNo">1347</span><a name="line.1347"></a>
-<span class="sourceLineNo">1348</span> /**<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span> * Used by ServerCrashProcedure to make sure AssignmentManager has completed<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span> * the failover cleanup before re-assigning regions of dead servers. So that<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span> * when re-assignment happens, AssignmentManager has proper region states.<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span> */<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span> public boolean isFailoverCleanupDone() {<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span> return failoverCleanupDone.isReady();<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span> }<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span><a name="line.1356"></a>
-<span class="sourceLineNo">1357</span> /**<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span> * Used by ServerCrashProcedure tests verify the ability to suspend the<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span> * execution of the ServerCrashProcedure.<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span> */<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span> @VisibleForTesting<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span> public void setFailoverCleanupDone(final boolean b) {<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span> master.getMasterProcedureExecutor().getEnvironment()<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span> .setEventReady(failoverCleanupDone, b);<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span> }<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span><a name="line.1366"></a>
-<span class="sourceLineNo">1367</span> public ProcedureEvent getFailoverCleanupEvent() {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span> return failoverCleanupDone;<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span> }<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span><a name="line.1370"></a>
-<span class="sourceLineNo">1371</span> /**<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span> * Used to check if the failover cleanup is done.<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span> * if not we throw PleaseHoldException since we are rebuilding the RegionStates<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span> * @param hri region to check if it is already rebuild<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span> * @throws PleaseHoldException if the failover cleanup is not completed<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span> */<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span> private void checkFailoverCleanupCompleted(final RegionInfo hri) throws PleaseHoldException {<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span> if (!isRunning()) {<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span> throw new PleaseHoldException("AssignmentManager not running");<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span> }<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span><a name="line.1381"></a>
-<span class="sourceLineNo">1382</span> // TODO: can we avoid throwing an exception if hri is already loaded?<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span> // at the moment we bypass only meta<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span> boolean meta = isMetaRegion(hri);<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span> boolean cleanup = isFailoverCleanupDone();<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span> if (!isMetaRegion(hri) && !isFailoverCleanupDone()) {<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span> String msg = "Master not fully online; hbase:meta=" + meta + ", failoverCleanup=" + cleanup;<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span> throw new PleaseHoldException(msg);<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span> }<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span> }<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span><a name="line.1391"></a>
-<span class="sourceLineNo">1392</span> // ============================================================================================<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span> // TODO: Metrics<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span> // ============================================================================================<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span> public int getNumRegionsOpened() {<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span> // TODO: Used by TestRegionPlacement.java and assume monotonically increasing value<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span> return 0;<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span> }<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span><a name="line.1399"></a>
-<span class="sourceLineNo">1400</span> public void submitServerCrash(final ServerName serverName, final boolean shouldSplitWal) {<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span> boolean carryingMeta = isCarryingMeta(serverName);<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span> ProcedureExecutor<MasterProcedureEnv> procExec = this.master.getMasterProcedureExecutor();<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span> procExec.submitProcedure(new ServerCrashProcedure(procExec.getEnvironment(), serverName,<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span> shouldSplitWal, carryingMeta));<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span> LOG.debug("Added=" + serverName +<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span> " to dead servers, submitted shutdown handler to be executed meta=" + carryingMeta);<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span> }<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span><a name="line.1408"></a>
-<span class="sourceLineNo">1409</span> public void offlineRegion(final RegionInfo regionInfo) {<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span> // TODO used by MasterRpcServices ServerCrashProcedure<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span> final RegionStateNode node = regionStates.getRegionStateNode(regionInfo);<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span> if (node != null) node.offline();<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span> }<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span><a name="line.1414"></a>
-<span class="sourceLineNo">1415</span> public void onlineRegion(final RegionInfo regionInfo, final ServerName serverName) {<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span> // TODO used by TestSplitTransactionOnCluster.java<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span> }<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span><a name="line.1418"></a>
-<span class="sourceLineNo">1419</span> public Map<ServerName, List<RegionInfo>> getSnapShotOfAssignment(<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span> final Collection<RegionInfo> regions) {<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span> return regionStates.getSnapShotOfAssignment(regions);<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span> }<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span><a name="line.1423"></a>
-<span class="sourceLineNo">1424</span> // ============================================================================================<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span> // TODO: UTILS/HELPERS?<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span> // ============================================================================================<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span> /**<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span> * Used by the client (via master) to identify if all regions have the schema updates<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span> *<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span> * @param tableName<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span> * @return Pair indicating the status of the alter command (pending/total)<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span> * @throws IOException<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span> */<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span> public Pair<Integer, Integer> getReopenStatus(TableName tableName) {<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span> if (isTableDisabled(tableName)) return new Pair<Integer, Integer>(0, 0);<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span><a name="line.1436"></a>
-<span class="sourceLineNo">1437</span> final List<RegionState> states = regionStates.getTableRegionStates(tableName);<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span> int ritCount = 0;<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span> for (RegionState regionState: states) {<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span> if (!regionState.isOpened()) ritCount++;<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span> }<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span> return new Pair<Integer, Integer>(ritCount, states.size());<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span> }<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span><a name="line.1444"></a>
-<span class="sourceLineNo">1445</span> // ============================================================================================<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span> // TODO: Region State In Transition<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span> // ============================================================================================<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span> protected boolean addRegionInTransition(final RegionStateNode regionNode,<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span> final RegionTransitionProcedure procedure) {<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span> return regionStates.addRegionInTransition(regionNode, procedure);<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span> }<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span><a name="line.1452"></a>
-<span class="sourceLineNo">1453</span> protected void removeRegionInTransition(final RegionStateNode regionNode,<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span> final RegionTransitionProcedure procedure) {<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span> regionStates.removeRegionInTransition(regionNode, procedure);<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span> }<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span><a name="line.1457"></a>
-<span class="sourceLineNo">1458</span> public boolean hasRegionsInTransition() {<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span> return regionStates.hasRegionsInTransition();<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span> }<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span><a name="line.1461"></a>
-<span class="sourceLineNo">1462</span> public List<RegionStateNode> getRegionsInTransition() {<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span> return regionStates.getRegionsInTransition();<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span> }<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span><a name="line.1465"></a>
-<span class="sourceLineNo">1466</span> public List<RegionInfo> getAssignedRegions() {<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span> return regionStates.getAssignedRegions();<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span> }<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span><a name="line.1469"></a>
-<span class="sourceLineNo">1470</span> public RegionInfo getRegionInfo(final byte[] regionName) {<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span> final RegionStateNode regionState = regionStates.getRegionStateNodeFromName(regionName);<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span> return regionState != null ? regionState.getRegionInfo() : null;<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span> }<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span><a name="line.1474"></a>
-<span class="sourceLineNo">1475</span> // ============================================================================================<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span> // TODO: Region Status update<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span> // ============================================================================================<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span> private void sendRegionOpenedNotification(final RegionInfo regionInfo,<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span> final ServerName serverName) {<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span> getBalancer().regionOnline(regionInfo, serverName);<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span> if (!this.listeners.isEmpty()) {<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span> for (AssignmentListener listener : this.listeners) {<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span> listener.regionOpened(regionInfo, serverName);<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span> }<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span> }<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span> }<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span><a name="line.1487"></a>
-<span class="sourceLineNo">1488</span> private void sendRegionClosedNotification(final RegionInfo regionInfo) {<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span> getBalancer().regionOffline(regionInfo);<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span> if (!this.listeners.isEmpty()) {<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span> for (AssignmentListener listener : this.listeners) {<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span> listener.regionClosed(regionInfo);<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span> }<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span> }<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span> }<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span><a name="line.1496"></a>
-<span class="sourceLineNo">1497</span> public void markRegionAsOpening(final RegionStateNode regionNode) throws IOException {<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span> synchronized (regionNode) {<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span> regionNode.transitionState(State.OPENING, RegionStates.STATES_EXPECTED_ON_OPEN);<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span> regionStates.addRegionToServer(regionNode);<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span> regionStateStore.updateRegionLocation(regionNode);<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span> }<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span><a name="line.1503"></a>
-<span class="sourceLineNo">1504</span> // update the operation count metrics<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span> metrics.incrementOperationCounter();<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span> }<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span><a name="line.1507"></a>
-<span class="sourceLineNo">1508</span> public void undoRegionAsOpening(final RegionStateNode regionNode) {<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span> boolean opening = false;<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span> synchronized (regionNode) {<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span> if (regionNode.isInState(State.OPENING)) {<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span> opening = true;<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span> regionStates.removeRegionFromServer(regionNode.getRegionLocation(), regionNode);<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span> }<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span> // Should we update hbase:meta?<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span> }<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span> if (opening) {<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span> // TODO: Metrics. Do opposite of metrics.incrementOperationCounter();<a name="line.1518"></a>
+<span class="sourceLineNo">1348</span> return failover;<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span> }<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span><a name="line.1350"></a>
+<span class="sourceLineNo">1351</span> /**<a name="line.1351"></a>
+<span class="sourceLineNo">1352</span> * Used by ServerCrashProcedure to make sure AssignmentManager has completed<a name="line.1352"></a>
+<span class="sourceLineNo">1353</span> * the failover cleanup before re-assigning regions of dead servers. So that<a name="line.1353"></a>
+<span class="sourceLineNo">1354</span> * when re-assignment happens, AssignmentManager has proper region states.<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span> */<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span> public boolean isFailoverCleanupDone() {<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span> return failoverCleanupDone.isReady();<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span> }<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span><a name="line.1359"></a>
+<span class="sourceLineNo">1360</span> /**<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span> * Used by ServerCrashProcedure tests verify the ability to suspend the<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span> * execution of the ServerCrashProcedure.<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span> */<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span> @VisibleForTesting<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span> public void setFailoverCleanupDone(final boolean b) {<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span> master.getMasterProcedureExecutor().getEnvironment()<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span> .setEventReady(failoverCleanupDone, b);<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span> }<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span><a name="line.1369"></a>
+<span class="sourceLineNo">1370</span> public ProcedureEvent getFailoverCleanupEvent() {<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span> return failoverCleanupDone;<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span> }<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span><a name="line.1373"></a>
+<span class="sourceLineNo">1374</span> /**<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span> * Used to check if the failover cleanup is done.<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span> * if not we throw PleaseHoldException since we are rebuilding the RegionStates<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span> * @param hri region to check if it is already rebuild<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span> * @throws PleaseHoldException if the failover cleanup is not completed<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span> */<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span> private void checkFailoverCleanupCompleted(final RegionInfo hri) throws PleaseHoldException {<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span> if (!isRunning()) {<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span> throw new PleaseHoldException("AssignmentManager not running");<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span> }<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span><a name="line.1384"></a>
+<span class="sourceLineNo">1385</span> // TODO: can we avoid throwing an exception if hri is already loaded?<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span> // at the moment we bypass only meta<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span> boolean meta = isMetaRegion(hri);<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span> boolean cleanup = isFailoverCleanupDone();<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span> if (!isMetaRegion(hri) && !isFailoverCleanupDone()) {<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span> String msg = "Master not fully online; hbase:meta=" + meta + ", failoverCleanup=" + cleanup;<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span> throw new PleaseHoldException(msg);<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span> }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span> }<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span><a name="line.1394"></a>
+<span class="sourceLineNo">1395</span> // ============================================================================================<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span> // TODO: Metrics<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span> // ============================================================================================<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span> public int getNumRegionsOpened() {<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span> // TODO: Used by TestRegionPlacement.java and assume monotonically increasing value<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span> return 0;<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span> }<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span><a name="line.1402"></a>
+<span class="sourceLineNo">1403</span> public void submitServerCrash(final ServerName serverName, final boolean shouldSplitWal) {<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span> boolean carryingMeta = isCarryingMeta(serverName);<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span> ProcedureExecutor<MasterProcedureEnv> procExec = this.master.getMasterProcedureExecutor();<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span> procExec.submitProcedure(new ServerCrashProcedure(procExec.getEnvironment(), serverName,<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span> shouldSplitWal, carryingMeta));<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span> LOG.debug("Added=" + serverName +<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span> " to dead servers, submitted shutdown handler to be executed meta=" + carryingMeta);<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span> }<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span><a name="line.1411"></a>
+<span class="sourceLineNo">1412</span> public void offlineRegion(final RegionInfo regionInfo) {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span> // TODO used by MasterRpcServices ServerCrashProcedure<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span> final RegionStateNode node = regionStates.getRegionStateNode(regionInfo);<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span> if (node != null) node.offline();<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span> }<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span><a name="line.1417"></a>
+<span class="sourceLineNo">1418</span> public void onlineRegion(final RegionInfo regionInfo, final ServerName serverName) {<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span> // TODO used by TestSplitTransactionOnCluster.java<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span> }<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span><a name="line.1421"></a>
+<span class="sourceLineNo">1422</span> public Map<ServerName, List<RegionInfo>> getSnapShotOfAssignment(<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span> final Collection<RegionInfo> regions) {<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span> return regionStates.getSnapShotOfAssignment(regions);<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span> }<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span><a name="line.1426"></a>
+<span class="sourceLineNo">1427</span> // ============================================================================================<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span> // TODO: UTILS/HELPERS?<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span> // ============================================================================================<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span> /**<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span> * Used by the client (via master) to identify if all regions have the schema updates<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span> *<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span> * @param tableName<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span> * @return Pair indicating the status of the alter command (pending/total)<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span> * @throws IOException<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span> */<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span> public Pair<Integer, Integer> getReopenStatus(TableName tableName) {<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span> if (isTableDisabled(tableName)) return new Pair<Integer, Integer>(0, 0);<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span><a name="line.1439"></a>
+<span class="sourceLineNo">1440</span> final List<RegionState> states = regionStates.getTableRegionStates(tableName);<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span> int ritCount = 0;<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span> for (RegionState regionState: states) {<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span> if (!regionState.isOpened()) ritCount++;<a name=
<TRUNCATED>
[18/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html
index 5420d82..6ea3672 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html
@@ -316,687 +316,728 @@
<span class="sourceLineNo">308</span> }<a name="line.308"></a>
<span class="sourceLineNo">309</span> }<a name="line.309"></a>
<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span> public enum ServerState { ONLINE, SPLITTING, OFFLINE }<a name="line.311"></a>
-<span class="sourceLineNo">312</span> public static class ServerStateNode implements Comparable<ServerStateNode> {<a name="line.312"></a>
-<span class="sourceLineNo">313</span> private final ServerReportEvent reportEvent;<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> private final Set<RegionStateNode> regions;<a name="line.315"></a>
-<span class="sourceLineNo">316</span> private final ServerName serverName;<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span> private volatile ServerState state = ServerState.ONLINE;<a name="line.318"></a>
-<span class="sourceLineNo">319</span> private volatile int versionNumber = 0;<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span> public ServerStateNode(final ServerName serverName) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span> this.serverName = serverName;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> this.regions = ConcurrentHashMap.newKeySet();<a name="line.323"></a>
-<span class="sourceLineNo">324</span> this.reportEvent = new ServerReportEvent(serverName);<a name="line.324"></a>
-<span class="sourceLineNo">325</span> }<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> public ServerName getServerName() {<a name="line.327"></a>
-<span class="sourceLineNo">328</span> return serverName;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> }<a name="line.329"></a>
+<span class="sourceLineNo">311</span> /**<a name="line.311"></a>
+<span class="sourceLineNo">312</span> * Server State.<a name="line.312"></a>
+<span class="sourceLineNo">313</span> */<a name="line.313"></a>
+<span class="sourceLineNo">314</span> public enum ServerState {<a name="line.314"></a>
+<span class="sourceLineNo">315</span> /**<a name="line.315"></a>
+<span class="sourceLineNo">316</span> * Initial state. Available.<a name="line.316"></a>
+<span class="sourceLineNo">317</span> */<a name="line.317"></a>
+<span class="sourceLineNo">318</span> ONLINE,<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span> /**<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * Server expired/crashed. Currently undergoing WAL splitting.<a name="line.321"></a>
+<span class="sourceLineNo">322</span> */<a name="line.322"></a>
+<span class="sourceLineNo">323</span> SPLITTING,<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span> /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * WAL splitting done.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> */<a name="line.327"></a>
+<span class="sourceLineNo">328</span> OFFLINE<a name="line.328"></a>
+<span class="sourceLineNo">329</span> }<a name="line.329"></a>
<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> public ServerState getState() {<a name="line.331"></a>
-<span class="sourceLineNo">332</span> return state;<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> public int getVersionNumber() {<a name="line.335"></a>
-<span class="sourceLineNo">336</span> return versionNumber;<a name="line.336"></a>
-<span class="sourceLineNo">337</span> }<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span> public ProcedureEvent<?> getReportEvent() {<a name="line.339"></a>
-<span class="sourceLineNo">340</span> return reportEvent;<a name="line.340"></a>
-<span class="sourceLineNo">341</span> }<a name="line.341"></a>
+<span class="sourceLineNo">331</span> /**<a name="line.331"></a>
+<span class="sourceLineNo">332</span> * State of Server; list of hosted regions, etc.<a name="line.332"></a>
+<span class="sourceLineNo">333</span> */<a name="line.333"></a>
+<span class="sourceLineNo">334</span> public static class ServerStateNode implements Comparable<ServerStateNode> {<a name="line.334"></a>
+<span class="sourceLineNo">335</span> private final ServerReportEvent reportEvent;<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> private final Set<RegionStateNode> regions;<a name="line.337"></a>
+<span class="sourceLineNo">338</span> private final ServerName serverName;<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span> private volatile ServerState state = ServerState.ONLINE;<a name="line.340"></a>
+<span class="sourceLineNo">341</span> private volatile int versionNumber = 0;<a name="line.341"></a>
<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span> public boolean isInState(final ServerState... expected) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span> boolean expectedState = false;<a name="line.344"></a>
-<span class="sourceLineNo">345</span> if (expected != null) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span> for (int i = 0; i < expected.length; ++i) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> expectedState |= (state == expected[i]);<a name="line.347"></a>
-<span class="sourceLineNo">348</span> }<a name="line.348"></a>
-<span class="sourceLineNo">349</span> }<a name="line.349"></a>
-<span class="sourceLineNo">350</span> return expectedState;<a name="line.350"></a>
+<span class="sourceLineNo">343</span> public ServerStateNode(final ServerName serverName) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span> this.serverName = serverName;<a name="line.344"></a>
+<span class="sourceLineNo">345</span> this.regions = ConcurrentHashMap.newKeySet();<a name="line.345"></a>
+<span class="sourceLineNo">346</span> this.reportEvent = new ServerReportEvent(serverName);<a name="line.346"></a>
+<span class="sourceLineNo">347</span> }<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span> public ServerName getServerName() {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> return serverName;<a name="line.350"></a>
<span class="sourceLineNo">351</span> }<a name="line.351"></a>
<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span> public void setState(final ServerState state) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span> this.state = state;<a name="line.354"></a>
+<span class="sourceLineNo">353</span> public ServerState getState() {<a name="line.353"></a>
+<span class="sourceLineNo">354</span> return state;<a name="line.354"></a>
<span class="sourceLineNo">355</span> }<a name="line.355"></a>
<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span> public void setVersionNumber(final int versionNumber) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> this.versionNumber = versionNumber;<a name="line.358"></a>
+<span class="sourceLineNo">357</span> public int getVersionNumber() {<a name="line.357"></a>
+<span class="sourceLineNo">358</span> return versionNumber;<a name="line.358"></a>
<span class="sourceLineNo">359</span> }<a name="line.359"></a>
<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span> public Set<RegionStateNode> getRegions() {<a name="line.361"></a>
-<span class="sourceLineNo">362</span> return regions;<a name="line.362"></a>
+<span class="sourceLineNo">361</span> public ProcedureEvent<?> getReportEvent() {<a name="line.361"></a>
+<span class="sourceLineNo">362</span> return reportEvent;<a name="line.362"></a>
<span class="sourceLineNo">363</span> }<a name="line.363"></a>
<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span> public int getRegionCount() {<a name="line.365"></a>
-<span class="sourceLineNo">366</span> return regions.size();<a name="line.366"></a>
+<span class="sourceLineNo">365</span> public boolean isOffline() {<a name="line.365"></a>
+<span class="sourceLineNo">366</span> return this.state.equals(ServerState.OFFLINE);<a name="line.366"></a>
<span class="sourceLineNo">367</span> }<a name="line.367"></a>
<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span> public ArrayList<RegionInfo> getRegionInfoList() {<a name="line.369"></a>
-<span class="sourceLineNo">370</span> ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(regions.size());<a name="line.370"></a>
-<span class="sourceLineNo">371</span> for (RegionStateNode region: regions) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span> hris.add(region.getRegionInfo());<a name="line.372"></a>
-<span class="sourceLineNo">373</span> }<a name="line.373"></a>
-<span class="sourceLineNo">374</span> return hris;<a name="line.374"></a>
-<span class="sourceLineNo">375</span> }<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span> public void addRegion(final RegionStateNode regionNode) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span> this.regions.add(regionNode);<a name="line.378"></a>
-<span class="sourceLineNo">379</span> }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span> public void removeRegion(final RegionStateNode regionNode) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span> this.regions.remove(regionNode);<a name="line.382"></a>
-<span class="sourceLineNo">383</span> }<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public int compareTo(final ServerStateNode other) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> return getServerName().compareTo(other.getServerName());<a name="line.387"></a>
-<span class="sourceLineNo">388</span> }<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span> @Override<a name="line.390"></a>
-<span class="sourceLineNo">391</span> public int hashCode() {<a name="line.391"></a>
-<span class="sourceLineNo">392</span> return getServerName().hashCode();<a name="line.392"></a>
+<span class="sourceLineNo">369</span> public boolean isInState(final ServerState... expected) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span> boolean expectedState = false;<a name="line.370"></a>
+<span class="sourceLineNo">371</span> if (expected != null) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span> for (int i = 0; i < expected.length; ++i) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> expectedState |= (state == expected[i]);<a name="line.373"></a>
+<span class="sourceLineNo">374</span> }<a name="line.374"></a>
+<span class="sourceLineNo">375</span> }<a name="line.375"></a>
+<span class="sourceLineNo">376</span> return expectedState;<a name="line.376"></a>
+<span class="sourceLineNo">377</span> }<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span> public void setState(final ServerState state) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span> this.state = state;<a name="line.380"></a>
+<span class="sourceLineNo">381</span> }<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span> public void setVersionNumber(final int versionNumber) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span> this.versionNumber = versionNumber;<a name="line.384"></a>
+<span class="sourceLineNo">385</span> }<a name="line.385"></a>
+<span class="sourceLineNo">386</span><a name="line.386"></a>
+<span class="sourceLineNo">387</span> public Set<RegionStateNode> getRegions() {<a name="line.387"></a>
+<span class="sourceLineNo">388</span> return regions;<a name="line.388"></a>
+<span class="sourceLineNo">389</span> }<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span> public int getRegionCount() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span> return regions.size();<a name="line.392"></a>
<span class="sourceLineNo">393</span> }<a name="line.393"></a>
<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
-<span class="sourceLineNo">396</span> public boolean equals(final Object other) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span> if (this == other) return true;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> if (!(other instanceof ServerStateNode)) return false;<a name="line.398"></a>
-<span class="sourceLineNo">399</span> return compareTo((ServerStateNode)other) == 0;<a name="line.399"></a>
-<span class="sourceLineNo">400</span> }<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span> @Override<a name="line.402"></a>
-<span class="sourceLineNo">403</span> public String toString() {<a name="line.403"></a>
-<span class="sourceLineNo">404</span> return String.format("ServerStateNode(%s)", getServerName());<a name="line.404"></a>
+<span class="sourceLineNo">395</span> public ArrayList<RegionInfo> getRegionInfoList() {<a name="line.395"></a>
+<span class="sourceLineNo">396</span> ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(regions.size());<a name="line.396"></a>
+<span class="sourceLineNo">397</span> for (RegionStateNode region: regions) {<a name="line.397"></a>
+<span class="sourceLineNo">398</span> hris.add(region.getRegionInfo());<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span> return hris;<a name="line.400"></a>
+<span class="sourceLineNo">401</span> }<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span> public void addRegion(final RegionStateNode regionNode) {<a name="line.403"></a>
+<span class="sourceLineNo">404</span> this.regions.add(regionNode);<a name="line.404"></a>
<span class="sourceLineNo">405</span> }<a name="line.405"></a>
-<span class="sourceLineNo">406</span> }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span> public final static RegionStateStampComparator REGION_STATE_STAMP_COMPARATOR =<a name="line.408"></a>
-<span class="sourceLineNo">409</span> new RegionStateStampComparator();<a name="line.409"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span> public void removeRegion(final RegionStateNode regionNode) {<a name="line.407"></a>
+<span class="sourceLineNo">408</span> this.regions.remove(regionNode);<a name="line.408"></a>
+<span class="sourceLineNo">409</span> }<a name="line.409"></a>
<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span> // TODO: Replace the ConcurrentSkipListMaps<a name="line.411"></a>
-<span class="sourceLineNo">412</span> /**<a name="line.412"></a>
-<span class="sourceLineNo">413</span> * RegionName -- i.e. RegionInfo.getRegionName() -- as bytes to {@link RegionStateNode}<a name="line.413"></a>
-<span class="sourceLineNo">414</span> */<a name="line.414"></a>
-<span class="sourceLineNo">415</span> private final ConcurrentSkipListMap<byte[], RegionStateNode> regionsMap =<a name="line.415"></a>
-<span class="sourceLineNo">416</span> new ConcurrentSkipListMap<byte[], RegionStateNode>(Bytes.BYTES_COMPARATOR);<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionInTransition =<a name="line.418"></a>
-<span class="sourceLineNo">419</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>(RegionInfo.COMPARATOR);<a name="line.419"></a>
+<span class="sourceLineNo">411</span> @Override<a name="line.411"></a>
+<span class="sourceLineNo">412</span> public int compareTo(final ServerStateNode other) {<a name="line.412"></a>
+<span class="sourceLineNo">413</span> return getServerName().compareTo(other.getServerName());<a name="line.413"></a>
+<span class="sourceLineNo">414</span> }<a name="line.414"></a>
+<span class="sourceLineNo">415</span><a name="line.415"></a>
+<span class="sourceLineNo">416</span> @Override<a name="line.416"></a>
+<span class="sourceLineNo">417</span> public int hashCode() {<a name="line.417"></a>
+<span class="sourceLineNo">418</span> return getServerName().hashCode();<a name="line.418"></a>
+<span class="sourceLineNo">419</span> }<a name="line.419"></a>
<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span> /**<a name="line.421"></a>
-<span class="sourceLineNo">422</span> * Regions marked as offline on a read of hbase:meta. Unused or at least, once<a name="line.422"></a>
-<span class="sourceLineNo">423</span> * offlined, regions have no means of coming on line again. TODO.<a name="line.423"></a>
-<span class="sourceLineNo">424</span> */<a name="line.424"></a>
-<span class="sourceLineNo">425</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionOffline =<a name="line.425"></a>
-<span class="sourceLineNo">426</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>();<a name="line.426"></a>
+<span class="sourceLineNo">421</span> @Override<a name="line.421"></a>
+<span class="sourceLineNo">422</span> public boolean equals(final Object other) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span> if (this == other) return true;<a name="line.423"></a>
+<span class="sourceLineNo">424</span> if (!(other instanceof ServerStateNode)) return false;<a name="line.424"></a>
+<span class="sourceLineNo">425</span> return compareTo((ServerStateNode)other) == 0;<a name="line.425"></a>
+<span class="sourceLineNo">426</span> }<a name="line.426"></a>
<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span> private final ConcurrentSkipListMap<byte[], RegionFailedOpen> regionFailedOpen =<a name="line.428"></a>
-<span class="sourceLineNo">429</span> new ConcurrentSkipListMap<byte[], RegionFailedOpen>(Bytes.BYTES_COMPARATOR);<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span> private final ConcurrentHashMap<ServerName, ServerStateNode> serverMap =<a name="line.431"></a>
-<span class="sourceLineNo">432</span> new ConcurrentHashMap<ServerName, ServerStateNode>();<a name="line.432"></a>
+<span class="sourceLineNo">428</span> @Override<a name="line.428"></a>
+<span class="sourceLineNo">429</span> public String toString() {<a name="line.429"></a>
+<span class="sourceLineNo">430</span> return String.format("ServerStateNode(%s)", getServerName());<a name="line.430"></a>
+<span class="sourceLineNo">431</span> }<a name="line.431"></a>
+<span class="sourceLineNo">432</span> }<a name="line.432"></a>
<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span> public RegionStates() { }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> public void clear() {<a name="line.436"></a>
-<span class="sourceLineNo">437</span> regionsMap.clear();<a name="line.437"></a>
-<span class="sourceLineNo">438</span> regionInTransition.clear();<a name="line.438"></a>
-<span class="sourceLineNo">439</span> regionOffline.clear();<a name="line.439"></a>
-<span class="sourceLineNo">440</span> serverMap.clear();<a name="line.440"></a>
-<span class="sourceLineNo">441</span> }<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span> @VisibleForTesting<a name="line.443"></a>
-<span class="sourceLineNo">444</span> public boolean isRegionInRegionStates(final RegionInfo hri) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span> return (regionsMap.containsKey(hri.getRegionName()) || regionInTransition.containsKey(hri)<a name="line.445"></a>
-<span class="sourceLineNo">446</span> || regionOffline.containsKey(hri));<a name="line.446"></a>
-<span class="sourceLineNo">447</span> }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span> // ==========================================================================<a name="line.449"></a>
-<span class="sourceLineNo">450</span> // RegionStateNode helpers<a name="line.450"></a>
-<span class="sourceLineNo">451</span> // ==========================================================================<a name="line.451"></a>
-<span class="sourceLineNo">452</span> protected RegionStateNode createRegionStateNode(final RegionInfo regionInfo) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> RegionStateNode newNode = new RegionStateNode(regionInfo);<a name="line.453"></a>
-<span class="sourceLineNo">454</span> RegionStateNode oldNode = regionsMap.putIfAbsent(regionInfo.getRegionName(), newNode);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> return oldNode != null ? oldNode : newNode;<a name="line.455"></a>
-<span class="sourceLineNo">456</span> }<a name="line.456"></a>
-<span class="sourceLineNo">457</span><a name="line.457"></a>
-<span class="sourceLineNo">458</span> protected RegionStateNode getOrCreateRegionStateNode(final RegionInfo regionInfo) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> RegionStateNode node = regionsMap.get(regionInfo.getRegionName());<a name="line.459"></a>
-<span class="sourceLineNo">460</span> return node != null ? node : createRegionStateNode(regionInfo);<a name="line.460"></a>
-<span class="sourceLineNo">461</span> }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span> RegionStateNode getRegionStateNodeFromName(final byte[] regionName) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span> return regionsMap.get(regionName);<a name="line.464"></a>
-<span class="sourceLineNo">465</span> }<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span> protected RegionStateNode getRegionStateNode(final RegionInfo regionInfo) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span> return getRegionStateNodeFromName(regionInfo.getRegionName());<a name="line.468"></a>
-<span class="sourceLineNo">469</span> }<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span> public void deleteRegion(final RegionInfo regionInfo) {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> regionsMap.remove(regionInfo.getRegionName());<a name="line.472"></a>
-<span class="sourceLineNo">473</span> // Remove from the offline regions map too if there.<a name="line.473"></a>
-<span class="sourceLineNo">474</span> if (this.regionOffline.containsKey(regionInfo)) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span> if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> this.regionOffline.remove(regionInfo);<a name="line.476"></a>
-<span class="sourceLineNo">477</span> }<a name="line.477"></a>
-<span class="sourceLineNo">478</span> }<a name="line.478"></a>
-<span class="sourceLineNo">479</span><a name="line.479"></a>
-<span class="sourceLineNo">480</span> ArrayList<RegionStateNode> getTableRegionStateNodes(final TableName tableName) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span> final ArrayList<RegionStateNode> regions = new ArrayList<RegionStateNode>();<a name="line.481"></a>
-<span class="sourceLineNo">482</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span> if (!node.getTable().equals(tableName)) break;<a name="line.483"></a>
-<span class="sourceLineNo">484</span> regions.add(node);<a name="line.484"></a>
-<span class="sourceLineNo">485</span> }<a name="line.485"></a>
-<span class="sourceLineNo">486</span> return regions;<a name="line.486"></a>
+<span class="sourceLineNo">434</span> public final static RegionStateStampComparator REGION_STATE_STAMP_COMPARATOR =<a name="line.434"></a>
+<span class="sourceLineNo">435</span> new RegionStateStampComparator();<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span> // TODO: Replace the ConcurrentSkipListMaps<a name="line.437"></a>
+<span class="sourceLineNo">438</span> /**<a name="line.438"></a>
+<span class="sourceLineNo">439</span> * RegionName -- i.e. RegionInfo.getRegionName() -- as bytes to {@link RegionStateNode}<a name="line.439"></a>
+<span class="sourceLineNo">440</span> */<a name="line.440"></a>
+<span class="sourceLineNo">441</span> private final ConcurrentSkipListMap<byte[], RegionStateNode> regionsMap =<a name="line.441"></a>
+<span class="sourceLineNo">442</span> new ConcurrentSkipListMap<byte[], RegionStateNode>(Bytes.BYTES_COMPARATOR);<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionInTransition =<a name="line.444"></a>
+<span class="sourceLineNo">445</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>(RegionInfo.COMPARATOR);<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span> /**<a name="line.447"></a>
+<span class="sourceLineNo">448</span> * Regions marked as offline on a read of hbase:meta. Unused or at least, once<a name="line.448"></a>
+<span class="sourceLineNo">449</span> * offlined, regions have no means of coming on line again. TODO.<a name="line.449"></a>
+<span class="sourceLineNo">450</span> */<a name="line.450"></a>
+<span class="sourceLineNo">451</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionOffline =<a name="line.451"></a>
+<span class="sourceLineNo">452</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>();<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span> private final ConcurrentSkipListMap<byte[], RegionFailedOpen> regionFailedOpen =<a name="line.454"></a>
+<span class="sourceLineNo">455</span> new ConcurrentSkipListMap<byte[], RegionFailedOpen>(Bytes.BYTES_COMPARATOR);<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span> private final ConcurrentHashMap<ServerName, ServerStateNode> serverMap =<a name="line.457"></a>
+<span class="sourceLineNo">458</span> new ConcurrentHashMap<ServerName, ServerStateNode>();<a name="line.458"></a>
+<span class="sourceLineNo">459</span><a name="line.459"></a>
+<span class="sourceLineNo">460</span> public RegionStates() { }<a name="line.460"></a>
+<span class="sourceLineNo">461</span><a name="line.461"></a>
+<span class="sourceLineNo">462</span> public void clear() {<a name="line.462"></a>
+<span class="sourceLineNo">463</span> regionsMap.clear();<a name="line.463"></a>
+<span class="sourceLineNo">464</span> regionInTransition.clear();<a name="line.464"></a>
+<span class="sourceLineNo">465</span> regionOffline.clear();<a name="line.465"></a>
+<span class="sourceLineNo">466</span> serverMap.clear();<a name="line.466"></a>
+<span class="sourceLineNo">467</span> }<a name="line.467"></a>
+<span class="sourceLineNo">468</span><a name="line.468"></a>
+<span class="sourceLineNo">469</span> @VisibleForTesting<a name="line.469"></a>
+<span class="sourceLineNo">470</span> public boolean isRegionInRegionStates(final RegionInfo hri) {<a name="line.470"></a>
+<span class="sourceLineNo">471</span> return (regionsMap.containsKey(hri.getRegionName()) || regionInTransition.containsKey(hri)<a name="line.471"></a>
+<span class="sourceLineNo">472</span> || regionOffline.containsKey(hri));<a name="line.472"></a>
+<span class="sourceLineNo">473</span> }<a name="line.473"></a>
+<span class="sourceLineNo">474</span><a name="line.474"></a>
+<span class="sourceLineNo">475</span> // ==========================================================================<a name="line.475"></a>
+<span class="sourceLineNo">476</span> // RegionStateNode helpers<a name="line.476"></a>
+<span class="sourceLineNo">477</span> // ==========================================================================<a name="line.477"></a>
+<span class="sourceLineNo">478</span> protected RegionStateNode createRegionStateNode(final RegionInfo regionInfo) {<a name="line.478"></a>
+<span class="sourceLineNo">479</span> RegionStateNode newNode = new RegionStateNode(regionInfo);<a name="line.479"></a>
+<span class="sourceLineNo">480</span> RegionStateNode oldNode = regionsMap.putIfAbsent(regionInfo.getRegionName(), newNode);<a name="line.480"></a>
+<span class="sourceLineNo">481</span> return oldNode != null ? oldNode : newNode;<a name="line.481"></a>
+<span class="sourceLineNo">482</span> }<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span> protected RegionStateNode getOrCreateRegionStateNode(final RegionInfo regionInfo) {<a name="line.484"></a>
+<span class="sourceLineNo">485</span> RegionStateNode node = regionsMap.get(regionInfo.getRegionName());<a name="line.485"></a>
+<span class="sourceLineNo">486</span> return node != null ? node : createRegionStateNode(regionInfo);<a name="line.486"></a>
<span class="sourceLineNo">487</span> }<a name="line.487"></a>
<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span> ArrayList<RegionState> getTableRegionStates(final TableName tableName) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>();<a name="line.490"></a>
-<span class="sourceLineNo">491</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span> if (!node.getTable().equals(tableName)) break;<a name="line.492"></a>
-<span class="sourceLineNo">493</span> regions.add(node.toRegionState());<a name="line.493"></a>
-<span class="sourceLineNo">494</span> }<a name="line.494"></a>
-<span class="sourceLineNo">495</span> return regions;<a name="line.495"></a>
-<span class="sourceLineNo">496</span> }<a name="line.496"></a>
-<span class="sourceLineNo">497</span><a name="line.497"></a>
-<span class="sourceLineNo">498</span> ArrayList<RegionInfo> getTableRegionsInfo(final TableName tableName) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span> final ArrayList<RegionInfo> regions = new ArrayList<RegionInfo>();<a name="line.499"></a>
-<span class="sourceLineNo">500</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span> if (!node.getTable().equals(tableName)) break;<a name="line.501"></a>
-<span class="sourceLineNo">502</span> regions.add(node.getRegionInfo());<a name="line.502"></a>
+<span class="sourceLineNo">489</span> RegionStateNode getRegionStateNodeFromName(final byte[] regionName) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span> return regionsMap.get(regionName);<a name="line.490"></a>
+<span class="sourceLineNo">491</span> }<a name="line.491"></a>
+<span class="sourceLineNo">492</span><a name="line.492"></a>
+<span class="sourceLineNo">493</span> protected RegionStateNode getRegionStateNode(final RegionInfo regionInfo) {<a name="line.493"></a>
+<span class="sourceLineNo">494</span> return getRegionStateNodeFromName(regionInfo.getRegionName());<a name="line.494"></a>
+<span class="sourceLineNo">495</span> }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span> public void deleteRegion(final RegionInfo regionInfo) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span> regionsMap.remove(regionInfo.getRegionName());<a name="line.498"></a>
+<span class="sourceLineNo">499</span> // Remove from the offline regions map too if there.<a name="line.499"></a>
+<span class="sourceLineNo">500</span> if (this.regionOffline.containsKey(regionInfo)) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span> if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.501"></a>
+<span class="sourceLineNo">502</span> this.regionOffline.remove(regionInfo);<a name="line.502"></a>
<span class="sourceLineNo">503</span> }<a name="line.503"></a>
-<span class="sourceLineNo">504</span> return regions;<a name="line.504"></a>
-<span class="sourceLineNo">505</span> }<a name="line.505"></a>
-<span class="sourceLineNo">506</span><a name="line.506"></a>
-<span class="sourceLineNo">507</span> Collection<RegionStateNode> getRegionStateNodes() {<a name="line.507"></a>
-<span class="sourceLineNo">508</span> return regionsMap.values();<a name="line.508"></a>
-<span class="sourceLineNo">509</span> }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span> public ArrayList<RegionState> getRegionStates() {<a name="line.511"></a>
-<span class="sourceLineNo">512</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>(regionsMap.size());<a name="line.512"></a>
-<span class="sourceLineNo">513</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span> regions.add(node.toRegionState());<a name="line.514"></a>
-<span class="sourceLineNo">515</span> }<a name="line.515"></a>
-<span class="sourceLineNo">516</span> return regions;<a name="line.516"></a>
-<span class="sourceLineNo">517</span> }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span> // ==========================================================================<a name="line.519"></a>
-<span class="sourceLineNo">520</span> // RegionState helpers<a name="line.520"></a>
-<span class="sourceLineNo">521</span> // ==========================================================================<a name="line.521"></a>
-<span class="sourceLineNo">522</span> public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span> RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.523"></a>
-<span class="sourceLineNo">524</span> return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.524"></a>
-<span class="sourceLineNo">525</span> }<a name="line.525"></a>
-<span class="sourceLineNo">526</span><a name="line.526"></a>
-<span class="sourceLineNo">527</span> public RegionState getRegionState(final String encodedRegionName) {<a name="line.527"></a>
-<span class="sourceLineNo">528</span> // TODO: Need a map <encodedName, ...> but it is just dispatch merge...<a name="line.528"></a>
-<span class="sourceLineNo">529</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.529"></a>
-<span class="sourceLineNo">530</span> if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span> return node.toRegionState();<a name="line.531"></a>
-<span class="sourceLineNo">532</span> }<a name="line.532"></a>
-<span class="sourceLineNo">533</span> }<a name="line.533"></a>
-<span class="sourceLineNo">534</span> return null;<a name="line.534"></a>
+<span class="sourceLineNo">504</span> }<a name="line.504"></a>
+<span class="sourceLineNo">505</span><a name="line.505"></a>
+<span class="sourceLineNo">506</span> ArrayList<RegionStateNode> getTableRegionStateNodes(final TableName tableName) {<a name="line.506"></a>
+<span class="sourceLineNo">507</span> final ArrayList<RegionStateNode> regions = new ArrayList<RegionStateNode>();<a name="line.507"></a>
+<span class="sourceLineNo">508</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.508"></a>
+<span class="sourceLineNo">509</span> if (!node.getTable().equals(tableName)) break;<a name="line.509"></a>
+<span class="sourceLineNo">510</span> regions.add(node);<a name="line.510"></a>
+<span class="sourceLineNo">511</span> }<a name="line.511"></a>
+<span class="sourceLineNo">512</span> return regions;<a name="line.512"></a>
+<span class="sourceLineNo">513</span> }<a name="line.513"></a>
+<span class="sourceLineNo">514</span><a name="line.514"></a>
+<span class="sourceLineNo">515</span> ArrayList<RegionState> getTableRegionStates(final TableName tableName) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>();<a name="line.516"></a>
+<span class="sourceLineNo">517</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.517"></a>
+<span class="sourceLineNo">518</span> if (!node.getTable().equals(tableName)) break;<a name="line.518"></a>
+<span class="sourceLineNo">519</span> regions.add(node.toRegionState());<a name="line.519"></a>
+<span class="sourceLineNo">520</span> }<a name="line.520"></a>
+<span class="sourceLineNo">521</span> return regions;<a name="line.521"></a>
+<span class="sourceLineNo">522</span> }<a name="line.522"></a>
+<span class="sourceLineNo">523</span><a name="line.523"></a>
+<span class="sourceLineNo">524</span> ArrayList<RegionInfo> getTableRegionsInfo(final TableName tableName) {<a name="line.524"></a>
+<span class="sourceLineNo">525</span> final ArrayList<RegionInfo> regions = new ArrayList<RegionInfo>();<a name="line.525"></a>
+<span class="sourceLineNo">526</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span> if (!node.getTable().equals(tableName)) break;<a name="line.527"></a>
+<span class="sourceLineNo">528</span> regions.add(node.getRegionInfo());<a name="line.528"></a>
+<span class="sourceLineNo">529</span> }<a name="line.529"></a>
+<span class="sourceLineNo">530</span> return regions;<a name="line.530"></a>
+<span class="sourceLineNo">531</span> }<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span> Collection<RegionStateNode> getRegionStateNodes() {<a name="line.533"></a>
+<span class="sourceLineNo">534</span> return regionsMap.values();<a name="line.534"></a>
<span class="sourceLineNo">535</span> }<a name="line.535"></a>
<span class="sourceLineNo">536</span><a name="line.536"></a>
-<span class="sourceLineNo">537</span> // ============================================================================================<a name="line.537"></a>
-<span class="sourceLineNo">538</span> // TODO: helpers<a name="line.538"></a>
-<span class="sourceLineNo">539</span> // ============================================================================================<a name="line.539"></a>
-<span class="sourceLineNo">540</span> public boolean hasTableRegionStates(final TableName tableName) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span> // TODO<a name="line.541"></a>
-<span class="sourceLineNo">542</span> return !getTableRegionStates(tableName).isEmpty();<a name="line.542"></a>
+<span class="sourceLineNo">537</span> public ArrayList<RegionState> getRegionStates() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>(regionsMap.size());<a name="line.538"></a>
+<span class="sourceLineNo">539</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span> regions.add(node.toRegionState());<a name="line.540"></a>
+<span class="sourceLineNo">541</span> }<a name="line.541"></a>
+<span class="sourceLineNo">542</span> return regions;<a name="line.542"></a>
<span class="sourceLineNo">543</span> }<a name="line.543"></a>
<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span> /**<a name="line.545"></a>
-<span class="sourceLineNo">546</span> * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.546"></a>
-<span class="sourceLineNo">547</span> */<a name="line.547"></a>
-<span class="sourceLineNo">548</span> public List<RegionInfo> getRegionsOfTable(final TableName table) {<a name="line.548"></a>
-<span class="sourceLineNo">549</span> return getRegionsOfTable(table, false);<a name="line.549"></a>
-<span class="sourceLineNo">550</span> }<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span> /**<a name="line.552"></a>
-<span class="sourceLineNo">553</span> * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.553"></a>
-<span class="sourceLineNo">554</span> * <code>offline</code> to true. Does not include regions that are in the<a name="line.554"></a>
-<span class="sourceLineNo">555</span> * {@link State#SPLIT} state.<a name="line.555"></a>
-<span class="sourceLineNo">556</span> */<a name="line.556"></a>
-<span class="sourceLineNo">557</span> public List<RegionInfo> getRegionsOfTable(final TableName table, final boolean offline) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span> final ArrayList<RegionStateNode> nodes = getTableRegionStateNodes(table);<a name="line.558"></a>
-<span class="sourceLineNo">559</span> final ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(nodes.size());<a name="line.559"></a>
-<span class="sourceLineNo">560</span> for (RegionStateNode node: nodes) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span> if (include(node, offline)) hris.add(node.getRegionInfo());<a name="line.561"></a>
-<span class="sourceLineNo">562</span> }<a name="line.562"></a>
-<span class="sourceLineNo">563</span> return hris;<a name="line.563"></a>
-<span class="sourceLineNo">564</span> }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span> /**<a name="line.566"></a>
-<span class="sourceLineNo">567</span> * Utility. Whether to include region in list of regions. Default is to<a name="line.567"></a>
-<span class="sourceLineNo">568</span> * weed out split and offline regions.<a name="line.568"></a>
-<span class="sourceLineNo">569</span> * @return True if we should include the <code>node</code> (do not include<a name="line.569"></a>
-<span class="sourceLineNo">570</span> * if split or offline unless <code>offline</code> is set to true.<a name="line.570"></a>
-<span class="sourceLineNo">571</span> */<a name="line.571"></a>
-<span class="sourceLineNo">572</span> boolean include(final RegionStateNode node, final boolean offline) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span> if (LOG.isTraceEnabled()) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span> LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.574"></a>
-<span class="sourceLineNo">575</span> }<a name="line.575"></a>
-<span class="sourceLineNo">576</span> if (node.isInState(State.SPLIT)) return false;<a name="line.576"></a>
-<span class="sourceLineNo">577</span> if (node.isInState(State.OFFLINE) && !offline) return false;<a name="line.577"></a>
-<span class="sourceLineNo">578</span> final RegionInfo hri = node.getRegionInfo();<a name="line.578"></a>
-<span class="sourceLineNo">579</span> return (!hri.isOffline() && !hri.isSplit()) ||<a name="line.579"></a>
-<span class="sourceLineNo">580</span> ((hri.isOffline() || hri.isSplit()) && offline);<a name="line.580"></a>
-<span class="sourceLineNo">581</span> }<a name="line.581"></a>
-<span class="sourceLineNo">582</span><a name="line.582"></a>
-<span class="sourceLineNo">583</span> /**<a name="line.583"></a>
-<span class="sourceLineNo">584</span> * Returns the set of regions hosted by the specified server<a name="line.584"></a>
-<span class="sourceLineNo">585</span> * @param serverName the server we are interested in<a name="line.585"></a>
-<span class="sourceLineNo">586</span> * @return set of RegionInfo hosted by the specified server<a name="line.586"></a>
-<span class="sourceLineNo">587</span> */<a name="line.587"></a>
-<span class="sourceLineNo">588</span> public List<RegionInfo> getServerRegionInfoSet(final ServerName serverName) {<a name="line.588"></a>
-<span class="sourceLineNo">589</span> final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.589"></a>
-<span class="sourceLineNo">590</span> if (serverInfo == null) return Collections.emptyList();<a name="line.590"></a>
+<span class="sourceLineNo">545</span> // ==========================================================================<a name="line.545"></a>
+<span class="sourceLineNo">546</span> // RegionState helpers<a name="line.546"></a>
+<span class="sourceLineNo">547</span> // ==========================================================================<a name="line.547"></a>
+<span class="sourceLineNo">548</span> public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.548"></a>
+<span class="sourceLineNo">549</span> RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.549"></a>
+<span class="sourceLineNo">550</span> return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.550"></a>
+<span class="sourceLineNo">551</span> }<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span> public RegionState getRegionState(final String encodedRegionName) {<a name="line.553"></a>
+<span class="sourceLineNo">554</span> // TODO: Need a map <encodedName, ...> but it is just dispatch merge...<a name="line.554"></a>
+<span class="sourceLineNo">555</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.555"></a>
+<span class="sourceLineNo">556</span> if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span> return node.toRegionState();<a name="line.557"></a>
+<span class="sourceLineNo">558</span> }<a name="line.558"></a>
+<span class="sourceLineNo">559</span> }<a name="line.559"></a>
+<span class="sourceLineNo">560</span> return null;<a name="line.560"></a>
+<span class="sourceLineNo">561</span> }<a name="line.561"></a>
+<span class="sourceLineNo">562</span><a name="line.562"></a>
+<span class="sourceLineNo">563</span> // ============================================================================================<a name="line.563"></a>
+<span class="sourceLineNo">564</span> // TODO: helpers<a name="line.564"></a>
+<span class="sourceLineNo">565</span> // ============================================================================================<a name="line.565"></a>
+<span class="sourceLineNo">566</span> public boolean hasTableRegionStates(final TableName tableName) {<a name="line.566"></a>
+<span class="sourceLineNo">567</span> // TODO<a name="line.567"></a>
+<span class="sourceLineNo">568</span> return !getTableRegionStates(tableName).isEmpty();<a name="line.568"></a>
+<span class="sourceLineNo">569</span> }<a name="line.569"></a>
+<span class="sourceLineNo">570</span><a name="line.570"></a>
+<span class="sourceLineNo">571</span> /**<a name="line.571"></a>
+<span class="sourceLineNo">572</span> * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.572"></a>
+<span class="sourceLineNo">573</span> */<a name="line.573"></a>
+<span class="sourceLineNo">574</span> public List<RegionInfo> getRegionsOfTable(final TableName table) {<a name="line.574"></a>
+<span class="sourceLineNo">575</span> return getRegionsOfTable(table, false);<a name="line.575"></a>
+<span class="sourceLineNo">576</span> }<a name="line.576"></a>
+<span class="sourceLineNo">577</span><a name="line.577"></a>
+<span class="sourceLineNo">578</span> /**<a name="line.578"></a>
+<span class="sourceLineNo">579</span> * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.579"></a>
+<span class="sourceLineNo">580</span> * <code>offline</code> to true. Does not include regions that are in the<a name="line.580"></a>
+<span class="sourceLineNo">581</span> * {@link State#SPLIT} state.<a name="line.581"></a>
+<span class="sourceLineNo">582</span> */<a name="line.582"></a>
+<span class="sourceLineNo">583</span> public List<RegionInfo> getRegionsOfTable(final TableName table, final boolean offline) {<a name="line.583"></a>
+<span class="sourceLineNo">584</span> final ArrayList<RegionStateNode> nodes = getTableRegionStateNodes(table);<a name="line.584"></a>
+<span class="sourceLineNo">585</span> final ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(nodes.size());<a name="line.585"></a>
+<span class="sourceLineNo">586</span> for (RegionStateNode node: nodes) {<a name="line.586"></a>
+<span class="sourceLineNo">587</span> if (include(node, offline)) hris.add(node.getRegionInfo());<a name="line.587"></a>
+<span class="sourceLineNo">588</span> }<a name="line.588"></a>
+<span class="sourceLineNo">589</span> return hris;<a name="line.589"></a>
+<span class="sourceLineNo">590</span> }<a name="line.590"></a>
<span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span> synchronized (serverInfo) {<a name="line.592"></a>
-<span class="sourceLineNo">593</span> return serverInfo.getRegionInfoList();<a name="line.593"></a>
-<span class="sourceLineNo">594</span> }<a name="line.594"></a>
-<span class="sourceLineNo">595</span> }<a name="line.595"></a>
-<span class="sourceLineNo">596</span><a name="line.596"></a>
-<span class="sourceLineNo">597</span> // ============================================================================================<a name="line.597"></a>
-<span class="sourceLineNo">598</span> // TODO: split helpers<a name="line.598"></a>
-<span class="sourceLineNo">599</span> // ============================================================================================<a name="line.599"></a>
-<span class="sourceLineNo">600</span> public void logSplit(final ServerName serverName) {<a name="line.600"></a>
-<span class="sourceLineNo">601</span> final ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.601"></a>
-<span class="sourceLineNo">602</span> synchronized (serverNode) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span> serverNode.setState(ServerState.SPLITTING);<a name="line.603"></a>
-<span class="sourceLineNo">604</span> /* THIS HAS TO BE WRONG. THIS IS SPLITTING OF REGION, NOT SPLITTING WALs.<a name="line.604"></a>
-<span class="sourceLineNo">605</span> for (RegionStateNode regionNode: serverNode.getRegions()) {<a name="line.605"></a>
-<span class="sourceLineNo">606</span> synchronized (regionNode) {<a name="line.606"></a>
-<span class="sourceLineNo">607</span> // TODO: Abort procedure if present<a name="line.607"></a>
-<span class="sourceLineNo">608</span> regionNode.setState(State.SPLITTING);<a name="line.608"></a>
-<span class="sourceLineNo">609</span> }<a name="line.609"></a>
-<span class="sourceLineNo">610</span> }*/<a name="line.610"></a>
-<span class="sourceLineNo">611</span> }<a name="line.611"></a>
-<span class="sourceLineNo">612</span> }<a name="line.612"></a>
-<span class="sourceLineNo">613</span><a name="line.613"></a>
-<span class="sourceLineNo">614</span> public void logSplit(final RegionInfo regionInfo) {<a name="line.614"></a>
-<span class="sourceLineNo">615</span> final RegionStateNode regionNode = getRegionStateNode(regionInfo);<a name="line.615"></a>
-<span class="sourceLineNo">616</span> synchronized (regionNode) {<a name="line.616"></a>
-<span class="sourceLineNo">617</span> regionNode.setState(State.SPLIT);<a name="line.617"></a>
-<span class="sourceLineNo">618</span> }<a name="line.618"></a>
-<span class="sourceLineNo">619</span> }<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span> @VisibleForTesting<a name="line.621"></a>
-<span class="sourceLineNo">622</span> public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span> final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.623"></a>
-<span class="sourceLineNo">624</span> synchronized (regionNode) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span> regionNode.setState(state);<a name="line.625"></a>
-<span class="sourceLineNo">626</span> }<a name="line.626"></a>
-<span class="sourceLineNo">627</span> }<a name="line.627"></a>
-<span class="sourceLineNo">628</span><a name="line.628"></a>
-<span class="sourceLineNo">629</span> // ============================================================================================<a name="line.629"></a>
-<span class="sourceLineNo">630</span> // TODO:<a name="line.630"></a>
-<span class="sourceLineNo">631</span> // ============================================================================================<a name="line.631"></a>
-<span class="sourceLineNo">632</span> public List<RegionInfo> getAssignedRegions() {<a name="line.632"></a>
-<span class="sourceLineNo">633</span> final List<RegionInfo> result = new ArrayList<RegionInfo>();<a name="line.633"></a>
-<span class="sourceLineNo">634</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span> if (!node.isInTransition()) {<a name="line.635"></a>
-<span class="sourceLineNo">636</span> result.add(node.getRegionInfo());<a name="line.636"></a>
-<span class="sourceLineNo">637</span> }<a name="line.637"></a>
-<span class="sourceLineNo">638</span> }<a name="line.638"></a>
-<span class="sourceLineNo">639</span> return result;<a name="line.639"></a>
-<span class="sourceLineNo">640</span> }<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span> public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.643"></a>
-<span class="sourceLineNo">644</span> if (region != null) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span> synchronized (region) {<a name="line.645"></a>
-<span class="sourceLineNo">646</span> return region.isInState(state);<a name="line.646"></a>
-<span class="sourceLineNo">647</span> }<a name="line.647"></a>
-<span class="sourceLineNo">648</span> }<a name="line.648"></a>
-<span class="sourceLineNo">649</span> return false;<a name="line.649"></a>
-<span class="sourceLineNo">650</span> }<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span> public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span> return isRegionInState(regionInfo, State.OPEN);<a name="line.653"></a>
+<span class="sourceLineNo">592</span> /**<a name="line.592"></a>
+<span class="sourceLineNo">593</span> * Utility. Whether to include region in list of regions. Default is to<a name="line.593"></a>
+<span class="sourceLineNo">594</span> * weed out split and offline regions.<a name="line.594"></a>
+<span class="sourceLineNo">595</span> * @return True if we should include the <code>node</code> (do not include<a name="line.595"></a>
+<span class="sourceLineNo">596</span> * if split or offline unless <code>offline</code> is set to true.<a name="line.596"></a>
+<span class="sourceLineNo">597</span> */<a name="line.597"></a>
+<span class="sourceLineNo">598</span> boolean include(final RegionStateNode node, final boolean offline) {<a name="line.598"></a>
+<span class="sourceLineNo">599</span> if (LOG.isTraceEnabled()) {<a name="line.599"></a>
+<span class="sourceLineNo">600</span> LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.600"></a>
+<span class="sourceLineNo">601</span> }<a name="line.601"></a>
+<span class="sourceLineNo">602</span> if (node.isInState(State.SPLIT)) return false;<a name="line.602"></a>
+<span class="sourceLineNo">603</span> if (node.isInState(State.OFFLINE) && !offline) return false;<a name="line.603"></a>
+<span class="sourceLineNo">604</span> final RegionInfo hri = node.getRegionInfo();<a name="line.604"></a>
+<span class="sourceLineNo">605</span> return (!hri.isOffline() && !hri.isSplit()) ||<a name="line.605"></a>
+<span class="sourceLineNo">606</span> ((hri.isOffline() || hri.isSplit()) && offline);<a name="line.606"></a>
+<span class="sourceLineNo">607</span> }<a name="line.607"></a>
+<span class="sourceLineNo">608</span><a name="line.608"></a>
+<span class="sourceLineNo">609</span> /**<a name="line.609"></a>
+<span class="sourceLineNo">610</span> * Returns the set of regions hosted by the specified server<a name="line.610"></a>
+<span class="sourceLineNo">611</span> * @param serverName the server we are interested in<a name="line.611"></a>
+<span class="sourceLineNo">612</span> * @return set of RegionInfo hosted by the specified server<a name="line.612"></a>
+<span class="sourceLineNo">613</span> */<a name="line.613"></a>
+<span class="sourceLineNo">614</span> public List<RegionInfo> getServerRegionInfoSet(final ServerName serverName) {<a name="line.614"></a>
+<span class="sourceLineNo">615</span> final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.615"></a>
+<span class="sourceLineNo">616</span> if (serverInfo == null) return Collections.emptyList();<a name="line.616"></a>
+<span class="sourceLineNo">617</span><a name="line.617"></a>
+<span class="sourceLineNo">618</span> synchronized (serverInfo) {<a name="line.618"></a>
+<span class="sourceLineNo">619</span> return serverInfo.getRegionInfoList();<a name="line.619"></a>
+<span class="sourceLineNo">620</span> }<a name="line.620"></a>
+<span class="sourceLineNo">621</span> }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span> // ============================================================================================<a name="line.623"></a>
+<span class="sourceLineNo">624</span> // TODO: split helpers<a name="line.624"></a>
+<span class="sourceLineNo">625</span> // ============================================================================================<a name="line.625"></a>
+<span class="sourceLineNo">626</span><a name="line.626"></a>
+<span class="sourceLineNo">627</span> /**<a name="line.627"></a>
+<span class="sourceLineNo">628</span> * Call this when we start log splitting a crashed Server.<a name="line.628"></a>
+<span class="sourceLineNo">629</span> * @see #logSplit(ServerName)<a name="line.629"></a>
+<span class="sourceLineNo">630</span> */<a name="line.630"></a>
+<span class="sourceLineNo">631</span> public void logSplitting(final ServerName serverName) {<a name="line.631"></a>
+<span class="sourceLineNo">632</span> final ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.632"></a>
+<span class="sourceLineNo">633</span> synchronized (serverNode) {<a name="line.633"></a>
+<span class="sourceLineNo">634</span> serverNode.setState(ServerState.SPLITTING);<a name="line.634"></a>
+<span class="sourceLineNo">635</span> }<a name="line.635"></a>
+<span class="sourceLineNo">636</span> }<a name="line.636"></a>
+<span class="sourceLineNo">637</span><a name="line.637"></a>
+<span class="sourceLineNo">638</span> /**<a name="line.638"></a>
+<span class="sourceLineNo">639</span> * Called after we've split all logs on a crashed Server.<a name="line.639"></a>
+<span class="sourceLineNo">640</span> * @see #logSplitting(ServerName)<a name="line.640"></a>
+<span class="sourceLineNo">641</span> */<a name="line.641"></a>
+<span class="sourceLineNo">642</span> public void logSplit(final ServerName serverName) {<a name="line.642"></a>
+<span class="sourceLineNo">643</span> final ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.643"></a>
+<span class="sourceLineNo">644</span> synchronized (serverNode) {<a name="line.644"></a>
+<span class="sourceLineNo">645</span> serverNode.setState(ServerState.OFFLINE);<a name="line.645"></a>
+<span class="sourceLineNo">646</span> }<a name="line.646"></a>
+<span class="sourceLineNo">647</span> }<a name="line.647"></a>
+<span class="sourceLineNo">648</span><a name="line.648"></a>
+<span class="sourceLineNo">649</span> public void logSplit(final RegionInfo regionInfo) {<a name="line.649"></a>
+<span class="sourceLineNo">650</span> final RegionStateNode regionNode = getRegionStateNode(regionInfo);<a name="line.650"></a>
+<span class="sourceLineNo">651</span> synchronized (regionNode) {<a name="line.651"></a>
+<span class="sourceLineNo">652</span> regionNode.setState(State.SPLIT);<a name="line.652"></a>
+<span class="sourceLineNo">653</span> }<a name="line.653"></a>
<span class="sourceLineNo">654</span> }<a name="line.654"></a>
<span class="sourceLineNo">655</span><a name="line.655"></a>
-<span class="sourceLineNo">656</span> /**<a name="line.656"></a>
-<span class="sourceLineNo">657</span> * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.657"></a>
-<span class="sourceLineNo">658</span> */<a name="line.658"></a>
-<span class="sourceLineNo">659</span> public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.659"></a>
-<span class="sourceLineNo">660</span> return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.660"></a>
-<span class="sourceLineNo">661</span> }<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span> public Map<ServerName, List<RegionInfo>> getSnapShotOfAssignment(<a name="line.663"></a>
-<span class="sourceLineNo">664</span> final Collection<RegionInfo> regions) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span> final Map<ServerName, List<RegionInfo>> result = new HashMap<ServerName, List<RegionInfo>>();<a name="line.665"></a>
-<span class="sourceLineNo">666</span> for (RegionInfo hri: regions) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span> final RegionStateNode node = getRegionStateNode(hri);<a name="line.667"></a>
-<span class="sourceLineNo">668</span> if (node == null) continue;<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span> // TODO: State.OPEN<a name="line.670"></a>
-<span class="sourceLineNo">671</span> final ServerName serverName = node.getRegionLocation();<a name="line.671"></a>
-<span class="sourceLineNo">672</span> if (serverName == null) continue;<a name="line.672"></a>
-<span class="sourceLineNo">673</span><a name="line.673"></a>
-<span class="sourceLineNo">674</span> List<RegionInfo> serverRegions = result.get(serverName);<a name="line.674"></a>
-<span class="sourceLineNo">675</span> if (serverRegions == null) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span> serverRegions = new ArrayList<RegionInfo>();<a name="line.676"></a>
-<span class="sourceLineNo">677</span> result.put(serverName, serverRegions);<a name="line.677"></a>
-<span class="sourceLineNo">678</span> }<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span> serverRegions.add(node.getRegionInfo());<a name="line.680"></a>
-<span class="sourceLineNo">681</span> }<a name="line.681"></a>
-<span class="sourceLineNo">682</span> return result;<a name="line.682"></a>
-<span class="sourceLineNo">683</span> }<a name="line.683"></a>
-<span class="sourceLineNo">684</span><a name="line.684"></a>
-<span class="sourceLineNo">685</span> public Map<RegionInfo, ServerName> getRegionAssignments() {<a name="line.685"></a>
-<span class="sourceLineNo">686</span> final HashMap<RegionInfo, ServerName> assignments = new HashMap<RegionInfo, ServerName>();<a name="line.686"></a>
-<span class="sourceLineNo">687</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.687"></a>
-<span class="sourceLineNo">688</span> assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.688"></a>
-<span class="sourceLineNo">689</span> }<a name="line.689"></a>
-<span class="sourceLineNo">690</span> return assignments;<a name="line.690"></a>
-<span class="sourceLineNo">691</span> }<a name="line.691"></a>
-<span class="sourceLineNo">692</span><a name="line.692"></a>
-<span class="sourceLineNo">693</span> public Map<RegionState.State, List<RegionInfo>> getRegionByStateOfTable(TableName tableName) {<a name="line.693"></a>
-<span class="sourceLineNo">694</span> final State[] states = State.values();<a name="line.694"></a>
-<span class="sourceLineNo">695</span> final Map<RegionState.State, List<RegionInfo>> tableRegions =<a name="line.695"></a>
-<span class="sourceLineNo">696</span> new HashMap<State, List<RegionInfo>>(states.length);<a name="line.696"></a>
-<span class="sourceLineNo">697</span> for (int i = 0; i < states.length; ++i) {<a name="line.697"></a>
-<span class="sourceLineNo">698</span> tableRegions.put(states[i], new ArrayList<RegionInfo>());<a name="line.698"></a>
-<span class="sourceLineNo">699</span> }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span> if (node.getTable().equals(tableName)) {<a name="line.702"></a>
-<span class="sourceLineNo">703</span> tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.703"></a>
-<span class="sourceLineNo">704</span> }<a name="line.704"></a>
-<span class="sourceLineNo">705</span> }<a name="line.705"></a>
-<span class="sourceLineNo">706</span> return tableRegions;<a name="line.706"></a>
-<span class="sourceLineNo">707</span> }<a name="line.707"></a>
+<span class="sourceLineNo">656</span> @VisibleForTesting<a name="line.656"></a>
+<span class="sourceLineNo">657</span> public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.657"></a>
+<span class="sourceLineNo">658</span> final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.658"></a>
+<span class="sourceLineNo">659</span> synchronized (regionNode) {<a name="line.659"></a>
+<span class="sourceLineNo">660</span> regionNode.setState(state);<a name="line.660"></a>
+<span class="sourceLineNo">661</span> }<a name="line.661"></a>
+<span class="sourceLineNo">662</span> }<a name="line.662"></a>
+<span class="sourceLineNo">663</span><a name="line.663"></a>
+<span class="sourceLineNo">664</span> // ============================================================================================<a name="line.664"></a>
+<span class="sourceLineNo">665</span> // TODO:<a name="line.665"></a>
+<span class="sourceLineNo">666</span> // ============================================================================================<a name="line.666"></a>
+<span class="sourceLineNo">667</span> public List<RegionInfo> getAssignedRegions() {<a name="line.667"></a>
+<span class="sourceLineNo">668</span> final List<RegionInfo> result = new ArrayList<RegionInfo>();<a name="line.668"></a>
+<span class="sourceLineNo">669</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.669"></a>
+<span class="sourceLineNo">670</span> if (!node.isInTransition()) {<a name="line.670"></a>
+<span class="sourceLineNo">671</span> result.add(node.getRegionInfo());<a name="line.671"></a>
+<span class="sourceLineNo">672</span> }<a name="line.672"></a>
+<span class="sourceLineNo">673</span> }<a name="line.673"></a>
+<span class="sourceLineNo">674</span> return result;<a name="line.674"></a>
+<span class="sourceLineNo">675</span> }<a name="line.675"></a>
+<span class="sourceLineNo">676</span><a name="line.676"></a>
+<span class="sourceLineNo">677</span> public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.677"></a>
+<span class="sourceLineNo">678</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.678"></a>
+<span class="sourceLineNo">679</span> if (region != null) {<a name="line.679"></a>
+<span class="sourceLineNo">680</span> synchronized (region) {<a name="line.680"></a>
+<span class="sourceLineNo">681</span> return region.isInState(state);<a name="line.681"></a>
+<span class="sourceLineNo">682</span> }<a name="line.682"></a>
+<span class="sourceLineNo">683</span> }<a name="line.683"></a>
+<span class="sourceLineNo">684</span> return false;<a name="line.684"></a>
+<span class="sourceLineNo">685</span> }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span> public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.687"></a>
+<span class="sourceLineNo">688</span> return isRegionInState(regionInfo, State.OPEN);<a name="line.688"></a>
+<span class="sourceLineNo">689</span> }<a name="line.689"></a>
+<span class="sourceLineNo">690</span><a name="line.690"></a>
+<span class="sourceLineNo">691</span> /**<a name="line.691"></a>
+<span class="sourceLineNo">692</span> * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.692"></a>
+<span class="sourceLineNo">693</span> */<a name="line.693"></a>
+<span class="sourceLineNo">694</span> public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.694"></a>
+<span class="sourceLineNo">695</span> return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.695"></a>
+<span class="sourceLineNo">696</span> }<a name="line.696"></a>
+<span class="sourceLineNo">697</span><a name="line.697"></a>
+<span class="sourceLineNo">698</span> public Map<ServerName, List<RegionInfo>> getSnapShotOfAssignment(<a name="line.698"></a>
+<span class="sourceLineNo">699</span> final Collection<RegionInfo> regions) {<a name="line.699"></a>
+<span class="sourceLineNo">700</span> final Map<ServerName, List<RegionInfo>> result = new HashMap<ServerName, List<RegionInfo>>();<a name="line.700"></a>
+<span class="sourceLineNo">701</span> for (RegionInfo hri: regions) {<a name="line.701"></a>
+<span class="sourceLineNo">702</span> final RegionStateNode node = getRegionStateNode(hri);<a name="line.702"></a>
+<span class="sourceLineNo">703</span> if (node == null) continue;<a name="line.703"></a>
+<span class="sourceLineNo">704</span><a name="line.704"></a>
+<span class="sourceLineNo">705</span> // TODO: State.OPEN<a name="line.705"></a>
+<span class="sourceLineNo">706</span> final ServerName serverName = node.getRegionLocation();<a name="line.706"></a>
+<span class="sourceLineNo">707</span> if (serverName == null) continue;<a name="line.707"></a>
<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span> public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.709"></a>
-<span class="sourceLineNo">710</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.710"></a>
-<span class="sourceLineNo">711</span> if (region != null) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span> synchronized (region) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span> ServerName server = region.getRegionLocation();<a name="line.713"></a>
-<span class="sourceLineNo">714</span> return server != null ? server : region.getLastHost();<a name="line.714"></a>
-<span class="sourceLineNo">715</span> }<a name="line.715"></a>
+<span class="sourceLineNo">709</span> List<RegionInfo> serverRegions = result.get(serverName);<a name="line.709"></a>
+<span class="sourceLineNo">710</span> if (serverRegions == null) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span> serverRegions = new ArrayList<RegionInfo>();<a name="line.711"></a>
+<span class="sourceLineNo">712</span> result.put(serverName, serverRegions);<a name="line.712"></a>
+<span class="sourceLineNo">713</span> }<a name="line.713"></a>
+<span class="sourceLineNo">714</span><a name="line.714"></a>
+<span class="sourceLineNo">715</span> serverRegions.add(node.getRegionInfo());<a name="line.715"></a>
<span class="sourceLineNo">716</span> }<a name="line.716"></a>
-<span class="sourceLineNo">717</span> return null;<a name="line.717"></a>
+<span class="sourceLineNo">717</span> return result;<a name="line.717"></a>
<span class="sourceLineNo">718</span> }<a name="line.718"></a>
<span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span> /**<a name="line.720"></a>
-<span class="sourceLineNo">721</span> * This is an EXPENSIVE clone. Cloning though is the safest thing to do.<a name="line.721"></a>
-<span class="sourceLineNo">722</span> * Can't let out original since it can change and at least the load balancer<a name="line.722"></a>
-<span class="sourceLineNo">723</span> * wants to iterate this exported list. We need to synchronize on regions<a name="line.723"></a>
-<span class="sourceLineNo">724</span> * since all access to this.servers is under a lock on this.regions.<a name="line.724"></a>
-<span class="sourceLineNo">725</span> * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.725"></a>
-<span class="sourceLineNo">726</span> * @return A clone of current assignments by table.<a name="line.726"></a>
-<span class="sourceLineNo">727</span> */<a name="line.727"></a>
-<span class="sourceLineNo">728</span> public Map<TableName, Map<ServerName, List<RegionInfo>>> getAssignmentsByTable(<a name="line.728"></a>
-<span class="sourceLineNo">729</span> final boolean forceByCluster) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span> if (!forceByCluster) return getAssignmentsByTable();<a name="line.730"></a>
-<span class="sourceLineNo">731</span><a name="line.731"></a>
-<span class="sourceLineNo">732</span> final HashMap<ServerName, List<RegionInfo>> ensemble =<a name="line.732"></a>
-<span class="sourceLineNo">733</span> new HashMap<ServerName, List<RegionInfo>>(serverMap.size());<a name="line.733"></a>
-<span class="sourceLineNo">734</span> for (ServerStateNode serverNode: serverMap.values()) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span> ensemble.put(serverNode.getServerName(), serverNode.getRegionInfoList());<a name="line.735"></a>
-<span class="sourceLineNo">736</span> }<a name="line.736"></a>
-<span class="sourceLineNo">737</span><a name="line.737"></a>
-<span class="sourceLineNo">738</span> // TODO: can we use Collections.singletonMap(HConstants.ENSEMBLE_TABLE_NAME, ensemble)?<a name="line.738"></a>
-<span class="sourceLineNo">739</span> final Map<TableName, Map<ServerName, List<RegionInfo>>> result =<a name="line.739"></a>
-<span class="sourceLineNo">740</span> new HashMap<TableName, Map<ServerName, List<RegionInfo>>>(1);<a name="line.740"></a>
-<span class="sourceLineNo">741</span> result.put(HConstants.ENSEMBLE_TABLE_NAME, ensemble);<a name="line.741"></a>
-<span class="sourceLineNo">742</span> return result;<a name="line.742"></a>
-<span class="sourceLineNo">743</span> }<a name="line.743"></a>
-<span class="sourceLineNo">744</span><a name="line.744"></a>
-<span class="sourceLineNo">745</span> public Map<TableName, Map<ServerName, List<RegionInfo>>> getAssignmentsByTable() {<a name="line.745"></a>
-<span class="sourceLineNo">746</span> final Map<TableName, Map<ServerName, List<RegionInfo>>> result = new HashMap<>();<a name="line.746"></a>
-<span class="sourceLineNo">747</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span> Map<ServerName, List<RegionInfo>> tableResult = result.get(node.getTable());<a name="line.748"></a>
-<span class="sourceLineNo">749</span> if (tableResult == null) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span> tableResult = new HashMap<ServerName, List<RegionInfo>>();<a name="line.750"></a>
-<span class="sourceLineNo">751</span> result.put(node.getTable(), tableResult);<a name="line.751"></a>
-<span class="sourceLineNo">752</span> }<a name="line.752"></a>
-<span class="sourceLineNo">753</span><a name="line.753"></a>
-<span class="sourceLineNo">754</span> final ServerName serverName = node.getRegionLocation();<a name="line.754"></a>
-<span class="sourceLineNo">755</span> if (serverName == null) {<a name="line.755"></a>
-<span class="sourceLineNo">756</span> LOG.info("Skipping, no server for " + node);<a name="line.756"></a>
-<span class="sourceLineNo">757</span> continue;<a name="line.757"></a>
-<span class="sourceLineNo">758</span> }<a name="line.758"></a>
-<span class="sourceLineNo">759</span> List<RegionInfo> serverResult = tableResult.get(serverName);<a name="line.759"></a>
-<span class="sourceLineNo">760</span> if (serverResult == null) {<a name="line.760"></a>
-<span class="sourceLineNo">761</span> serverResult = new ArrayList<RegionInfo>();<a name="line.761"></a>
-<span class="sourceLineNo">762</span> tableResult.put(serverName, serverResult);<a name="line.762"></a>
-<span class="sourceLineNo">763</span> }<a name="line.763"></a>
-<span class="sourceLineNo">764</span><a name="line.764"></a>
-<span class="sourceLineNo">765</span> serverResult.add(node.getRegionInfo());<a name="line.765"></a>
-<span class="sourceLineNo">766</span> }<a name="line.766"></a>
-<span class="sourceLineNo">767</span> // Add online servers with no assignment for the table.<a name="line.767"></a>
-<span class="sourceLineNo">768</span> for (Map<ServerName, List<RegionInfo>> table: result.values()) {<a name="line.768"></a>
-<span class="sourceLineNo">769</span> for (ServerName svr : serverMap.keySet()) {<a name="line.769"></a>
-<span class="sourceLineNo">770</span> if (!table.containsKey(svr)) {<a name="line.770"></a>
-<span class="sourceLineNo">771</span> table.put(svr, new ArrayList<RegionInfo>());<a name="line.771"></a>
-<span class="sourceLineNo">772</span> }<a name="line.772"></a>
-<span class="sourceLineNo">773</span> }<a name="line.773"></a>
-<span class="sourceLineNo">774</span> }<a name="line.774"></a>
-<span class="sourceLineNo">775</span> return result;<a name="line.775"></a>
-<span class="sourceLineNo">776</span> }<a name="line.776"></a>
-<span class="sourceLineNo">777</span><a name="line.777"></a>
-<span class="sourceLineNo">778</span> // ==========================================================================<a name="line.778"></a>
-<span class="sourceLineNo">779</span> // Region in transition helpers<a name="line.779"></a>
-<span class="sourceLineNo">780</span> // ==========================================================================<a name="line.780"></a>
-<span class="sourceLineNo">781</span> protected boolean addRegionInTransition(final RegionStateNode regionNode,<a name="line.781"></a>
-<span class="sourceLineNo">782</span> final RegionTransitionProcedure procedure) {<a name="line.782"></a>
-<span class="sourceLineNo">783</span> if (procedure != null && !regionNode.setProcedure(procedure)) return false;<a name="line.783"></a>
-<span class="sourceLineNo">784</span><a name="line.784"></a>
-<span class="sourceLineNo">785</span> regionInTransition.put(regionNode.getRegionInfo(), regionNode);<a name="line.785"></a>
-<span class="sourceLineNo">786</span> return true;<a name="line.786"></a>
-<span class="sourceLineNo">787</span> }<a name="line.787"></a>
+<span class="sourceLineNo">720</span> public Map<RegionInfo, ServerName> getRegionAssignments() {<a name="line.720"></a>
+<span class="sourceLineNo">721</span> final HashMap<RegionInfo, ServerName> assignments = new HashMap<RegionInfo, ServerName>();<a name="line.721"></a>
+<span class="sourceLineNo">722</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span> assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.723"></a>
+<span class="sourceLineNo">724</span> }<a name="line.724"></a>
+<span class="sourceLineNo">725</span> return assignments;<a name="line.725"></a>
+<span class="sourceLineNo">726</span> }<a name="line.726"></a>
+<span class="sourceLineNo">727</span><a name="line.727"></a>
+<span class="sourceLineNo">728</span> public Map<RegionState.State, List<RegionInfo>> getRegionByStateOfTable(TableName tableName) {<a name="line.728"></a>
+<span class="sourceLineNo">729</span> final State[] states = State.values();<a name="line.729"></a>
+<span class="sourceLineNo">730</span> final Map<RegionState.State, List<RegionInfo>> tableRegions =<a name="line.730"></a>
+<span class="sourceLineNo">731</span> new HashMap<State, List<RegionInfo>>(states.length);<a name="line.731"></a>
+<span class="sourceLineNo">732</span> for (int i = 0; i < states.length; ++i) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span> tableRegions.put(states[i], new ArrayList<RegionInfo>());<a name="line.733"></a>
+<span class="sourceLineNo">734</span> }<a name="line.734"></a>
+<span class="sourceLineNo">735</span><a name="line.735"></a>
+<span class="sourceLineNo">736</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.736"></a>
+<span class="sourceLineNo">737</span> if (node.getTable().equals(tableName)) {<a name="line.737"></a>
+<span class="sourceLineNo">738</span> tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.738"></a>
+<span class="sourceLineNo">739</span> }<a name="line.739"></a>
+<span class="sourceLineNo">740</span> }<a name="line.740"></a>
+<span class="sourceLineNo">741</span> return tableRegions;<a name="line.741"></a>
+<span class="sourceLineNo">742</span> }<a name="line.742"></a>
+<span class="sourceLineNo">743</span><a name="line.743"></a>
+<span class="sourceLineNo">744</span> public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.744"></a>
+<span class="sourceLineNo">745</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.745"></a>
+<span class="sourceLineNo">746</span> if (region != null) {<a name="line.746"></a>
+<span class="sourceLineNo">747</span> synchronized (region) {<a name="line.747"></a>
+<span class="sourceLineNo">748</span> ServerName server = region.getRegionLocation();<a name="line.748"></a>
+<span class="sourceLineNo">749</span> return server != null ? server : region.getLastHost();<a name="line.749"></a>
+<span class="sourceLineNo">750</span> }<a name="line.750"></a>
+<span class="sourceLineNo">751</span> }<a name="line.751"></a>
+<span class="sourceLineNo">752</span> return null;<a name="line.752"></a>
+<span class="sourceLineNo">753</span> }<a name="line.753"></a>
+<span class="sourceLineNo">754</span><a name="line.754"></a>
+<span class="sourceLineNo">755</span> /**<a name="line.755"></a>
+<span class="sourceLineNo">756</span> * This is an EXPENSIVE clone. Cloning though is the safest thing to do.<a name="line.756"></a>
+<span class="sourceLineNo">757</span> * Can't let out original since it can change and at least the load balancer<a name="line.757"></a>
+<span class="sourceLineNo">758</span> * wants to iterate this exported list. We need to synchronize on regions<a name="line.758"></a>
+<span class="sourceLineNo">759</span> * since all access to this.servers is under a lock on this.regions.<a name="line.759"></a>
+<span class="sourceLineNo">760</span> * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.760"></a>
+<span class="sourceLineNo">761</span> * @return A clone of current assignments by table.<a name="line.761"></a>
+<span class="sourceLineNo">762</span> */<a name="line.762"></a>
+<span class="sourceLineNo">763</span> public Map<TableName, Map<ServerName, List<RegionInfo>>> getAssignmentsByTable(<a name="line.763"></a>
+<span class="sourceLineNo">764</span> final boolean forceByCluster) {<a name="line.764"></a>
+<span class="sou
<TRUNCATED>
[11/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html
index 8b5905e..98e88a4 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html
@@ -35,465 +35,461 @@
<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.master.procedure.TableProcedureInterface;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteOperation;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureException;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionState;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.slf4j.Logger;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.slf4j.LoggerFactory;<a name="line.42"></a>
-<span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span>/**<a name="line.44"></a>
-<span class="sourceLineNo">045</span> * Base class for the Assign and Unassign Procedure.<a name="line.45"></a>
-<span class="sourceLineNo">046</span> *<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * Locking:<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * Takes exclusive lock on the region being assigned/unassigned. Thus, there can only be one<a name="line.48"></a>
-<span class="sourceLineNo">049</span> * RegionTransitionProcedure per region running at a time (see MasterProcedureScheduler).<a name="line.49"></a>
-<span class="sourceLineNo">050</span> *<a name="line.50"></a>
-<span class="sourceLineNo">051</span> * <p>This procedure is asynchronous and responds to external events.<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * The AssignmentManager will notify this procedure when the RS completes<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * the operation and reports the transitioned state<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * (see the Assign and Unassign class for more detail).</p><a name="line.54"></a>
-<span class="sourceLineNo">055</span> *<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * <p>Procedures move from the REGION_TRANSITION_QUEUE state when they are<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * first submitted, to the REGION_TRANSITION_DISPATCH state when the request<a name="line.57"></a>
-<span class="sourceLineNo">058</span> * to remote server is sent and the Procedure is suspended waiting on external<a name="line.58"></a>
-<span class="sourceLineNo">059</span> * event to be woken again. Once the external event is triggered, Procedure<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * moves to the REGION_TRANSITION_FINISH state.</p><a name="line.60"></a>
-<span class="sourceLineNo">061</span> *<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * <p>NOTE: {@link AssignProcedure} and {@link UnassignProcedure} should not be thought of<a name="line.62"></a>
-<span class="sourceLineNo">063</span> * as being asymmetric, at least currently.<a name="line.63"></a>
-<span class="sourceLineNo">064</span> * <ul><a name="line.64"></a>
-<span class="sourceLineNo">065</span> * <li>{@link AssignProcedure} moves through all the above described states and implements methods<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * associated with each while {@link UnassignProcedure} starts at state<a name="line.66"></a>
-<span class="sourceLineNo">067</span> * REGION_TRANSITION_DISPATCH and state REGION_TRANSITION_QUEUE is not supported.</li><a name="line.67"></a>
-<span class="sourceLineNo">068</span> *<a name="line.68"></a>
-<span class="sourceLineNo">069</span> * <li>When any step in {@link AssignProcedure} fails, failure handler<a name="line.69"></a>
-<span class="sourceLineNo">070</span> * AssignProcedure#handleFailure(MasterProcedureEnv, RegionStateNode) re-attempts the<a name="line.70"></a>
-<span class="sourceLineNo">071</span> * assignment by setting the procedure state to REGION_TRANSITION_QUEUE and forces<a name="line.71"></a>
-<span class="sourceLineNo">072</span> * assignment to a different target server by setting {@link AssignProcedure#forceNewPlan}. When<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * the number of attempts reaches threshold configuration 'hbase.assignment.maximum.attempts',<a name="line.73"></a>
-<span class="sourceLineNo">074</span> * the procedure is aborted. For {@link UnassignProcedure}, similar re-attempts are<a name="line.74"></a>
-<span class="sourceLineNo">075</span> * intentionally not implemented. It is a 'one shot' procedure. See its class doc for how it<a name="line.75"></a>
-<span class="sourceLineNo">076</span> * handles failure.<a name="line.76"></a>
-<span class="sourceLineNo">077</span> * </li><a name="line.77"></a>
-<span class="sourceLineNo">078</span> * <li>If we find a region in an 'unexpected' state, we'll complain and retry with backoff forever.<a name="line.78"></a>
-<span class="sourceLineNo">079</span> * The 'unexpected' state needs to be fixed either by another running Procedure or by operator<a name="line.79"></a>
-<span class="sourceLineNo">080</span> * intervention (Regions in 'unexpected' state indicates bug or unexpected transition type).<a name="line.80"></a>
-<span class="sourceLineNo">081</span> * For this to work, subclasses need to persist the 'attempt' counter kept in this class when<a name="line.81"></a>
-<span class="sourceLineNo">082</span> * they do serializeStateData and restore it inside their deserializeStateData, just as they do<a name="line.82"></a>
-<span class="sourceLineNo">083</span> * for {@link #regionInfo}.<a name="line.83"></a>
-<span class="sourceLineNo">084</span> * </li><a name="line.84"></a>
-<span class="sourceLineNo">085</span> * </ul><a name="line.85"></a>
-<span class="sourceLineNo">086</span> * </p><a name="line.86"></a>
-<span class="sourceLineNo">087</span> *<a name="line.87"></a>
-<span class="sourceLineNo">088</span> * <p>TODO: Considering it is a priority doing all we can to get make a region available as soon as<a name="line.88"></a>
-<span class="sourceLineNo">089</span> * possible, re-attempting with any target makes sense if specified target fails in case of<a name="line.89"></a>
-<span class="sourceLineNo">090</span> * {@link AssignProcedure}. For {@link UnassignProcedure}, our concern is preventing data loss<a name="line.90"></a>
-<span class="sourceLineNo">091</span> * on failed unassign. See class doc for explanation.<a name="line.91"></a>
-<span class="sourceLineNo">092</span> */<a name="line.92"></a>
-<span class="sourceLineNo">093</span>@InterfaceAudience.Private<a name="line.93"></a>
-<span class="sourceLineNo">094</span>public abstract class RegionTransitionProcedure<a name="line.94"></a>
-<span class="sourceLineNo">095</span> extends Procedure<MasterProcedureEnv><a name="line.95"></a>
-<span class="sourceLineNo">096</span> implements TableProcedureInterface,<a name="line.96"></a>
-<span class="sourceLineNo">097</span> RemoteProcedure<MasterProcedureEnv, ServerName> {<a name="line.97"></a>
-<span class="sourceLineNo">098</span> private static final Logger LOG = LoggerFactory.getLogger(RegionTransitionProcedure.class);<a name="line.98"></a>
-<span class="sourceLineNo">099</span><a name="line.99"></a>
-<span class="sourceLineNo">100</span> protected final AtomicBoolean aborted = new AtomicBoolean(false);<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span> private RegionTransitionState transitionState = RegionTransitionState.REGION_TRANSITION_QUEUE;<a name="line.102"></a>
-<span class="sourceLineNo">103</span> /**<a name="line.103"></a>
-<span class="sourceLineNo">104</span> * This data member must be persisted. Expectation is that it is done by subclasses in their<a name="line.104"></a>
-<span class="sourceLineNo">105</span> * {@link #serializeStateData(ProcedureStateSerializer)} call, restoring {@link #regionInfo}<a name="line.105"></a>
-<span class="sourceLineNo">106</span> * in their {@link #deserializeStateData(ProcedureStateSerializer)} method.<a name="line.106"></a>
-<span class="sourceLineNo">107</span> */<a name="line.107"></a>
-<span class="sourceLineNo">108</span> private RegionInfo regionInfo;<a name="line.108"></a>
-<span class="sourceLineNo">109</span><a name="line.109"></a>
-<span class="sourceLineNo">110</span> /**<a name="line.110"></a>
-<span class="sourceLineNo">111</span> * Like {@link #regionInfo}, the expectation is that subclasses persist the value of this<a name="line.111"></a>
-<span class="sourceLineNo">112</span> * data member. It is used doing backoff when Procedure gets stuck.<a name="line.112"></a>
-<span class="sourceLineNo">113</span> */<a name="line.113"></a>
-<span class="sourceLineNo">114</span> private int attempt;<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span> private volatile boolean lock = false;<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span> // Required by the Procedure framework to create the procedure on replay<a name="line.118"></a>
-<span class="sourceLineNo">119</span> public RegionTransitionProcedure() {}<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span> public RegionTransitionProcedure(final RegionInfo regionInfo) {<a name="line.121"></a>
-<span class="sourceLineNo">122</span> this.regionInfo = regionInfo;<a name="line.122"></a>
-<span class="sourceLineNo">123</span> }<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span> @VisibleForTesting<a name="line.125"></a>
-<span class="sourceLineNo">126</span> public RegionInfo getRegionInfo() {<a name="line.126"></a>
-<span class="sourceLineNo">127</span> return regionInfo;<a name="line.127"></a>
-<span class="sourceLineNo">128</span> }<a name="line.128"></a>
-<span class="sourceLineNo">129</span><a name="line.129"></a>
-<span class="sourceLineNo">130</span> /**<a name="line.130"></a>
-<span class="sourceLineNo">131</span> * This setter is for subclasses to call in their<a name="line.131"></a>
-<span class="sourceLineNo">132</span> * {@link #deserializeStateData(ProcedureStateSerializer)} method. Expectation is that<a name="line.132"></a>
-<span class="sourceLineNo">133</span> * subclasses will persist `regioninfo` in their<a name="line.133"></a>
-<span class="sourceLineNo">134</span> * {@link #serializeStateData(ProcedureStateSerializer)} method and then restore `regionInfo` on<a name="line.134"></a>
-<span class="sourceLineNo">135</span> * deserialization by calling.<a name="line.135"></a>
-<span class="sourceLineNo">136</span> */<a name="line.136"></a>
-<span class="sourceLineNo">137</span> protected void setRegionInfo(final RegionInfo regionInfo) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span> this.regionInfo = regionInfo;<a name="line.138"></a>
-<span class="sourceLineNo">139</span> }<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span> /**<a name="line.141"></a>
-<span class="sourceLineNo">142</span> * This setter is for subclasses to call in their<a name="line.142"></a>
-<span class="sourceLineNo">143</span> * {@link #deserializeStateData(ProcedureStateSerializer)} method.<a name="line.143"></a>
-<span class="sourceLineNo">144</span> * @see #setRegionInfo(RegionInfo)<a name="line.144"></a>
-<span class="sourceLineNo">145</span> */<a name="line.145"></a>
-<span class="sourceLineNo">146</span> protected void setAttempt(int attempt) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span> this.attempt = attempt;<a name="line.147"></a>
-<span class="sourceLineNo">148</span> }<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span> protected int getAttempt() {<a name="line.150"></a>
-<span class="sourceLineNo">151</span> return this.attempt;<a name="line.151"></a>
-<span class="sourceLineNo">152</span> }<a name="line.152"></a>
-<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span> @Override<a name="line.154"></a>
-<span class="sourceLineNo">155</span> public TableName getTableName() {<a name="line.155"></a>
-<span class="sourceLineNo">156</span> RegionInfo hri = getRegionInfo();<a name="line.156"></a>
-<span class="sourceLineNo">157</span> return hri != null? hri.getTable(): null;<a name="line.157"></a>
-<span class="sourceLineNo">158</span> }<a name="line.158"></a>
-<span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span> public boolean isMeta() {<a name="line.160"></a>
-<span class="sourceLineNo">161</span> return TableName.isMetaTableName(getTableName());<a name="line.161"></a>
-<span class="sourceLineNo">162</span> }<a name="line.162"></a>
-<span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span> @Override<a name="line.164"></a>
-<span class="sourceLineNo">165</span> public void toStringClassDetails(final StringBuilder sb) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span> sb.append(getClass().getSimpleName());<a name="line.166"></a>
-<span class="sourceLineNo">167</span> sb.append(" table=");<a name="line.167"></a>
-<span class="sourceLineNo">168</span> sb.append(getTableName());<a name="line.168"></a>
-<span class="sourceLineNo">169</span> sb.append(", region=");<a name="line.169"></a>
-<span class="sourceLineNo">170</span> sb.append(getRegionInfo() == null? null: getRegionInfo().getEncodedName());<a name="line.170"></a>
-<span class="sourceLineNo">171</span> }<a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span> public RegionStateNode getRegionState(final MasterProcedureEnv env) {<a name="line.173"></a>
-<span class="sourceLineNo">174</span> return env.getAssignmentManager().getRegionStates().getOrCreateRegionStateNode(getRegionInfo());<a name="line.174"></a>
-<span class="sourceLineNo">175</span> }<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span> void setTransitionState(final RegionTransitionState state) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span> this.transitionState = state;<a name="line.178"></a>
-<span class="sourceLineNo">179</span> }<a name="line.179"></a>
-<span class="sourceLineNo">180</span><a name="line.180"></a>
-<span class="sourceLineNo">181</span> RegionTransitionState getTransitionState() {<a name="line.181"></a>
-<span class="sourceLineNo">182</span> return transitionState;<a name="line.182"></a>
-<span class="sourceLineNo">183</span> }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span> protected abstract boolean startTransition(MasterProcedureEnv env, RegionStateNode regionNode)<a name="line.185"></a>
-<span class="sourceLineNo">186</span> throws IOException, ProcedureSuspendedException;<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span> /**<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * Called when the Procedure is in the REGION_TRANSITION_DISPATCH state.<a name="line.189"></a>
-<span class="sourceLineNo">190</span> * In here we do the RPC call to OPEN/CLOSE the region. The suspending of<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * the thread so it sleeps until it gets update that the OPEN/CLOSE has<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * succeeded is complicated. Read the implementations to learn more.<a name="line.192"></a>
-<span class="sourceLineNo">193</span> */<a name="line.193"></a>
-<span class="sourceLineNo">194</span> protected abstract boolean updateTransition(MasterProcedureEnv env, RegionStateNode regionNode)<a name="line.194"></a>
-<span class="sourceLineNo">195</span> throws IOException, ProcedureSuspendedException;<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span> protected abstract void finishTransition(MasterProcedureEnv env, RegionStateNode regionNode)<a name="line.197"></a>
-<span class="sourceLineNo">198</span> throws IOException, ProcedureSuspendedException;<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span> protected abstract void reportTransition(MasterProcedureEnv env,<a name="line.200"></a>
-<span class="sourceLineNo">201</span> RegionStateNode regionNode, TransitionCode code, long seqId) throws UnexpectedStateException;<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span> @Override<a name="line.203"></a>
-<span class="sourceLineNo">204</span> public abstract RemoteOperation remoteCallBuild(MasterProcedureEnv env, ServerName serverName);<a name="line.204"></a>
-<span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span> /**<a name="line.206"></a>
-<span class="sourceLineNo">207</span> * @return True if processing of fail is complete; the procedure will be woken from its suspend<a name="line.207"></a>
-<span class="sourceLineNo">208</span> * and we'll go back to running through procedure steps:<a name="line.208"></a>
-<span class="sourceLineNo">209</span> * otherwise if false we leave the procedure in suspended state.<a name="line.209"></a>
-<span class="sourceLineNo">210</span> */<a name="line.210"></a>
-<span class="sourceLineNo">211</span> protected abstract boolean remoteCallFailed(MasterProcedureEnv env,<a name="line.211"></a>
-<span class="sourceLineNo">212</span> RegionStateNode regionNode, IOException exception);<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span> @Override<a name="line.214"></a>
-<span class="sourceLineNo">215</span> public void remoteCallFailed(final MasterProcedureEnv env,<a name="line.215"></a>
-<span class="sourceLineNo">216</span> final ServerName serverName, final IOException exception) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span> final RegionStateNode regionNode = getRegionState(env);<a name="line.217"></a>
-<span class="sourceLineNo">218</span> String msg = exception.getMessage() == null? exception.getClass().getSimpleName():<a name="line.218"></a>
-<span class="sourceLineNo">219</span> exception.getMessage();<a name="line.219"></a>
-<span class="sourceLineNo">220</span> LOG.warn("Remote call failed " + this + "; " + regionNode.toShortString() +<a name="line.220"></a>
-<span class="sourceLineNo">221</span> "; exception=" + msg);<a name="line.221"></a>
-<span class="sourceLineNo">222</span> if (remoteCallFailed(env, regionNode, exception)) {<a name="line.222"></a>
-<span class="sourceLineNo">223</span> // NOTE: This call to wakeEvent puts this Procedure back on the scheduler.<a name="line.223"></a>
-<span class="sourceLineNo">224</span> // Thereafter, another Worker can be in here so DO NOT MESS WITH STATE beyond<a name="line.224"></a>
-<span class="sourceLineNo">225</span> // this method. Just get out of this current processing quickly.<a name="line.225"></a>
-<span class="sourceLineNo">226</span> regionNode.getProcedureEvent().wake(env.getProcedureScheduler());<a name="line.226"></a>
-<span class="sourceLineNo">227</span> }<a name="line.227"></a>
-<span class="sourceLineNo">228</span> // else leave the procedure in suspended state; it is waiting on another call to this callback<a name="line.228"></a>
-<span class="sourceLineNo">229</span> }<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span> /**<a name="line.231"></a>
-<span class="sourceLineNo">232</span> * Be careful! At the end of this method, the procedure has either succeeded<a name="line.232"></a>
-<span class="sourceLineNo">233</span> * and this procedure has been set into a suspended state OR, we failed and<a name="line.233"></a>
-<span class="sourceLineNo">234</span> * this procedure has been put back on the scheduler ready for another worker<a name="line.234"></a>
-<span class="sourceLineNo">235</span> * to pick it up. In both cases, we need to exit the current Worker processing<a name="line.235"></a>
-<span class="sourceLineNo">236</span> * immediately!<a name="line.236"></a>
-<span class="sourceLineNo">237</span> * @return True if we successfully dispatched the call and false if we failed;<a name="line.237"></a>
-<span class="sourceLineNo">238</span> * if failed, we need to roll back any setup done for the dispatch.<a name="line.238"></a>
-<span class="sourceLineNo">239</span> */<a name="line.239"></a>
-<span class="sourceLineNo">240</span> protected boolean addToRemoteDispatcher(final MasterProcedureEnv env,<a name="line.240"></a>
-<span class="sourceLineNo">241</span> final ServerName targetServer) {<a name="line.241"></a>
-<span class="sourceLineNo">242</span> assert targetServer == null || targetServer.equals(getRegionState(env).getRegionLocation()):<a name="line.242"></a>
-<span class="sourceLineNo">243</span> "targetServer=" + targetServer + " getRegionLocation=" +<a name="line.243"></a>
-<span class="sourceLineNo">244</span> getRegionState(env).getRegionLocation(); // TODO<a name="line.244"></a>
-<span class="sourceLineNo">245</span><a name="line.245"></a>
-<span class="sourceLineNo">246</span> LOG.info("Dispatch " + this + "; " + getRegionState(env).toShortString());<a name="line.246"></a>
-<span class="sourceLineNo">247</span><a name="line.247"></a>
-<span class="sourceLineNo">248</span> // Put this procedure into suspended mode to wait on report of state change<a name="line.248"></a>
-<span class="sourceLineNo">249</span> // from remote regionserver. Means Procedure associated ProcedureEvent is marked not 'ready'.<a name="line.249"></a>
-<span class="sourceLineNo">250</span> getRegionState(env).getProcedureEvent().suspend();<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span> // Tricky because the below call to addOperationToNode can fail. If it fails, we need to<a name="line.252"></a>
-<span class="sourceLineNo">253</span> // backtrack on stuff like the 'suspend' done above -- tricky as the 'wake' requests us -- and<a name="line.253"></a>
-<span class="sourceLineNo">254</span> // ditto up in the caller; it needs to undo state changes. Inside in remoteCallFailed, it does<a name="line.254"></a>
-<span class="sourceLineNo">255</span> // wake to undo the above suspend.<a name="line.255"></a>
-<span class="sourceLineNo">256</span> if (!env.getRemoteDispatcher().addOperationToNode(targetServer, this)) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span> remoteCallFailed(env, targetServer,<a name="line.257"></a>
-<span class="sourceLineNo">258</span> new FailedRemoteDispatchException(this + " to " + targetServer));<a name="line.258"></a>
-<span class="sourceLineNo">259</span> return false;<a name="line.259"></a>
-<span class="sourceLineNo">260</span> }<a name="line.260"></a>
-<span class="sourceLineNo">261</span> return true;<a name="line.261"></a>
-<span class="sourceLineNo">262</span> }<a name="line.262"></a>
-<span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span> protected void reportTransition(final MasterProcedureEnv env, final ServerName serverName,<a name="line.264"></a>
-<span class="sourceLineNo">265</span> final TransitionCode code, final long seqId) throws UnexpectedStateException {<a name="line.265"></a>
-<span class="sourceLineNo">266</span> final RegionStateNode regionNode = getRegionState(env);<a name="line.266"></a>
-<span class="sourceLineNo">267</span> if (LOG.isDebugEnabled()) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span> LOG.debug("Received report " + code + " seqId=" + seqId + ", " +<a name="line.268"></a>
-<span class="sourceLineNo">269</span> this + "; " + regionNode.toShortString());<a name="line.269"></a>
-<span class="sourceLineNo">270</span> }<a name="line.270"></a>
-<span class="sourceLineNo">271</span> if (!serverName.equals(regionNode.getRegionLocation())) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span> if (isMeta() && regionNode.getRegionLocation() == null) {<a name="line.272"></a>
-<span class="sourceLineNo">273</span> regionNode.setRegionLocation(serverName);<a name="line.273"></a>
-<span class="sourceLineNo">274</span> } else {<a name="line.274"></a>
-<span class="sourceLineNo">275</span> throw new UnexpectedStateException(String.format(<a name="line.275"></a>
-<span class="sourceLineNo">276</span> "Unexpected state=%s from server=%s; expected server=%s; %s; %s",<a name="line.276"></a>
-<span class="sourceLineNo">277</span> code, serverName, regionNode.getRegionLocation(),<a name="line.277"></a>
-<span class="sourceLineNo">278</span> this, regionNode.toShortString()));<a name="line.278"></a>
-<span class="sourceLineNo">279</span> }<a name="line.279"></a>
-<span class="sourceLineNo">280</span> }<a name="line.280"></a>
-<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span> reportTransition(env, regionNode, code, seqId);<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span> // NOTE: This call adds this procedure back on the scheduler.<a name="line.284"></a>
-<span class="sourceLineNo">285</span> // This makes it so this procedure can run again. Another worker will take<a name="line.285"></a>
-<span class="sourceLineNo">286</span> // processing to the next stage. At an extreme, the other worker may run in<a name="line.286"></a>
-<span class="sourceLineNo">287</span> // parallel so DO NOT CHANGE any state hereafter! This should be last thing<a name="line.287"></a>
-<span class="sourceLineNo">288</span> // done in this processing step.<a name="line.288"></a>
-<span class="sourceLineNo">289</span> regionNode.getProcedureEvent().wake(env.getProcedureScheduler());<a name="line.289"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.procedure2.FailedRemoteDispatchException;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteOperation;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureException;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionState;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.slf4j.Logger;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.slf4j.LoggerFactory;<a name="line.43"></a>
+<span class="sourceLineNo">044</span><a name="line.44"></a>
+<span class="sourceLineNo">045</span>/**<a name="line.45"></a>
+<span class="sourceLineNo">046</span> * Base class for the Assign and Unassign Procedure.<a name="line.46"></a>
+<span class="sourceLineNo">047</span> *<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * Locking:<a name="line.48"></a>
+<span class="sourceLineNo">049</span> * Takes exclusive lock on the region being assigned/unassigned. Thus, there can only be one<a name="line.49"></a>
+<span class="sourceLineNo">050</span> * RegionTransitionProcedure per region running at a time (see MasterProcedureScheduler).<a name="line.50"></a>
+<span class="sourceLineNo">051</span> *<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * <p>This procedure is asynchronous and responds to external events.<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * The AssignmentManager will notify this procedure when the RS completes<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * the operation and reports the transitioned state<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * (see the Assign and Unassign class for more detail).</p><a name="line.55"></a>
+<span class="sourceLineNo">056</span> *<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * <p>Procedures move from the REGION_TRANSITION_QUEUE state when they are<a name="line.57"></a>
+<span class="sourceLineNo">058</span> * first submitted, to the REGION_TRANSITION_DISPATCH state when the request<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * to remote server is sent and the Procedure is suspended waiting on external<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * event to be woken again. Once the external event is triggered, Procedure<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * moves to the REGION_TRANSITION_FINISH state.</p><a name="line.61"></a>
+<span class="sourceLineNo">062</span> *<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * <p>NOTE: {@link AssignProcedure} and {@link UnassignProcedure} should not be thought of<a name="line.63"></a>
+<span class="sourceLineNo">064</span> * as being asymmetric, at least currently.<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * <ul><a name="line.65"></a>
+<span class="sourceLineNo">066</span> * <li>{@link AssignProcedure} moves through all the above described states and implements methods<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * associated with each while {@link UnassignProcedure} starts at state<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * REGION_TRANSITION_DISPATCH and state REGION_TRANSITION_QUEUE is not supported.</li><a name="line.68"></a>
+<span class="sourceLineNo">069</span> *<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * <li>When any step in {@link AssignProcedure} fails, failure handler<a name="line.70"></a>
+<span class="sourceLineNo">071</span> * AssignProcedure#handleFailure(MasterProcedureEnv, RegionStateNode) re-attempts the<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * assignment by setting the procedure state to REGION_TRANSITION_QUEUE and forces<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * assignment to a different target server by setting {@link AssignProcedure#forceNewPlan}. When<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * the number of attempts reaches threshold configuration 'hbase.assignment.maximum.attempts',<a name="line.74"></a>
+<span class="sourceLineNo">075</span> * the procedure is aborted. For {@link UnassignProcedure}, similar re-attempts are<a name="line.75"></a>
+<span class="sourceLineNo">076</span> * intentionally not implemented. It is a 'one shot' procedure. See its class doc for how it<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * handles failure.<a name="line.77"></a>
+<span class="sourceLineNo">078</span> * </li><a name="line.78"></a>
+<span class="sourceLineNo">079</span> * <li>If we find a region in an 'unexpected' state, we'll complain and retry with backoff forever.<a name="line.79"></a>
+<span class="sourceLineNo">080</span> * The 'unexpected' state needs to be fixed either by another running Procedure or by operator<a name="line.80"></a>
+<span class="sourceLineNo">081</span> * intervention (Regions in 'unexpected' state indicates bug or unexpected transition type).<a name="line.81"></a>
+<span class="sourceLineNo">082</span> * For this to work, subclasses need to persist the 'attempt' counter kept in this class when<a name="line.82"></a>
+<span class="sourceLineNo">083</span> * they do serializeStateData and restore it inside their deserializeStateData, just as they do<a name="line.83"></a>
+<span class="sourceLineNo">084</span> * for {@link #regionInfo}.<a name="line.84"></a>
+<span class="sourceLineNo">085</span> * </li><a name="line.85"></a>
+<span class="sourceLineNo">086</span> * </ul><a name="line.86"></a>
+<span class="sourceLineNo">087</span> * </p><a name="line.87"></a>
+<span class="sourceLineNo">088</span> *<a name="line.88"></a>
+<span class="sourceLineNo">089</span> * <p>TODO: Considering it is a priority doing all we can to get make a region available as soon as<a name="line.89"></a>
+<span class="sourceLineNo">090</span> * possible, re-attempting with any target makes sense if specified target fails in case of<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * {@link AssignProcedure}. For {@link UnassignProcedure}, our concern is preventing data loss<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * on failed unassign. See class doc for explanation.<a name="line.92"></a>
+<span class="sourceLineNo">093</span> */<a name="line.93"></a>
+<span class="sourceLineNo">094</span>@InterfaceAudience.Private<a name="line.94"></a>
+<span class="sourceLineNo">095</span>public abstract class RegionTransitionProcedure<a name="line.95"></a>
+<span class="sourceLineNo">096</span> extends Procedure<MasterProcedureEnv><a name="line.96"></a>
+<span class="sourceLineNo">097</span> implements TableProcedureInterface,<a name="line.97"></a>
+<span class="sourceLineNo">098</span> RemoteProcedure<MasterProcedureEnv, ServerName> {<a name="line.98"></a>
+<span class="sourceLineNo">099</span> private static final Logger LOG = LoggerFactory.getLogger(RegionTransitionProcedure.class);<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span> protected final AtomicBoolean aborted = new AtomicBoolean(false);<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span> private RegionTransitionState transitionState = RegionTransitionState.REGION_TRANSITION_QUEUE;<a name="line.103"></a>
+<span class="sourceLineNo">104</span> /**<a name="line.104"></a>
+<span class="sourceLineNo">105</span> * This data member must be persisted. Expectation is that it is done by subclasses in their<a name="line.105"></a>
+<span class="sourceLineNo">106</span> * {@link #serializeStateData(ProcedureStateSerializer)} call, restoring {@link #regionInfo}<a name="line.106"></a>
+<span class="sourceLineNo">107</span> * in their {@link #deserializeStateData(ProcedureStateSerializer)} method.<a name="line.107"></a>
+<span class="sourceLineNo">108</span> */<a name="line.108"></a>
+<span class="sourceLineNo">109</span> private RegionInfo regionInfo;<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span> /**<a name="line.111"></a>
+<span class="sourceLineNo">112</span> * Like {@link #regionInfo}, the expectation is that subclasses persist the value of this<a name="line.112"></a>
+<span class="sourceLineNo">113</span> * data member. It is used doing backoff when Procedure gets stuck.<a name="line.113"></a>
+<span class="sourceLineNo">114</span> */<a name="line.114"></a>
+<span class="sourceLineNo">115</span> private int attempt;<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span> private volatile boolean lock = false;<a name="line.117"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span> // Required by the Procedure framework to create the procedure on replay<a name="line.119"></a>
+<span class="sourceLineNo">120</span> public RegionTransitionProcedure() {}<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span> public RegionTransitionProcedure(final RegionInfo regionInfo) {<a name="line.122"></a>
+<span class="sourceLineNo">123</span> this.regionInfo = regionInfo;<a name="line.123"></a>
+<span class="sourceLineNo">124</span> }<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span> @VisibleForTesting<a name="line.126"></a>
+<span class="sourceLineNo">127</span> public RegionInfo getRegionInfo() {<a name="line.127"></a>
+<span class="sourceLineNo">128</span> return regionInfo;<a name="line.128"></a>
+<span class="sourceLineNo">129</span> }<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span> /**<a name="line.131"></a>
+<span class="sourceLineNo">132</span> * This setter is for subclasses to call in their<a name="line.132"></a>
+<span class="sourceLineNo">133</span> * {@link #deserializeStateData(ProcedureStateSerializer)} method. Expectation is that<a name="line.133"></a>
+<span class="sourceLineNo">134</span> * subclasses will persist `regioninfo` in their<a name="line.134"></a>
+<span class="sourceLineNo">135</span> * {@link #serializeStateData(ProcedureStateSerializer)} method and then restore `regionInfo` on<a name="line.135"></a>
+<span class="sourceLineNo">136</span> * deserialization by calling.<a name="line.136"></a>
+<span class="sourceLineNo">137</span> */<a name="line.137"></a>
+<span class="sourceLineNo">138</span> protected void setRegionInfo(final RegionInfo regionInfo) {<a name="line.138"></a>
+<span class="sourceLineNo">139</span> this.regionInfo = regionInfo;<a name="line.139"></a>
+<span class="sourceLineNo">140</span> }<a name="line.140"></a>
+<span class="sourceLineNo">141</span><a name="line.141"></a>
+<span class="sourceLineNo">142</span> /**<a name="line.142"></a>
+<span class="sourceLineNo">143</span> * This setter is for subclasses to call in their<a name="line.143"></a>
+<span class="sourceLineNo">144</span> * {@link #deserializeStateData(ProcedureStateSerializer)} method.<a name="line.144"></a>
+<span class="sourceLineNo">145</span> * @see #setRegionInfo(RegionInfo)<a name="line.145"></a>
+<span class="sourceLineNo">146</span> */<a name="line.146"></a>
+<span class="sourceLineNo">147</span> protected void setAttempt(int attempt) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span> this.attempt = attempt;<a name="line.148"></a>
+<span class="sourceLineNo">149</span> }<a name="line.149"></a>
+<span class="sourceLineNo">150</span><a name="line.150"></a>
+<span class="sourceLineNo">151</span> protected int getAttempt() {<a name="line.151"></a>
+<span class="sourceLineNo">152</span> return this.attempt;<a name="line.152"></a>
+<span class="sourceLineNo">153</span> }<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span> @Override<a name="line.155"></a>
+<span class="sourceLineNo">156</span> public TableName getTableName() {<a name="line.156"></a>
+<span class="sourceLineNo">157</span> RegionInfo hri = getRegionInfo();<a name="line.157"></a>
+<span class="sourceLineNo">158</span> return hri != null? hri.getTable(): null;<a name="line.158"></a>
+<span class="sourceLineNo">159</span> }<a name="line.159"></a>
+<span class="sourceLineNo">160</span><a name="line.160"></a>
+<span class="sourceLineNo">161</span> public boolean isMeta() {<a name="line.161"></a>
+<span class="sourceLineNo">162</span> return TableName.isMetaTableName(getTableName());<a name="line.162"></a>
+<span class="sourceLineNo">163</span> }<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span> @Override<a name="line.165"></a>
+<span class="sourceLineNo">166</span> public void toStringClassDetails(final StringBuilder sb) {<a name="line.166"></a>
+<span class="sourceLineNo">167</span> sb.append(getClass().getSimpleName());<a name="line.167"></a>
+<span class="sourceLineNo">168</span> sb.append(" table=");<a name="line.168"></a>
+<span class="sourceLineNo">169</span> sb.append(getTableName());<a name="line.169"></a>
+<span class="sourceLineNo">170</span> sb.append(", region=");<a name="line.170"></a>
+<span class="sourceLineNo">171</span> sb.append(getRegionInfo() == null? null: getRegionInfo().getEncodedName());<a name="line.171"></a>
+<span class="sourceLineNo">172</span> }<a name="line.172"></a>
+<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">174</span> public RegionStateNode getRegionState(final MasterProcedureEnv env) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span> return env.getAssignmentManager().getRegionStates().getOrCreateRegionStateNode(getRegionInfo());<a name="line.175"></a>
+<span class="sourceLineNo">176</span> }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span> void setTransitionState(final RegionTransitionState state) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span> this.transitionState = state;<a name="line.179"></a>
+<span class="sourceLineNo">180</span> }<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span> RegionTransitionState getTransitionState() {<a name="line.182"></a>
+<span class="sourceLineNo">183</span> return transitionState;<a name="line.183"></a>
+<span class="sourceLineNo">184</span> }<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span> protected abstract boolean startTransition(MasterProcedureEnv env, RegionStateNode regionNode)<a name="line.186"></a>
+<span class="sourceLineNo">187</span> throws IOException, ProcedureSuspendedException;<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span> /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * Called when the Procedure is in the REGION_TRANSITION_DISPATCH state.<a name="line.190"></a>
+<span class="sourceLineNo">191</span> * In here we do the RPC call to OPEN/CLOSE the region. The suspending of<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * the thread so it sleeps until it gets update that the OPEN/CLOSE has<a name="line.192"></a>
+<span class="sourceLineNo">193</span> * succeeded is complicated. Read the implementations to learn more.<a name="line.193"></a>
+<span class="sourceLineNo">194</span> */<a name="line.194"></a>
+<span class="sourceLineNo">195</span> protected abstract boolean updateTransition(MasterProcedureEnv env, RegionStateNode regionNode)<a name="line.195"></a>
+<span class="sourceLineNo">196</span> throws IOException, ProcedureSuspendedException;<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span> protected abstract void finishTransition(MasterProcedureEnv env, RegionStateNode regionNode)<a name="line.198"></a>
+<span class="sourceLineNo">199</span> throws IOException, ProcedureSuspendedException;<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span> protected abstract void reportTransition(MasterProcedureEnv env,<a name="line.201"></a>
+<span class="sourceLineNo">202</span> RegionStateNode regionNode, TransitionCode code, long seqId) throws UnexpectedStateException;<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span> @Override<a name="line.204"></a>
+<span class="sourceLineNo">205</span> public abstract RemoteOperation remoteCallBuild(MasterProcedureEnv env, ServerName serverName);<a name="line.205"></a>
+<span class="sourceLineNo">206</span><a name="line.206"></a>
+<span class="sourceLineNo">207</span> /**<a name="line.207"></a>
+<span class="sourceLineNo">208</span> * @return True if processing of fail is complete; the procedure will be woken from its suspend<a name="line.208"></a>
+<span class="sourceLineNo">209</span> * and we'll go back to running through procedure steps:<a name="line.209"></a>
+<span class="sourceLineNo">210</span> * otherwise if false we leave the procedure in suspended state.<a name="line.210"></a>
+<span class="sourceLineNo">211</span> */<a name="line.211"></a>
+<span class="sourceLineNo">212</span> protected abstract boolean remoteCallFailed(MasterProcedureEnv env,<a name="line.212"></a>
+<span class="sourceLineNo">213</span> RegionStateNode regionNode, IOException exception);<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span> @Override<a name="line.215"></a>
+<span class="sourceLineNo">216</span> public void remoteCallFailed(final MasterProcedureEnv env,<a name="line.216"></a>
+<span class="sourceLineNo">217</span> final ServerName serverName, final IOException exception) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span> final RegionStateNode regionNode = getRegionState(env);<a name="line.218"></a>
+<span class="sourceLineNo">219</span> LOG.warn("Remote call failed {}; {}; {}; exception={}", serverName,<a name="line.219"></a>
+<span class="sourceLineNo">220</span> this, regionNode.toShortString(), exception.getClass().getSimpleName());<a name="line.220"></a>
+<span class="sourceLineNo">221</span> if (remoteCallFailed(env, regionNode, exception)) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span> // NOTE: This call to wakeEvent puts this Procedure back on the scheduler.<a name="line.222"></a>
+<span class="sourceLineNo">223</span> // Thereafter, another Worker can be in here so DO NOT MESS WITH STATE beyond<a name="line.223"></a>
+<span class="sourceLineNo">224</span> // this method. Just get out of this current processing quickly.<a name="line.224"></a>
+<span class="sourceLineNo">225</span> regionNode.getProcedureEvent().wake(env.getProcedureScheduler());<a name="line.225"></a>
+<span class="sourceLineNo">226</span> }<a name="line.226"></a>
+<span class="sourceLineNo">227</span> // else leave the procedure in suspended state; it is waiting on another call to this callback<a name="line.227"></a>
+<span class="sourceLineNo">228</span> }<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span> /**<a name="line.230"></a>
+<span class="sourceLineNo">231</span> * Be careful! At the end of this method, the procedure has either succeeded<a name="line.231"></a>
+<span class="sourceLineNo">232</span> * and this procedure has been set into a suspended state OR, we failed and<a name="line.232"></a>
+<span class="sourceLineNo">233</span> * this procedure has been put back on the scheduler ready for another worker<a name="line.233"></a>
+<span class="sourceLineNo">234</span> * to pick it up. In both cases, we need to exit the current Worker processing<a name="line.234"></a>
+<span class="sourceLineNo">235</span> * immediately!<a name="line.235"></a>
+<span class="sourceLineNo">236</span> * @return True if we successfully dispatched the call and false if we failed;<a name="line.236"></a>
+<span class="sourceLineNo">237</span> * if failed, we need to roll back any setup done for the dispatch.<a name="line.237"></a>
+<span class="sourceLineNo">238</span> */<a name="line.238"></a>
+<span class="sourceLineNo">239</span> protected boolean addToRemoteDispatcher(final MasterProcedureEnv env,<a name="line.239"></a>
+<span class="sourceLineNo">240</span> final ServerName targetServer) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span> LOG.info("Dispatch {}; {}", this, getRegionState(env).toShortString());<a name="line.241"></a>
+<span class="sourceLineNo">242</span><a name="line.242"></a>
+<span class="sourceLineNo">243</span> // Put this procedure into suspended mode to wait on report of state change<a name="line.243"></a>
+<span class="sourceLineNo">244</span> // from remote regionserver. Means Procedure associated ProcedureEvent is marked not 'ready'.<a name="line.244"></a>
+<span class="sourceLineNo">245</span> getRegionState(env).getProcedureEvent().suspend();<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span> // Tricky because the below call to addOperationToNode can fail. If it fails, we need to<a name="line.247"></a>
+<span class="sourceLineNo">248</span> // backtrack on stuff like the 'suspend' done above -- tricky as the 'wake' requests us -- and<a name="line.248"></a>
+<span class="sourceLineNo">249</span> // ditto up in the caller; it needs to undo state changes. Inside in remoteCallFailed, it does<a name="line.249"></a>
+<span class="sourceLineNo">250</span> // wake to undo the above suspend.<a name="line.250"></a>
+<span class="sourceLineNo">251</span> try {<a name="line.251"></a>
+<span class="sourceLineNo">252</span> env.getRemoteDispatcher().addOperationToNode(targetServer, this);<a name="line.252"></a>
+<span class="sourceLineNo">253</span> } catch (FailedRemoteDispatchException frde) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span> remoteCallFailed(env, targetServer, frde);<a name="line.254"></a>
+<span class="sourceLineNo">255</span> return false;<a name="line.255"></a>
+<span class="sourceLineNo">256</span> }<a name="line.256"></a>
+<span class="sourceLineNo">257</span> return true;<a name="line.257"></a>
+<span class="sourceLineNo">258</span> }<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span> protected void reportTransition(final MasterProcedureEnv env, final ServerName serverName,<a name="line.260"></a>
+<span class="sourceLineNo">261</span> final TransitionCode code, final long seqId) throws UnexpectedStateException {<a name="line.261"></a>
+<span class="sourceLineNo">262</span> final RegionStateNode regionNode = getRegionState(env);<a name="line.262"></a>
+<span class="sourceLineNo">263</span> if (LOG.isDebugEnabled()) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span> LOG.debug("Received report " + code + " seqId=" + seqId + ", " +<a name="line.264"></a>
+<span class="sourceLineNo">265</span> this + "; " + regionNode.toShortString());<a name="line.265"></a>
+<span class="sourceLineNo">266</span> }<a name="line.266"></a>
+<span class="sourceLineNo">267</span> if (!serverName.equals(regionNode.getRegionLocation())) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span> if (isMeta() && regionNode.getRegionLocation() == null) {<a name="line.268"></a>
+<span class="sourceLineNo">269</span> regionNode.setRegionLocation(serverName);<a name="line.269"></a>
+<span class="sourceLineNo">270</span> } else {<a name="line.270"></a>
+<span class="sourceLineNo">271</span> throw new UnexpectedStateException(String.format(<a name="line.271"></a>
+<span class="sourceLineNo">272</span> "Unexpected state=%s from server=%s; expected server=%s; %s; %s",<a name="line.272"></a>
+<span class="sourceLineNo">273</span> code, serverName, regionNode.getRegionLocation(),<a name="line.273"></a>
+<span class="sourceLineNo">274</span> this, regionNode.toShortString()));<a name="line.274"></a>
+<span class="sourceLineNo">275</span> }<a name="line.275"></a>
+<span class="sourceLineNo">276</span> }<a name="line.276"></a>
+<span class="sourceLineNo">277</span><a name="line.277"></a>
+<span class="sourceLineNo">278</span> reportTransition(env, regionNode, code, seqId);<a name="line.278"></a>
+<span class="sourceLineNo">279</span><a name="line.279"></a>
+<span class="sourceLineNo">280</span> // NOTE: This call adds this procedure back on the scheduler.<a name="line.280"></a>
+<span class="sourceLineNo">281</span> // This makes it so this procedure can run again. Another worker will take<a name="line.281"></a>
+<span class="sourceLineNo">282</span> // processing to the next stage. At an extreme, the other worker may run in<a name="line.282"></a>
+<span class="sourceLineNo">283</span> // parallel so DO NOT CHANGE any state hereafter! This should be last thing<a name="line.283"></a>
+<span class="sourceLineNo">284</span> // done in this processing step.<a name="line.284"></a>
+<span class="sourceLineNo">285</span> regionNode.getProcedureEvent().wake(env.getProcedureScheduler());<a name="line.285"></a>
+<span class="sourceLineNo">286</span> }<a name="line.286"></a>
+<span class="sourceLineNo">287</span><a name="line.287"></a>
+<span class="sourceLineNo">288</span> protected boolean isServerOnline(final MasterProcedureEnv env, final RegionStateNode regionNode) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span> return isServerOnline(env, regionNode.getRegionLocation());<a name="line.289"></a>
<span class="sourceLineNo">290</span> }<a name="line.290"></a>
<span class="sourceLineNo">291</span><a name="line.291"></a>
-<span class="sourceLineNo">292</span> protected boolean isServerOnline(final MasterProcedureEnv env, final RegionStateNode regionNode) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span> return isServerOnline(env, regionNode.getRegionLocation());<a name="line.293"></a>
+<span class="sourceLineNo">292</span> protected boolean isServerOnline(final MasterProcedureEnv env, final ServerName serverName) {<a name="line.292"></a>
+<span class="sourceLineNo">293</span> return env.getMasterServices().getServerManager().isServerOnline(serverName);<a name="line.293"></a>
<span class="sourceLineNo">294</span> }<a name="line.294"></a>
<span class="sourceLineNo">295</span><a name="line.295"></a>
-<span class="sourceLineNo">296</span> protected boolean isServerOnline(final MasterProcedureEnv env, final ServerName serverName) {<a name="line.296"></a>
-<span class="sourceLineNo">297</span> return env.getMasterServices().getServerManager().isServerOnline(serverName);<a name="line.297"></a>
-<span class="sourceLineNo">298</span> }<a name="line.298"></a>
-<span class="sourceLineNo">299</span><a name="line.299"></a>
-<span class="sourceLineNo">300</span> @Override<a name="line.300"></a>
-<span class="sourceLineNo">301</span> protected void toStringState(StringBuilder builder) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span> super.toStringState(builder);<a name="line.302"></a>
-<span class="sourceLineNo">303</span> RegionTransitionState ts = this.transitionState;<a name="line.303"></a>
-<span class="sourceLineNo">304</span> if (!isFinished() && ts != null) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span> builder.append(":").append(ts);<a name="line.305"></a>
-<span class="sourceLineNo">306</span> }<a name="line.306"></a>
-<span class="sourceLineNo">307</span> }<a name="line.307"></a>
-<span class="sourceLineNo">308</span><a name="line.308"></a>
-<span class="sourceLineNo">309</span> @Override<a name="line.309"></a>
-<span class="sourceLineNo">310</span> protected Procedure[] execute(final MasterProcedureEnv env) throws ProcedureSuspendedException {<a name="line.310"></a>
-<span class="sourceLineNo">311</span> final AssignmentManager am = env.getAssignmentManager();<a name="line.311"></a>
-<span class="sourceLineNo">312</span> final RegionStateNode regionNode = getRegionState(env);<a name="line.312"></a>
-<span class="sourceLineNo">313</span> if (!am.addRegionInTransition(regionNode, this)) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span> String msg = String.format(<a name="line.314"></a>
-<span class="sourceLineNo">315</span> "There is already another procedure running on this region this=%s owner=%s",<a name="line.315"></a>
-<span class="sourceLineNo">316</span> this, regionNode.getProcedure());<a name="line.316"></a>
-<span class="sourceLineNo">317</span> LOG.warn(msg + " " + this + "; " + regionNode.toShortString());<a name="line.317"></a>
-<span class="sourceLineNo">318</span> setAbortFailure(getClass().getSimpleName(), msg);<a name="line.318"></a>
-<span class="sourceLineNo">319</span> return null;<a name="line.319"></a>
-<span class="sourceLineNo">320</span> }<a name="line.320"></a>
-<span class="sourceLineNo">321</span> try {<a name="line.321"></a>
-<span class="sourceLineNo">322</span> boolean retry;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> do {<a name="line.323"></a>
-<span class="sourceLineNo">324</span> retry = false;<a name="line.324"></a>
-<span class="sourceLineNo">325</span> switch (transitionState) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span> case REGION_TRANSITION_QUEUE:<a name="line.326"></a>
-<span class="sourceLineNo">327</span> // 1. push into the AM queue for balancer policy<a name="line.327"></a>
-<span class="sourceLineNo">328</span> if (!startTransition(env, regionNode)) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span> // The operation figured it is done or it aborted; check getException()<a name="line.329"></a>
-<span class="sourceLineNo">330</span> am.removeRegionInTransition(getRegionState(env), this);<a name="line.330"></a>
-<span class="sourceLineNo">331</span> return null;<a name="line.331"></a>
-<span class="sourceLineNo">332</span> }<a name="line.332"></a>
-<span class="sourceLineNo">333</span> transitionState = RegionTransitionState.REGION_TRANSITION_DISPATCH;<a name="line.333"></a>
-<span class="sourceLineNo">334</span> if (regionNode.getProcedureEvent().suspendIfNotReady(this)) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span> // Why this suspend? Because we want to ensure Store happens before proceed?<a name="line.335"></a>
-<span class="sourceLineNo">336</span> throw new ProcedureSuspendedException();<a name="line.336"></a>
-<span class="sourceLineNo">337</span> }<a name="line.337"></a>
-<span class="sourceLineNo">338</span> break;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span> case REGION_TRANSITION_DISPATCH:<a name="line.340"></a>
-<span class="sourceLineNo">341</span> // 2. send the request to the target server<a name="line.341"></a>
-<span class="sourceLineNo">342</span> if (!updateTransition(env, regionNode)) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> // The operation figured it is done or it aborted; check getException()<a name="line.343"></a>
-<span class="sourceLineNo">344</span> am.removeRegionInTransition(regionNode, this);<a name="line.344"></a>
-<span class="sourceLineNo">345</span> return null;<a name="line.345"></a>
+<span class="sourceLineNo">296</span> @Override<a name="line.296"></a>
+<span class="sourceLineNo">297</span> protected void toStringState(StringBuilder builder) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span> super.toStringState(builder);<a name="line.298"></a>
+<span class="sourceLineNo">299</span> RegionTransitionState ts = this.transitionState;<a name="line.299"></a>
+<span class="sourceLineNo">300</span> if (!isFinished() && ts != null) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span> builder.append(":").append(ts);<a name="line.301"></a>
+<span class="sourceLineNo">302</span> }<a name="line.302"></a>
+<span class="sourceLineNo">303</span> }<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span> @Override<a name="line.305"></a>
+<span class="sourceLineNo">306</span> protected Procedure[] execute(final MasterProcedureEnv env) throws ProcedureSuspendedException {<a name="line.306"></a>
+<span class="sourceLineNo">307</span> final AssignmentManager am = env.getAssignmentManager();<a name="line.307"></a>
+<span class="sourceLineNo">308</span> final RegionStateNode regionNode = getRegionState(env);<a name="line.308"></a>
+<span class="sourceLineNo">309</span> if (!am.addRegionInTransition(regionNode, this)) {<a name="line.309"></a>
+<span class="sourceLineNo">310</span> String msg = String.format(<a name="line.310"></a>
+<span class="sourceLineNo">311</span> "There is already another procedure running on this region this=%s owner=%s",<a name="line.311"></a>
+<span class="sourceLineNo">312</span> this, regionNode.getProcedure());<a name="line.312"></a>
+<span class="sourceLineNo">313</span> LOG.warn(msg + " " + this + "; " + regionNode.toShortString());<a name="line.313"></a>
+<span class="sourceLineNo">314</span> setAbortFailure(getClass().getSimpleName(), msg);<a name="line.314"></a>
+<span class="sourceLineNo">315</span> return null;<a name="line.315"></a>
+<span class="sourceLineNo">316</span> }<a name="line.316"></a>
+<span class="sourceLineNo">317</span> try {<a name="line.317"></a>
+<span class="sourceLineNo">318</span> boolean retry;<a name="line.318"></a>
+<span class="sourceLineNo">319</span> do {<a name="line.319"></a>
+<span class="sourceLineNo">320</span> retry = false;<a name="line.320"></a>
+<span class="sourceLineNo">321</span> switch (transitionState) {<a name="line.321"></a>
+<span class="sourceLineNo">322</span> case REGION_TRANSITION_QUEUE:<a name="line.322"></a>
+<span class="sourceLineNo">323</span> // 1. push into the AM queue for balancer policy<a name="line.323"></a>
+<span class="sourceLineNo">324</span> if (!startTransition(env, regionNode)) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span> // The operation figured it is done or it aborted; check getException()<a name="line.325"></a>
+<span class="sourceLineNo">326</span> am.removeRegionInTransition(getRegionState(env), this);<a name="line.326"></a>
+<span class="sourceLineNo">327</span> return null;<a name="line.327"></a>
+<span class="sourceLineNo">328</span> }<a name="line.328"></a>
+<span class="sourceLineNo">329</span> transitionState = RegionTransitionState.REGION_TRANSITION_DISPATCH;<a name="line.329"></a>
+<span class="sourceLineNo">330</span> if (regionNode.getProcedureEvent().suspendIfNotReady(this)) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span> // Why this suspend? Because we want to ensure Store happens before proceed?<a name="line.331"></a>
+<span class="sourceLineNo">332</span> throw new ProcedureSuspendedException();<a name="line.332"></a>
+<span class="sourceLineNo">333</span> }<a name="line.333"></a>
+<span class="sourceLineNo">334</span> break;<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span> case REGION_TRANSITION_DISPATCH:<a name="line.336"></a>
+<span class="sourceLineNo">337</span> // 2. send the request to the target server<a name="line.337"></a>
+<span class="sourceLineNo">338</span> if (!updateTransition(env, regionNode)) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span> // The operation figured it is done or it aborted; check getException()<a name="line.339"></a>
+<span class="sourceLineNo">340</span> am.removeRegionInTransition(regionNode, this);<a name="line.340"></a>
+<span class="sourceLineNo">341</span> return null;<a name="line.341"></a>
+<span class="sourceLineNo">342</span> }<a name="line.342"></a>
+<span class="sourceLineNo">343</span> if (transitionState != RegionTransitionState.REGION_TRANSITION_DISPATCH) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span> retry = true;<a name="line.344"></a>
+<span class="sourceLineNo">345</span> break;<a name="line.345"></a>
<span class="sourceLineNo">346</span> }<a name="line.346"></a>
-<span class="sourceLineNo">347</span> if (transitionState != RegionTransitionState.REGION_TRANSITION_DISPATCH) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span> retry = true;<a name="line.348"></a>
-<span class="sourceLineNo">349</span> break;<a name="line.349"></a>
-<span class="sourceLineNo">350</span> }<a name="line.350"></a>
-<span class="sourceLineNo">351</span> if (regionNode.getProcedureEvent().suspendIfNotReady(this)) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span> throw new ProcedureSuspendedException();<a name="line.352"></a>
-<span class="sourceLineNo">353</span> }<a name="line.353"></a>
-<span class="sourceLineNo">354</span> break;<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span> case REGION_TRANSITION_FINISH:<a name="line.356"></a>
-<span class="sourceLineNo">357</span> // 3. wait assignment response. completion/failure<a name="line.357"></a>
-<span class="sourceLineNo">358</span> LOG.debug("Finishing {}; {}", this, regionNode.toShortString());<a name="line.358"></a>
-<span class="sourceLineNo">359</span> finishTransition(env, regionNode);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> am.removeRegionInTransition(regionNode, this);<a name="line.360"></a>
-<span class="sourceLineNo">361</span> return null;<a name="line.361"></a>
-<span class="sourceLineNo">362</span> }<a name="line.362"></a>
-<span class="sourceLineNo">363</span> } while (retry);<a name="line.363"></a>
-<span class="sourceLineNo">364</span> // If here, success so clear out the attempt counter so we start fresh each time we get stuck.<a name="line.364"></a>
-<span class="sourceLineNo">365</span> this.attempt = 0;<a name="line.365"></a>
-<span class="sourceLineNo">366</span> } catch (IOException e) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span> long backoff = getBackoffTime(this.attempt++);<a name="line.367"></a>
-<span class="sourceLineNo">368</span> LOG.warn("Failed transition, suspend {}secs {}; {}; waiting on rectified condition fixed " +<a name="line.368"></a>
-<span class="sourceLineNo">369</span> "by other Procedure or operator intervention", backoff / 1000, this,<a name="line.369"></a>
-<span class="sourceLineNo">370</span> regionNode.toShortString(), e);<a name="line.370"></a>
-<span class="sourceLineNo">371</span> getRegionState(env).getProcedureEvent().suspend();<a name="line.371"></a>
-<span class="sourceLineNo">372</span> if (getRegionState(env).getProcedureEvent().suspendIfNotReady(this)) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span> setTimeout(Math.toIntExact(backoff));<a name="line.373"></a>
-<span class="sourceLineNo">374</span> setState(ProcedureProtos.ProcedureState.WAITING_TIMEOUT);<a name="line.374"></a>
-<span class="sourceLineNo">375</span> throw new ProcedureSuspendedException();<a name="line.375"></a>
-<span class="sourceLineNo">376</span> }<a name="line.376"></a>
-<span class="sourceLineNo">377</span> }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span> return new Procedure[] {this};<a name="line.379"></a>
-<span class="sourceLineNo">380</span> }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> private long getBackoffTime(int attempts) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span> long backoffTime = (long)(1000 * Math.pow(2, attempts));<a name="line.383"></a>
-<span class="sourceLineNo">384</span> long maxBackoffTime = 60 * 60 * 1000; // An hour. Hard-coded for for now.<a name="line.384"></a>
-<span class="sourceLineNo">385</span> return backoffTime < maxBackoffTime? backoffTime: maxBackoffTime;<a name="line.385"></a>
-<span class="sourceLineNo">386</span> }<a name="line.386"></a>
-<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span> /**<a name="line.388"></a>
-<span class="sourceLineNo">389</span> * At end of timeout, wake ourselves up so we run again.<a name="line.389"></a>
-<span class="sourceLineNo">390</span> */<a name="line.390"></a>
-<span class="sourceLineNo">391</span> @Override<a name="line.391"></a>
-<span class="sourceLineNo">392</span> protected synchronized boolean setTimeoutFailure(MasterProcedureEnv env) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span> setState(ProcedureProtos.ProcedureState.RUNNABLE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> getRegionState(env).getProcedureEvent().wake(env.getProcedureScheduler());<a name="line.394"></a>
-<span class="sourceLineNo">395</span> return false; // 'false' means that this procedure handled the timeout<a name="line.395"></a>
-<span class="sourceLineNo">396</span> }<a name="line.396"></a>
-<span class="sourceLineNo">397</span><a name="line.397"></a>
-<span class="sourceLineNo">398</span> @Override<a name="line.398"></a>
-<span class="sourceLineNo">399</span> protected void rollback(final MasterProcedureEnv env) {<a name="line.399"></a>
-<span class="sourceLineNo">400</span> if (isRollbackSupported(transitionState)) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span> // Nothing done up to this point. abort safely.<a name="line.401"></a>
-<span class="sourceLineNo">402</span> // This should happen when something like disableTable() is triggered.<a name="line.402"></a>
-<span class="sourceLineNo">403</span> env.getAssignmentManager().removeRegionInTransition(getRegionState(env), this);<a name="line.403"></a>
-<span class="sourceLineNo">404</span> return;<a name="line.404"></a>
-<span class="sourceLineNo">405</span> }<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span> // There is no rollback for assignment unless we cancel the operation by<a name="line.407"></a>
-<span class="sourceLineNo">408</span> // dropping/disabling the table.<a name="line.408"></a>
-<span class="sourceLineNo">409</span> throw new UnsupportedOperationException("Unhandled state " + transitionState +<a name="line.409"></a>
-<span class="sourceLineNo">410</span> "; there is no rollback for assignment unless we cancel the operation by " +<a name="line.410"></a>
-<span class="sourceLineNo">411</span> "dropping/disabling the table");<a name="line.411"></a>
-<span class="sourceLineNo">412</span> }<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span> protected abstract boolean isRollbackSupported(final RegionTransitionState state);<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span> @Override<a name="line.416"></a>
-<span class="sourceLineNo">417</span> protected boolean abort(final MasterProcedureEnv env) {<a name="line.417"></a>
-<span class="sourceLineNo">418</span> if (isRollbackSupported(transitionState)) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span> aborted.set(true);<a name="line.419"></a>
-<span class="sourceLineNo">420</span> return true;<a name="line.420"></a>
-<span class="sourceLineNo">421</span> }<a name="line.421"></a>
-<span class="sourceLineNo">422</span> return false;<a name="line.422"></a>
-<span class="sourceLineNo">423</span> }<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span> @Override<a name="line.425"></a>
-<span class="sourceLineNo">426</span> protected LockState acquireLock(final MasterProcedureEnv env) {<a name="line.426"></a>
-<span class="sourceLineNo">427</span> // Unless we are assigning meta, wait for meta to be available and loaded.<a name="line.427"></a>
-<span class="sourceLineNo">428</span> if (!isMeta() && (env.waitFailoverCleanup(this) ||<a name="line.428"></a>
-<span class="sourceLineNo">429</span> env.getAssignmentManager().waitMetaInitialized(this, getRegionInfo()))) {<a name="line.429"></a>
-<span class="sourceLineNo">430</span> return LockState.LOCK_EVENT_WAIT;<a name="line.430"></a>
-<span class="sourceLineNo">431</span> }<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span> // TODO: Revisit this and move it to the executor<a name="line.433"></a>
-<span class="sourceLineNo">434</span> if (env.getProcedureScheduler().waitRegion(this, getRegionInfo())) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span> try {<a name="line.435"></a>
-<span class="sourceLineNo">436</span> LOG.debug(LockState.LOCK_EVENT_WAIT + " pid=" + getProcId() + " " +<a name="line.436"></a>
-<span class="sourceLineNo">437</span> env.getProcedureScheduler().dumpLocks());<a name="line.437"></a>
-<span class="sourceLineNo">438</span> } catch (IOException e) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span> // TODO Auto-generated catch block<a name="line.439"></a>
-<span class="sourceLineNo">440</span> e.printStackTrace();<a name="line.440"></a>
-<span class="sourceLineNo">441</span> }<a name="line.441"></a>
-<span class="sourceLineNo">442</span> return LockState.LOCK_EVENT_WAIT;<a name="line.442"></a>
-<span class="sourceLineNo">443</span> }<a name="line.443"></a>
-<span class="sourceLineNo">444</span> this.lock = true;<a name="line.444"></a>
-<span class="sourceLineNo">445</span> return LockState.LOCK_ACQUIRED;<a name="line.445"></a>
-<span class="sourceLineNo">446</span> }<a name="line.446"></a>
-<span class="sourceLineNo">447</span><a name="line.447"></a>
-<span class="sourceLineNo">448</span> @Override<a name="line.448"></a>
-<span class="sourceLineNo">449</span> protected void releaseLock(final MasterProcedureEnv env) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span> env.getProcedureScheduler().wakeRegion(this, getRegionInfo());<a name="line.450"></a>
-<span class="sourceLineNo">451</span> lock = false;<a name="line.451"></a>
-<span class="sourceLineNo">452</span> }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span> @Override<a name="line.454"></a>
-<span class="sourceLineNo">455</span> protected boolean holdLock(final MasterProcedureEnv env) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span> return true;<a name="line.456"></a>
-<span class="sourceLineNo">457</span> }<a name="line.457"></a>
-<span class="sourceLineNo">458</span><a name="line.458"></a>
-<span class="sourceLineNo">459</span> @Override<a name="line.459"></a>
-<span class="sourceLineNo">460</span> protected boolean hasLock(final MasterProcedureEnv env) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span> return lock;<a name="line.461"></a>
-<span class="sourceLineNo">462</span> }<a name="line.462"></a>
-<span class="sourceLineNo">463</span><a name="line.463"></a>
-<span class="sourceLineNo">464</span> @Override<a name="line.464"></a>
-<span class="sourceLineNo">465</span> protected boolean shouldWaitClientAck(MasterProcedureEnv env) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span> // The operation is triggered internally on the server<a name="line.466"></a>
-<span class="sourceLineNo">467</span> // the client does not know about this procedure.<a name="line.467"></a>
-<span class="sourceLineNo">468</span> return false;<a name="line.468"></a>
-<span class="sourceLineNo">469</span> }<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span> /**<a name="line.471"></a>
-<span class="sourceLineNo">472</span> * Used by ServerCrashProcedure to see if this Assign/Unassign needs processing.<a name="line.472"></a>
-<span class="sourceLineNo">473</span> * @return ServerName the Assign or Unassign is going against.<a name="line.473"></a>
-<span class="sourceLineNo">474</span> */<a name="line.474"></a>
-<span class="sourceLineNo">475</span> public abstract ServerName getServer(final MasterProcedureEnv env);<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span> @Override<a name="line.477"></a>
-<span class="sourceLineNo">478</span> public void remoteOperationCompleted(MasterProcedureEnv env) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> // should not be called for region operation until we modified the open/close region procedure<a name="line.479"></a>
-<span class="sourceLineNo">480</span> throw new UnsupportedOperationException();<a name="line.480"></a>
-<span class="sourceLineNo">481</span> }<a name="line.481"></a>
-<span class="sourceLineNo">482</span><a name="line.482"></a>
-<span class="sourceLineNo">483</span> @Override<a name="line.483"></a>
-<span class="sourceLineNo">484</span> public void remoteOperationFailed(MasterProcedureEnv env, RemoteProcedureException error) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span> // should not be called for region operation until we modified the open/close region procedure<a name="line.485"></a>
-<span class="sourceLineNo">486</span> throw new UnsupportedOperationException();<a name="line.486"></a>
-<span class="sourceLineNo">487</span> }<a name="line.487"></a>
-<span class="sourceLineNo">488</span>}<a name="line.488"></a>
+<span class="sourceLineNo">347</span> if (regionNode.getProcedureEvent().suspendIfNotReady(this)) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span> throw new ProcedureSuspendedException();<a name="line.348"></a>
+<span class="sourceLineNo">349</span> }<a name="line.349"></a>
+<span class="sourceLineNo">350</span> break;<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span> case REGION_TRANSITION_FINISH:<a name="line.352"></a>
+<span class="sourceLineNo">353</span> // 3. wait assignment response. completion/failure<a name="line.353"></a>
+<span class="sourceLineNo">354</span> LOG.debug("Finishing {}; {}", this, regionNode.toShortString());<a name="line.354"></a>
+<span class="sourceLineNo">355</span> finishTransition(env, regionNode);<a name="line.355"></a>
+<span class="sourceLineNo">356</span> am.removeRegionInTransition(regionNode, this);<a name="line.356"></a>
+<span class="sourceLineNo">357</span> return null;<a name="line.357"></a>
+<span class="sourceLineNo">358</span> }<a name="line.358"></a>
+<span class="sourceLineNo">359</span> } while (retry);<a name="line.359"></a>
+<span class="sourceLineNo">360</span> // If here, success so clear out the attempt counter so we start fresh each time we get stuck.<a name="line.360"></a>
+<span class="sourceLineNo">361</span> this.attempt = 0;<a name="line.361"></a>
+<span class="sourceLineNo">362</span> } catch (IOException e) {<a name="line.362"></a>
+<span class="sourceLineNo">363</span> long backoff = getBackoffTime(this.attempt++);<a name="line.363"></a>
+<span class="sourceLineNo">364</span> LOG.warn("Failed transition, suspend {}secs {}; {}; waiting on rectified condition fixed " +<a name="line.364"></a>
+<span class="sourceLineNo">365</span> "by other Procedure or operator intervention", backoff / 1000, this,<a name="line.365"></a>
+<span class="sourceLineNo">366</span> regionNode.toShortString(), e);<a name="line.366"></a>
+<span class="sourceLineNo">367</span> getRegionState(env).getProcedureEvent().suspend();<a name="line.367"></a>
+<span class="sourceLineNo">368</span> if (getRegionState(env).getProcedureEvent().suspendIfNotReady(this)) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span> setTimeout(Math.toIntExact(backoff));<a name="line.369"></a>
+<span class="sourceLineNo">370</span> setState(ProcedureProtos.ProcedureState.WAITING_TIMEOUT);<a name="line.370"></a>
+<span class="sourceLineNo">371</span> throw new ProcedureSuspendedException();<a name="line.371"></a>
+<span class="sourceLineNo">372</span> }<a name="line.372"></a>
+<span class="sourceLineNo">373</span> }<a name="line.373"></a>
+<span class="sourceLineNo">374</span><a name="line.374"></a>
+<span class="sourceLineNo">375</span> return new Procedure[] {this};<a name="line.375"></a>
+<span class="sourceLineNo">376</span> }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span> private long getBackoffTime(int attempts) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span> long backoffTime = (long)(1000 * Math.pow(2, attempts));<a name="line.379"></a>
+<span class="sourceLineNo">380</span> long maxBackoffTime = 60 * 60 * 1000; // An hour. Hard-coded for for now.<a name="line.380"></a>
+<span class="sourceLineNo">381</span> return backoffTime < maxBackoffTime? backoffTime: maxBackoffTime;<a name="line.381"></a>
+<span class="sourceLineNo">382</span> }<a name="line.382"></a>
+<span class="sourceLineNo">383</span><a name="line.383"></a>
+<span class="sourceLineNo">384</span> /**<a name="line.384"></a>
+<span class="sourceLineNo">385</span> * At end of timeout, wake ourselves up so we run again.<a name="line.385"></a>
+<span class="sourceLineNo">386</span> */<a name="line.386"></a>
+<span class="sourceLineNo">387</span> @Override<a name="line.387"></a>
+<span class="sourceLineNo">388</span> protected synchronized boolean setTimeoutFailure(MasterProcedureEnv env) {<a name="line.388"></a>
+<span class="sourceLineNo">389</span> setState(ProcedureProtos.ProcedureState.RUNNABLE);<a name="line.389"></a>
+<span class="sourceLineNo">390</span> getRegionState(env).getProcedureEvent().wake(env.getProcedureScheduler());<a name="line.390"></a>
+<span class="sourceLineNo">391</span> return false; // 'false' means that this procedure handled the timeout<a name="line.391"></a>
+<span class="sourceLineNo">392</span> }<a name="line.392"></a>
+<span class="sourceLineNo">393</span><a name="line.393"></a>
+<span class="sourceLineNo">394</span> @Override<a name="line.394"></a>
+<span class="sourceLineNo">395</span> protected void rollback(final MasterProcedureEnv env) {<a name="line.395"></a>
+<span class="sourceLineNo">396</span> if (isRollbackSupported(transitionState)) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span> // Nothing done up to this point. abort safely.<a name="line.397"></a>
+<span class="sourceLineNo">398</span> // This should happen when something like disableTable() is triggered.<a name="line.398"></a>
+<span class="sourceLineNo">399</span> env.getAssignmentManager().removeRegionInTransition(getRegionState(env), this);<a name="line.399"></a>
+<span class="sourceLineNo">400</span> return;<a name="line.400"></a>
+<span class="sourceLineNo">401</span> }<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span> // There is no rollback for assignment unless we cancel the operation by<a name="line.403"></a>
+<span class="sourceLineNo">404</span> // dropping/disabling the table.<a name="line.404"></a>
+<span class="sourceLineNo">405</span> throw new UnsupportedOperationException("Unhandled state " + transitionState +<a name="line.405"></a>
+<span class="sourceLineNo">406</span> "; there is no rollback for assignment unless we cancel the operation by " +<a name="line.406"></a>
+<span class="sourceLineNo">407</span> "dropping/disabling the table");<a name="line.407"></a>
+<span class="sourceLineNo">408</span> }<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span> protected abstract boolean isRollbackSupported(final RegionTransitionState state);<a name="line.410"></a>
+<span class="sourceLineNo">411</span><a name="line.411"></a>
+<span class="sourceLineNo">412</span> @Override<a name="line.412"></a>
+<span class="sourceLineNo">413</span> protected boolean abort(final MasterProcedureEnv env) {<a name="line.413"></a>
+<span class="sourceLineNo">414</span> if (isRollbackSupported(transitionState)) {<a name="line.414"></a>
+<span class="sourceLineNo">415</span> aborted.set(true);<a name="line.415"></a>
+<span class="sourceLineNo">416</span> return true;<a name="line.416"></a>
+<span class="sourceLineNo">417</span> }<a name="line.417"></a>
+<span class="sourceLineNo">418</span> return false;<a name="line.418"></a>
+<span class="sourceLineNo">419</span> }<a name="line.419"></a>
+<span class="sourceLineNo">420</span><a name="line.420"></a>
+<span class="sourceLineNo">421</span> @Override<a name="line.421"></a>
+<span class="sourceLineNo">422</span> protected LockState acquireLock(final MasterProcedureEnv
<TRUNCATED>
[16/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateStampComparator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateStampComparator.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateStampComparator.html
index 5420d82..6ea3672 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateStampComparator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateStampComparator.html
@@ -316,687 +316,728 @@
<span class="sourceLineNo">308</span> }<a name="line.308"></a>
<span class="sourceLineNo">309</span> }<a name="line.309"></a>
<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span> public enum ServerState { ONLINE, SPLITTING, OFFLINE }<a name="line.311"></a>
-<span class="sourceLineNo">312</span> public static class ServerStateNode implements Comparable<ServerStateNode> {<a name="line.312"></a>
-<span class="sourceLineNo">313</span> private final ServerReportEvent reportEvent;<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> private final Set<RegionStateNode> regions;<a name="line.315"></a>
-<span class="sourceLineNo">316</span> private final ServerName serverName;<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span> private volatile ServerState state = ServerState.ONLINE;<a name="line.318"></a>
-<span class="sourceLineNo">319</span> private volatile int versionNumber = 0;<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span> public ServerStateNode(final ServerName serverName) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span> this.serverName = serverName;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> this.regions = ConcurrentHashMap.newKeySet();<a name="line.323"></a>
-<span class="sourceLineNo">324</span> this.reportEvent = new ServerReportEvent(serverName);<a name="line.324"></a>
-<span class="sourceLineNo">325</span> }<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> public ServerName getServerName() {<a name="line.327"></a>
-<span class="sourceLineNo">328</span> return serverName;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> }<a name="line.329"></a>
+<span class="sourceLineNo">311</span> /**<a name="line.311"></a>
+<span class="sourceLineNo">312</span> * Server State.<a name="line.312"></a>
+<span class="sourceLineNo">313</span> */<a name="line.313"></a>
+<span class="sourceLineNo">314</span> public enum ServerState {<a name="line.314"></a>
+<span class="sourceLineNo">315</span> /**<a name="line.315"></a>
+<span class="sourceLineNo">316</span> * Initial state. Available.<a name="line.316"></a>
+<span class="sourceLineNo">317</span> */<a name="line.317"></a>
+<span class="sourceLineNo">318</span> ONLINE,<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span> /**<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * Server expired/crashed. Currently undergoing WAL splitting.<a name="line.321"></a>
+<span class="sourceLineNo">322</span> */<a name="line.322"></a>
+<span class="sourceLineNo">323</span> SPLITTING,<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span> /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * WAL splitting done.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> */<a name="line.327"></a>
+<span class="sourceLineNo">328</span> OFFLINE<a name="line.328"></a>
+<span class="sourceLineNo">329</span> }<a name="line.329"></a>
<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> public ServerState getState() {<a name="line.331"></a>
-<span class="sourceLineNo">332</span> return state;<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> public int getVersionNumber() {<a name="line.335"></a>
-<span class="sourceLineNo">336</span> return versionNumber;<a name="line.336"></a>
-<span class="sourceLineNo">337</span> }<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span> public ProcedureEvent<?> getReportEvent() {<a name="line.339"></a>
-<span class="sourceLineNo">340</span> return reportEvent;<a name="line.340"></a>
-<span class="sourceLineNo">341</span> }<a name="line.341"></a>
+<span class="sourceLineNo">331</span> /**<a name="line.331"></a>
+<span class="sourceLineNo">332</span> * State of Server; list of hosted regions, etc.<a name="line.332"></a>
+<span class="sourceLineNo">333</span> */<a name="line.333"></a>
+<span class="sourceLineNo">334</span> public static class ServerStateNode implements Comparable<ServerStateNode> {<a name="line.334"></a>
+<span class="sourceLineNo">335</span> private final ServerReportEvent reportEvent;<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> private final Set<RegionStateNode> regions;<a name="line.337"></a>
+<span class="sourceLineNo">338</span> private final ServerName serverName;<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span> private volatile ServerState state = ServerState.ONLINE;<a name="line.340"></a>
+<span class="sourceLineNo">341</span> private volatile int versionNumber = 0;<a name="line.341"></a>
<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span> public boolean isInState(final ServerState... expected) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span> boolean expectedState = false;<a name="line.344"></a>
-<span class="sourceLineNo">345</span> if (expected != null) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span> for (int i = 0; i < expected.length; ++i) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> expectedState |= (state == expected[i]);<a name="line.347"></a>
-<span class="sourceLineNo">348</span> }<a name="line.348"></a>
-<span class="sourceLineNo">349</span> }<a name="line.349"></a>
-<span class="sourceLineNo">350</span> return expectedState;<a name="line.350"></a>
+<span class="sourceLineNo">343</span> public ServerStateNode(final ServerName serverName) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span> this.serverName = serverName;<a name="line.344"></a>
+<span class="sourceLineNo">345</span> this.regions = ConcurrentHashMap.newKeySet();<a name="line.345"></a>
+<span class="sourceLineNo">346</span> this.reportEvent = new ServerReportEvent(serverName);<a name="line.346"></a>
+<span class="sourceLineNo">347</span> }<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span> public ServerName getServerName() {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> return serverName;<a name="line.350"></a>
<span class="sourceLineNo">351</span> }<a name="line.351"></a>
<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span> public void setState(final ServerState state) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span> this.state = state;<a name="line.354"></a>
+<span class="sourceLineNo">353</span> public ServerState getState() {<a name="line.353"></a>
+<span class="sourceLineNo">354</span> return state;<a name="line.354"></a>
<span class="sourceLineNo">355</span> }<a name="line.355"></a>
<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span> public void setVersionNumber(final int versionNumber) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> this.versionNumber = versionNumber;<a name="line.358"></a>
+<span class="sourceLineNo">357</span> public int getVersionNumber() {<a name="line.357"></a>
+<span class="sourceLineNo">358</span> return versionNumber;<a name="line.358"></a>
<span class="sourceLineNo">359</span> }<a name="line.359"></a>
<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span> public Set<RegionStateNode> getRegions() {<a name="line.361"></a>
-<span class="sourceLineNo">362</span> return regions;<a name="line.362"></a>
+<span class="sourceLineNo">361</span> public ProcedureEvent<?> getReportEvent() {<a name="line.361"></a>
+<span class="sourceLineNo">362</span> return reportEvent;<a name="line.362"></a>
<span class="sourceLineNo">363</span> }<a name="line.363"></a>
<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span> public int getRegionCount() {<a name="line.365"></a>
-<span class="sourceLineNo">366</span> return regions.size();<a name="line.366"></a>
+<span class="sourceLineNo">365</span> public boolean isOffline() {<a name="line.365"></a>
+<span class="sourceLineNo">366</span> return this.state.equals(ServerState.OFFLINE);<a name="line.366"></a>
<span class="sourceLineNo">367</span> }<a name="line.367"></a>
<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span> public ArrayList<RegionInfo> getRegionInfoList() {<a name="line.369"></a>
-<span class="sourceLineNo">370</span> ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(regions.size());<a name="line.370"></a>
-<span class="sourceLineNo">371</span> for (RegionStateNode region: regions) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span> hris.add(region.getRegionInfo());<a name="line.372"></a>
-<span class="sourceLineNo">373</span> }<a name="line.373"></a>
-<span class="sourceLineNo">374</span> return hris;<a name="line.374"></a>
-<span class="sourceLineNo">375</span> }<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span> public void addRegion(final RegionStateNode regionNode) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span> this.regions.add(regionNode);<a name="line.378"></a>
-<span class="sourceLineNo">379</span> }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span> public void removeRegion(final RegionStateNode regionNode) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span> this.regions.remove(regionNode);<a name="line.382"></a>
-<span class="sourceLineNo">383</span> }<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public int compareTo(final ServerStateNode other) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> return getServerName().compareTo(other.getServerName());<a name="line.387"></a>
-<span class="sourceLineNo">388</span> }<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span> @Override<a name="line.390"></a>
-<span class="sourceLineNo">391</span> public int hashCode() {<a name="line.391"></a>
-<span class="sourceLineNo">392</span> return getServerName().hashCode();<a name="line.392"></a>
+<span class="sourceLineNo">369</span> public boolean isInState(final ServerState... expected) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span> boolean expectedState = false;<a name="line.370"></a>
+<span class="sourceLineNo">371</span> if (expected != null) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span> for (int i = 0; i < expected.length; ++i) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> expectedState |= (state == expected[i]);<a name="line.373"></a>
+<span class="sourceLineNo">374</span> }<a name="line.374"></a>
+<span class="sourceLineNo">375</span> }<a name="line.375"></a>
+<span class="sourceLineNo">376</span> return expectedState;<a name="line.376"></a>
+<span class="sourceLineNo">377</span> }<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span> public void setState(final ServerState state) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span> this.state = state;<a name="line.380"></a>
+<span class="sourceLineNo">381</span> }<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span> public void setVersionNumber(final int versionNumber) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span> this.versionNumber = versionNumber;<a name="line.384"></a>
+<span class="sourceLineNo">385</span> }<a name="line.385"></a>
+<span class="sourceLineNo">386</span><a name="line.386"></a>
+<span class="sourceLineNo">387</span> public Set<RegionStateNode> getRegions() {<a name="line.387"></a>
+<span class="sourceLineNo">388</span> return regions;<a name="line.388"></a>
+<span class="sourceLineNo">389</span> }<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span> public int getRegionCount() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span> return regions.size();<a name="line.392"></a>
<span class="sourceLineNo">393</span> }<a name="line.393"></a>
<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
-<span class="sourceLineNo">396</span> public boolean equals(final Object other) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span> if (this == other) return true;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> if (!(other instanceof ServerStateNode)) return false;<a name="line.398"></a>
-<span class="sourceLineNo">399</span> return compareTo((ServerStateNode)other) == 0;<a name="line.399"></a>
-<span class="sourceLineNo">400</span> }<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span> @Override<a name="line.402"></a>
-<span class="sourceLineNo">403</span> public String toString() {<a name="line.403"></a>
-<span class="sourceLineNo">404</span> return String.format("ServerStateNode(%s)", getServerName());<a name="line.404"></a>
+<span class="sourceLineNo">395</span> public ArrayList<RegionInfo> getRegionInfoList() {<a name="line.395"></a>
+<span class="sourceLineNo">396</span> ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(regions.size());<a name="line.396"></a>
+<span class="sourceLineNo">397</span> for (RegionStateNode region: regions) {<a name="line.397"></a>
+<span class="sourceLineNo">398</span> hris.add(region.getRegionInfo());<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span> return hris;<a name="line.400"></a>
+<span class="sourceLineNo">401</span> }<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span> public void addRegion(final RegionStateNode regionNode) {<a name="line.403"></a>
+<span class="sourceLineNo">404</span> this.regions.add(regionNode);<a name="line.404"></a>
<span class="sourceLineNo">405</span> }<a name="line.405"></a>
-<span class="sourceLineNo">406</span> }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span> public final static RegionStateStampComparator REGION_STATE_STAMP_COMPARATOR =<a name="line.408"></a>
-<span class="sourceLineNo">409</span> new RegionStateStampComparator();<a name="line.409"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span> public void removeRegion(final RegionStateNode regionNode) {<a name="line.407"></a>
+<span class="sourceLineNo">408</span> this.regions.remove(regionNode);<a name="line.408"></a>
+<span class="sourceLineNo">409</span> }<a name="line.409"></a>
<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span> // TODO: Replace the ConcurrentSkipListMaps<a name="line.411"></a>
-<span class="sourceLineNo">412</span> /**<a name="line.412"></a>
-<span class="sourceLineNo">413</span> * RegionName -- i.e. RegionInfo.getRegionName() -- as bytes to {@link RegionStateNode}<a name="line.413"></a>
-<span class="sourceLineNo">414</span> */<a name="line.414"></a>
-<span class="sourceLineNo">415</span> private final ConcurrentSkipListMap<byte[], RegionStateNode> regionsMap =<a name="line.415"></a>
-<span class="sourceLineNo">416</span> new ConcurrentSkipListMap<byte[], RegionStateNode>(Bytes.BYTES_COMPARATOR);<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionInTransition =<a name="line.418"></a>
-<span class="sourceLineNo">419</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>(RegionInfo.COMPARATOR);<a name="line.419"></a>
+<span class="sourceLineNo">411</span> @Override<a name="line.411"></a>
+<span class="sourceLineNo">412</span> public int compareTo(final ServerStateNode other) {<a name="line.412"></a>
+<span class="sourceLineNo">413</span> return getServerName().compareTo(other.getServerName());<a name="line.413"></a>
+<span class="sourceLineNo">414</span> }<a name="line.414"></a>
+<span class="sourceLineNo">415</span><a name="line.415"></a>
+<span class="sourceLineNo">416</span> @Override<a name="line.416"></a>
+<span class="sourceLineNo">417</span> public int hashCode() {<a name="line.417"></a>
+<span class="sourceLineNo">418</span> return getServerName().hashCode();<a name="line.418"></a>
+<span class="sourceLineNo">419</span> }<a name="line.419"></a>
<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span> /**<a name="line.421"></a>
-<span class="sourceLineNo">422</span> * Regions marked as offline on a read of hbase:meta. Unused or at least, once<a name="line.422"></a>
-<span class="sourceLineNo">423</span> * offlined, regions have no means of coming on line again. TODO.<a name="line.423"></a>
-<span class="sourceLineNo">424</span> */<a name="line.424"></a>
-<span class="sourceLineNo">425</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionOffline =<a name="line.425"></a>
-<span class="sourceLineNo">426</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>();<a name="line.426"></a>
+<span class="sourceLineNo">421</span> @Override<a name="line.421"></a>
+<span class="sourceLineNo">422</span> public boolean equals(final Object other) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span> if (this == other) return true;<a name="line.423"></a>
+<span class="sourceLineNo">424</span> if (!(other instanceof ServerStateNode)) return false;<a name="line.424"></a>
+<span class="sourceLineNo">425</span> return compareTo((ServerStateNode)other) == 0;<a name="line.425"></a>
+<span class="sourceLineNo">426</span> }<a name="line.426"></a>
<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span> private final ConcurrentSkipListMap<byte[], RegionFailedOpen> regionFailedOpen =<a name="line.428"></a>
-<span class="sourceLineNo">429</span> new ConcurrentSkipListMap<byte[], RegionFailedOpen>(Bytes.BYTES_COMPARATOR);<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span> private final ConcurrentHashMap<ServerName, ServerStateNode> serverMap =<a name="line.431"></a>
-<span class="sourceLineNo">432</span> new ConcurrentHashMap<ServerName, ServerStateNode>();<a name="line.432"></a>
+<span class="sourceLineNo">428</span> @Override<a name="line.428"></a>
+<span class="sourceLineNo">429</span> public String toString() {<a name="line.429"></a>
+<span class="sourceLineNo">430</span> return String.format("ServerStateNode(%s)", getServerName());<a name="line.430"></a>
+<span class="sourceLineNo">431</span> }<a name="line.431"></a>
+<span class="sourceLineNo">432</span> }<a name="line.432"></a>
<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span> public RegionStates() { }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> public void clear() {<a name="line.436"></a>
-<span class="sourceLineNo">437</span> regionsMap.clear();<a name="line.437"></a>
-<span class="sourceLineNo">438</span> regionInTransition.clear();<a name="line.438"></a>
-<span class="sourceLineNo">439</span> regionOffline.clear();<a name="line.439"></a>
-<span class="sourceLineNo">440</span> serverMap.clear();<a name="line.440"></a>
-<span class="sourceLineNo">441</span> }<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span> @VisibleForTesting<a name="line.443"></a>
-<span class="sourceLineNo">444</span> public boolean isRegionInRegionStates(final RegionInfo hri) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span> return (regionsMap.containsKey(hri.getRegionName()) || regionInTransition.containsKey(hri)<a name="line.445"></a>
-<span class="sourceLineNo">446</span> || regionOffline.containsKey(hri));<a name="line.446"></a>
-<span class="sourceLineNo">447</span> }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span> // ==========================================================================<a name="line.449"></a>
-<span class="sourceLineNo">450</span> // RegionStateNode helpers<a name="line.450"></a>
-<span class="sourceLineNo">451</span> // ==========================================================================<a name="line.451"></a>
-<span class="sourceLineNo">452</span> protected RegionStateNode createRegionStateNode(final RegionInfo regionInfo) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> RegionStateNode newNode = new RegionStateNode(regionInfo);<a name="line.453"></a>
-<span class="sourceLineNo">454</span> RegionStateNode oldNode = regionsMap.putIfAbsent(regionInfo.getRegionName(), newNode);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> return oldNode != null ? oldNode : newNode;<a name="line.455"></a>
-<span class="sourceLineNo">456</span> }<a name="line.456"></a>
-<span class="sourceLineNo">457</span><a name="line.457"></a>
-<span class="sourceLineNo">458</span> protected RegionStateNode getOrCreateRegionStateNode(final RegionInfo regionInfo) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> RegionStateNode node = regionsMap.get(regionInfo.getRegionName());<a name="line.459"></a>
-<span class="sourceLineNo">460</span> return node != null ? node : createRegionStateNode(regionInfo);<a name="line.460"></a>
-<span class="sourceLineNo">461</span> }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span> RegionStateNode getRegionStateNodeFromName(final byte[] regionName) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span> return regionsMap.get(regionName);<a name="line.464"></a>
-<span class="sourceLineNo">465</span> }<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span> protected RegionStateNode getRegionStateNode(final RegionInfo regionInfo) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span> return getRegionStateNodeFromName(regionInfo.getRegionName());<a name="line.468"></a>
-<span class="sourceLineNo">469</span> }<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span> public void deleteRegion(final RegionInfo regionInfo) {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> regionsMap.remove(regionInfo.getRegionName());<a name="line.472"></a>
-<span class="sourceLineNo">473</span> // Remove from the offline regions map too if there.<a name="line.473"></a>
-<span class="sourceLineNo">474</span> if (this.regionOffline.containsKey(regionInfo)) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span> if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> this.regionOffline.remove(regionInfo);<a name="line.476"></a>
-<span class="sourceLineNo">477</span> }<a name="line.477"></a>
-<span class="sourceLineNo">478</span> }<a name="line.478"></a>
-<span class="sourceLineNo">479</span><a name="line.479"></a>
-<span class="sourceLineNo">480</span> ArrayList<RegionStateNode> getTableRegionStateNodes(final TableName tableName) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span> final ArrayList<RegionStateNode> regions = new ArrayList<RegionStateNode>();<a name="line.481"></a>
-<span class="sourceLineNo">482</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span> if (!node.getTable().equals(tableName)) break;<a name="line.483"></a>
-<span class="sourceLineNo">484</span> regions.add(node);<a name="line.484"></a>
-<span class="sourceLineNo">485</span> }<a name="line.485"></a>
-<span class="sourceLineNo">486</span> return regions;<a name="line.486"></a>
+<span class="sourceLineNo">434</span> public final static RegionStateStampComparator REGION_STATE_STAMP_COMPARATOR =<a name="line.434"></a>
+<span class="sourceLineNo">435</span> new RegionStateStampComparator();<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span> // TODO: Replace the ConcurrentSkipListMaps<a name="line.437"></a>
+<span class="sourceLineNo">438</span> /**<a name="line.438"></a>
+<span class="sourceLineNo">439</span> * RegionName -- i.e. RegionInfo.getRegionName() -- as bytes to {@link RegionStateNode}<a name="line.439"></a>
+<span class="sourceLineNo">440</span> */<a name="line.440"></a>
+<span class="sourceLineNo">441</span> private final ConcurrentSkipListMap<byte[], RegionStateNode> regionsMap =<a name="line.441"></a>
+<span class="sourceLineNo">442</span> new ConcurrentSkipListMap<byte[], RegionStateNode>(Bytes.BYTES_COMPARATOR);<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionInTransition =<a name="line.444"></a>
+<span class="sourceLineNo">445</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>(RegionInfo.COMPARATOR);<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span> /**<a name="line.447"></a>
+<span class="sourceLineNo">448</span> * Regions marked as offline on a read of hbase:meta. Unused or at least, once<a name="line.448"></a>
+<span class="sourceLineNo">449</span> * offlined, regions have no means of coming on line again. TODO.<a name="line.449"></a>
+<span class="sourceLineNo">450</span> */<a name="line.450"></a>
+<span class="sourceLineNo">451</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionOffline =<a name="line.451"></a>
+<span class="sourceLineNo">452</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>();<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span> private final ConcurrentSkipListMap<byte[], RegionFailedOpen> regionFailedOpen =<a name="line.454"></a>
+<span class="sourceLineNo">455</span> new ConcurrentSkipListMap<byte[], RegionFailedOpen>(Bytes.BYTES_COMPARATOR);<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span> private final ConcurrentHashMap<ServerName, ServerStateNode> serverMap =<a name="line.457"></a>
+<span class="sourceLineNo">458</span> new ConcurrentHashMap<ServerName, ServerStateNode>();<a name="line.458"></a>
+<span class="sourceLineNo">459</span><a name="line.459"></a>
+<span class="sourceLineNo">460</span> public RegionStates() { }<a name="line.460"></a>
+<span class="sourceLineNo">461</span><a name="line.461"></a>
+<span class="sourceLineNo">462</span> public void clear() {<a name="line.462"></a>
+<span class="sourceLineNo">463</span> regionsMap.clear();<a name="line.463"></a>
+<span class="sourceLineNo">464</span> regionInTransition.clear();<a name="line.464"></a>
+<span class="sourceLineNo">465</span> regionOffline.clear();<a name="line.465"></a>
+<span class="sourceLineNo">466</span> serverMap.clear();<a name="line.466"></a>
+<span class="sourceLineNo">467</span> }<a name="line.467"></a>
+<span class="sourceLineNo">468</span><a name="line.468"></a>
+<span class="sourceLineNo">469</span> @VisibleForTesting<a name="line.469"></a>
+<span class="sourceLineNo">470</span> public boolean isRegionInRegionStates(final RegionInfo hri) {<a name="line.470"></a>
+<span class="sourceLineNo">471</span> return (regionsMap.containsKey(hri.getRegionName()) || regionInTransition.containsKey(hri)<a name="line.471"></a>
+<span class="sourceLineNo">472</span> || regionOffline.containsKey(hri));<a name="line.472"></a>
+<span class="sourceLineNo">473</span> }<a name="line.473"></a>
+<span class="sourceLineNo">474</span><a name="line.474"></a>
+<span class="sourceLineNo">475</span> // ==========================================================================<a name="line.475"></a>
+<span class="sourceLineNo">476</span> // RegionStateNode helpers<a name="line.476"></a>
+<span class="sourceLineNo">477</span> // ==========================================================================<a name="line.477"></a>
+<span class="sourceLineNo">478</span> protected RegionStateNode createRegionStateNode(final RegionInfo regionInfo) {<a name="line.478"></a>
+<span class="sourceLineNo">479</span> RegionStateNode newNode = new RegionStateNode(regionInfo);<a name="line.479"></a>
+<span class="sourceLineNo">480</span> RegionStateNode oldNode = regionsMap.putIfAbsent(regionInfo.getRegionName(), newNode);<a name="line.480"></a>
+<span class="sourceLineNo">481</span> return oldNode != null ? oldNode : newNode;<a name="line.481"></a>
+<span class="sourceLineNo">482</span> }<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span> protected RegionStateNode getOrCreateRegionStateNode(final RegionInfo regionInfo) {<a name="line.484"></a>
+<span class="sourceLineNo">485</span> RegionStateNode node = regionsMap.get(regionInfo.getRegionName());<a name="line.485"></a>
+<span class="sourceLineNo">486</span> return node != null ? node : createRegionStateNode(regionInfo);<a name="line.486"></a>
<span class="sourceLineNo">487</span> }<a name="line.487"></a>
<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span> ArrayList<RegionState> getTableRegionStates(final TableName tableName) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>();<a name="line.490"></a>
-<span class="sourceLineNo">491</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span> if (!node.getTable().equals(tableName)) break;<a name="line.492"></a>
-<span class="sourceLineNo">493</span> regions.add(node.toRegionState());<a name="line.493"></a>
-<span class="sourceLineNo">494</span> }<a name="line.494"></a>
-<span class="sourceLineNo">495</span> return regions;<a name="line.495"></a>
-<span class="sourceLineNo">496</span> }<a name="line.496"></a>
-<span class="sourceLineNo">497</span><a name="line.497"></a>
-<span class="sourceLineNo">498</span> ArrayList<RegionInfo> getTableRegionsInfo(final TableName tableName) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span> final ArrayList<RegionInfo> regions = new ArrayList<RegionInfo>();<a name="line.499"></a>
-<span class="sourceLineNo">500</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span> if (!node.getTable().equals(tableName)) break;<a name="line.501"></a>
-<span class="sourceLineNo">502</span> regions.add(node.getRegionInfo());<a name="line.502"></a>
+<span class="sourceLineNo">489</span> RegionStateNode getRegionStateNodeFromName(final byte[] regionName) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span> return regionsMap.get(regionName);<a name="line.490"></a>
+<span class="sourceLineNo">491</span> }<a name="line.491"></a>
+<span class="sourceLineNo">492</span><a name="line.492"></a>
+<span class="sourceLineNo">493</span> protected RegionStateNode getRegionStateNode(final RegionInfo regionInfo) {<a name="line.493"></a>
+<span class="sourceLineNo">494</span> return getRegionStateNodeFromName(regionInfo.getRegionName());<a name="line.494"></a>
+<span class="sourceLineNo">495</span> }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span> public void deleteRegion(final RegionInfo regionInfo) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span> regionsMap.remove(regionInfo.getRegionName());<a name="line.498"></a>
+<span class="sourceLineNo">499</span> // Remove from the offline regions map too if there.<a name="line.499"></a>
+<span class="sourceLineNo">500</span> if (this.regionOffline.containsKey(regionInfo)) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span> if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.501"></a>
+<span class="sourceLineNo">502</span> this.regionOffline.remove(regionInfo);<a name="line.502"></a>
<span class="sourceLineNo">503</span> }<a name="line.503"></a>
-<span class="sourceLineNo">504</span> return regions;<a name="line.504"></a>
-<span class="sourceLineNo">505</span> }<a name="line.505"></a>
-<span class="sourceLineNo">506</span><a name="line.506"></a>
-<span class="sourceLineNo">507</span> Collection<RegionStateNode> getRegionStateNodes() {<a name="line.507"></a>
-<span class="sourceLineNo">508</span> return regionsMap.values();<a name="line.508"></a>
-<span class="sourceLineNo">509</span> }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span> public ArrayList<RegionState> getRegionStates() {<a name="line.511"></a>
-<span class="sourceLineNo">512</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>(regionsMap.size());<a name="line.512"></a>
-<span class="sourceLineNo">513</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span> regions.add(node.toRegionState());<a name="line.514"></a>
-<span class="sourceLineNo">515</span> }<a name="line.515"></a>
-<span class="sourceLineNo">516</span> return regions;<a name="line.516"></a>
-<span class="sourceLineNo">517</span> }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span> // ==========================================================================<a name="line.519"></a>
-<span class="sourceLineNo">520</span> // RegionState helpers<a name="line.520"></a>
-<span class="sourceLineNo">521</span> // ==========================================================================<a name="line.521"></a>
-<span class="sourceLineNo">522</span> public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span> RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.523"></a>
-<span class="sourceLineNo">524</span> return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.524"></a>
-<span class="sourceLineNo">525</span> }<a name="line.525"></a>
-<span class="sourceLineNo">526</span><a name="line.526"></a>
-<span class="sourceLineNo">527</span> public RegionState getRegionState(final String encodedRegionName) {<a name="line.527"></a>
-<span class="sourceLineNo">528</span> // TODO: Need a map <encodedName, ...> but it is just dispatch merge...<a name="line.528"></a>
-<span class="sourceLineNo">529</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.529"></a>
-<span class="sourceLineNo">530</span> if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span> return node.toRegionState();<a name="line.531"></a>
-<span class="sourceLineNo">532</span> }<a name="line.532"></a>
-<span class="sourceLineNo">533</span> }<a name="line.533"></a>
-<span class="sourceLineNo">534</span> return null;<a name="line.534"></a>
+<span class="sourceLineNo">504</span> }<a name="line.504"></a>
+<span class="sourceLineNo">505</span><a name="line.505"></a>
+<span class="sourceLineNo">506</span> ArrayList<RegionStateNode> getTableRegionStateNodes(final TableName tableName) {<a name="line.506"></a>
+<span class="sourceLineNo">507</span> final ArrayList<RegionStateNode> regions = new ArrayList<RegionStateNode>();<a name="line.507"></a>
+<span class="sourceLineNo">508</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.508"></a>
+<span class="sourceLineNo">509</span> if (!node.getTable().equals(tableName)) break;<a name="line.509"></a>
+<span class="sourceLineNo">510</span> regions.add(node);<a name="line.510"></a>
+<span class="sourceLineNo">511</span> }<a name="line.511"></a>
+<span class="sourceLineNo">512</span> return regions;<a name="line.512"></a>
+<span class="sourceLineNo">513</span> }<a name="line.513"></a>
+<span class="sourceLineNo">514</span><a name="line.514"></a>
+<span class="sourceLineNo">515</span> ArrayList<RegionState> getTableRegionStates(final TableName tableName) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>();<a name="line.516"></a>
+<span class="sourceLineNo">517</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.517"></a>
+<span class="sourceLineNo">518</span> if (!node.getTable().equals(tableName)) break;<a name="line.518"></a>
+<span class="sourceLineNo">519</span> regions.add(node.toRegionState());<a name="line.519"></a>
+<span class="sourceLineNo">520</span> }<a name="line.520"></a>
+<span class="sourceLineNo">521</span> return regions;<a name="line.521"></a>
+<span class="sourceLineNo">522</span> }<a name="line.522"></a>
+<span class="sourceLineNo">523</span><a name="line.523"></a>
+<span class="sourceLineNo">524</span> ArrayList<RegionInfo> getTableRegionsInfo(final TableName tableName) {<a name="line.524"></a>
+<span class="sourceLineNo">525</span> final ArrayList<RegionInfo> regions = new ArrayList<RegionInfo>();<a name="line.525"></a>
+<span class="sourceLineNo">526</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span> if (!node.getTable().equals(tableName)) break;<a name="line.527"></a>
+<span class="sourceLineNo">528</span> regions.add(node.getRegionInfo());<a name="line.528"></a>
+<span class="sourceLineNo">529</span> }<a name="line.529"></a>
+<span class="sourceLineNo">530</span> return regions;<a name="line.530"></a>
+<span class="sourceLineNo">531</span> }<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span> Collection<RegionStateNode> getRegionStateNodes() {<a name="line.533"></a>
+<span class="sourceLineNo">534</span> return regionsMap.values();<a name="line.534"></a>
<span class="sourceLineNo">535</span> }<a name="line.535"></a>
<span class="sourceLineNo">536</span><a name="line.536"></a>
-<span class="sourceLineNo">537</span> // ============================================================================================<a name="line.537"></a>
-<span class="sourceLineNo">538</span> // TODO: helpers<a name="line.538"></a>
-<span class="sourceLineNo">539</span> // ============================================================================================<a name="line.539"></a>
-<span class="sourceLineNo">540</span> public boolean hasTableRegionStates(final TableName tableName) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span> // TODO<a name="line.541"></a>
-<span class="sourceLineNo">542</span> return !getTableRegionStates(tableName).isEmpty();<a name="line.542"></a>
+<span class="sourceLineNo">537</span> public ArrayList<RegionState> getRegionStates() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>(regionsMap.size());<a name="line.538"></a>
+<span class="sourceLineNo">539</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span> regions.add(node.toRegionState());<a name="line.540"></a>
+<span class="sourceLineNo">541</span> }<a name="line.541"></a>
+<span class="sourceLineNo">542</span> return regions;<a name="line.542"></a>
<span class="sourceLineNo">543</span> }<a name="line.543"></a>
<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span> /**<a name="line.545"></a>
-<span class="sourceLineNo">546</span> * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.546"></a>
-<span class="sourceLineNo">547</span> */<a name="line.547"></a>
-<span class="sourceLineNo">548</span> public List<RegionInfo> getRegionsOfTable(final TableName table) {<a name="line.548"></a>
-<span class="sourceLineNo">549</span> return getRegionsOfTable(table, false);<a name="line.549"></a>
-<span class="sourceLineNo">550</span> }<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span> /**<a name="line.552"></a>
-<span class="sourceLineNo">553</span> * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.553"></a>
-<span class="sourceLineNo">554</span> * <code>offline</code> to true. Does not include regions that are in the<a name="line.554"></a>
-<span class="sourceLineNo">555</span> * {@link State#SPLIT} state.<a name="line.555"></a>
-<span class="sourceLineNo">556</span> */<a name="line.556"></a>
-<span class="sourceLineNo">557</span> public List<RegionInfo> getRegionsOfTable(final TableName table, final boolean offline) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span> final ArrayList<RegionStateNode> nodes = getTableRegionStateNodes(table);<a name="line.558"></a>
-<span class="sourceLineNo">559</span> final ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(nodes.size());<a name="line.559"></a>
-<span class="sourceLineNo">560</span> for (RegionStateNode node: nodes) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span> if (include(node, offline)) hris.add(node.getRegionInfo());<a name="line.561"></a>
-<span class="sourceLineNo">562</span> }<a name="line.562"></a>
-<span class="sourceLineNo">563</span> return hris;<a name="line.563"></a>
-<span class="sourceLineNo">564</span> }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span> /**<a name="line.566"></a>
-<span class="sourceLineNo">567</span> * Utility. Whether to include region in list of regions. Default is to<a name="line.567"></a>
-<span class="sourceLineNo">568</span> * weed out split and offline regions.<a name="line.568"></a>
-<span class="sourceLineNo">569</span> * @return True if we should include the <code>node</code> (do not include<a name="line.569"></a>
-<span class="sourceLineNo">570</span> * if split or offline unless <code>offline</code> is set to true.<a name="line.570"></a>
-<span class="sourceLineNo">571</span> */<a name="line.571"></a>
-<span class="sourceLineNo">572</span> boolean include(final RegionStateNode node, final boolean offline) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span> if (LOG.isTraceEnabled()) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span> LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.574"></a>
-<span class="sourceLineNo">575</span> }<a name="line.575"></a>
-<span class="sourceLineNo">576</span> if (node.isInState(State.SPLIT)) return false;<a name="line.576"></a>
-<span class="sourceLineNo">577</span> if (node.isInState(State.OFFLINE) && !offline) return false;<a name="line.577"></a>
-<span class="sourceLineNo">578</span> final RegionInfo hri = node.getRegionInfo();<a name="line.578"></a>
-<span class="sourceLineNo">579</span> return (!hri.isOffline() && !hri.isSplit()) ||<a name="line.579"></a>
-<span class="sourceLineNo">580</span> ((hri.isOffline() || hri.isSplit()) && offline);<a name="line.580"></a>
-<span class="sourceLineNo">581</span> }<a name="line.581"></a>
-<span class="sourceLineNo">582</span><a name="line.582"></a>
-<span class="sourceLineNo">583</span> /**<a name="line.583"></a>
-<span class="sourceLineNo">584</span> * Returns the set of regions hosted by the specified server<a name="line.584"></a>
-<span class="sourceLineNo">585</span> * @param serverName the server we are interested in<a name="line.585"></a>
-<span class="sourceLineNo">586</span> * @return set of RegionInfo hosted by the specified server<a name="line.586"></a>
-<span class="sourceLineNo">587</span> */<a name="line.587"></a>
-<span class="sourceLineNo">588</span> public List<RegionInfo> getServerRegionInfoSet(final ServerName serverName) {<a name="line.588"></a>
-<span class="sourceLineNo">589</span> final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.589"></a>
-<span class="sourceLineNo">590</span> if (serverInfo == null) return Collections.emptyList();<a name="line.590"></a>
+<span class="sourceLineNo">545</span> // ==========================================================================<a name="line.545"></a>
+<span class="sourceLineNo">546</span> // RegionState helpers<a name="line.546"></a>
+<span class="sourceLineNo">547</span> // ==========================================================================<a name="line.547"></a>
+<span class="sourceLineNo">548</span> public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.548"></a>
+<span class="sourceLineNo">549</span> RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.549"></a>
+<span class="sourceLineNo">550</span> return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.550"></a>
+<span class="sourceLineNo">551</span> }<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span> public RegionState getRegionState(final String encodedRegionName) {<a name="line.553"></a>
+<span class="sourceLineNo">554</span> // TODO: Need a map <encodedName, ...> but it is just dispatch merge...<a name="line.554"></a>
+<span class="sourceLineNo">555</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.555"></a>
+<span class="sourceLineNo">556</span> if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span> return node.toRegionState();<a name="line.557"></a>
+<span class="sourceLineNo">558</span> }<a name="line.558"></a>
+<span class="sourceLineNo">559</span> }<a name="line.559"></a>
+<span class="sourceLineNo">560</span> return null;<a name="line.560"></a>
+<span class="sourceLineNo">561</span> }<a name="line.561"></a>
+<span class="sourceLineNo">562</span><a name="line.562"></a>
+<span class="sourceLineNo">563</span> // ============================================================================================<a name="line.563"></a>
+<span class="sourceLineNo">564</span> // TODO: helpers<a name="line.564"></a>
+<span class="sourceLineNo">565</span> // ============================================================================================<a name="line.565"></a>
+<span class="sourceLineNo">566</span> public boolean hasTableRegionStates(final TableName tableName) {<a name="line.566"></a>
+<span class="sourceLineNo">567</span> // TODO<a name="line.567"></a>
+<span class="sourceLineNo">568</span> return !getTableRegionStates(tableName).isEmpty();<a name="line.568"></a>
+<span class="sourceLineNo">569</span> }<a name="line.569"></a>
+<span class="sourceLineNo">570</span><a name="line.570"></a>
+<span class="sourceLineNo">571</span> /**<a name="line.571"></a>
+<span class="sourceLineNo">572</span> * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.572"></a>
+<span class="sourceLineNo">573</span> */<a name="line.573"></a>
+<span class="sourceLineNo">574</span> public List<RegionInfo> getRegionsOfTable(final TableName table) {<a name="line.574"></a>
+<span class="sourceLineNo">575</span> return getRegionsOfTable(table, false);<a name="line.575"></a>
+<span class="sourceLineNo">576</span> }<a name="line.576"></a>
+<span class="sourceLineNo">577</span><a name="line.577"></a>
+<span class="sourceLineNo">578</span> /**<a name="line.578"></a>
+<span class="sourceLineNo">579</span> * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.579"></a>
+<span class="sourceLineNo">580</span> * <code>offline</code> to true. Does not include regions that are in the<a name="line.580"></a>
+<span class="sourceLineNo">581</span> * {@link State#SPLIT} state.<a name="line.581"></a>
+<span class="sourceLineNo">582</span> */<a name="line.582"></a>
+<span class="sourceLineNo">583</span> public List<RegionInfo> getRegionsOfTable(final TableName table, final boolean offline) {<a name="line.583"></a>
+<span class="sourceLineNo">584</span> final ArrayList<RegionStateNode> nodes = getTableRegionStateNodes(table);<a name="line.584"></a>
+<span class="sourceLineNo">585</span> final ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(nodes.size());<a name="line.585"></a>
+<span class="sourceLineNo">586</span> for (RegionStateNode node: nodes) {<a name="line.586"></a>
+<span class="sourceLineNo">587</span> if (include(node, offline)) hris.add(node.getRegionInfo());<a name="line.587"></a>
+<span class="sourceLineNo">588</span> }<a name="line.588"></a>
+<span class="sourceLineNo">589</span> return hris;<a name="line.589"></a>
+<span class="sourceLineNo">590</span> }<a name="line.590"></a>
<span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span> synchronized (serverInfo) {<a name="line.592"></a>
-<span class="sourceLineNo">593</span> return serverInfo.getRegionInfoList();<a name="line.593"></a>
-<span class="sourceLineNo">594</span> }<a name="line.594"></a>
-<span class="sourceLineNo">595</span> }<a name="line.595"></a>
-<span class="sourceLineNo">596</span><a name="line.596"></a>
-<span class="sourceLineNo">597</span> // ============================================================================================<a name="line.597"></a>
-<span class="sourceLineNo">598</span> // TODO: split helpers<a name="line.598"></a>
-<span class="sourceLineNo">599</span> // ============================================================================================<a name="line.599"></a>
-<span class="sourceLineNo">600</span> public void logSplit(final ServerName serverName) {<a name="line.600"></a>
-<span class="sourceLineNo">601</span> final ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.601"></a>
-<span class="sourceLineNo">602</span> synchronized (serverNode) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span> serverNode.setState(ServerState.SPLITTING);<a name="line.603"></a>
-<span class="sourceLineNo">604</span> /* THIS HAS TO BE WRONG. THIS IS SPLITTING OF REGION, NOT SPLITTING WALs.<a name="line.604"></a>
-<span class="sourceLineNo">605</span> for (RegionStateNode regionNode: serverNode.getRegions()) {<a name="line.605"></a>
-<span class="sourceLineNo">606</span> synchronized (regionNode) {<a name="line.606"></a>
-<span class="sourceLineNo">607</span> // TODO: Abort procedure if present<a name="line.607"></a>
-<span class="sourceLineNo">608</span> regionNode.setState(State.SPLITTING);<a name="line.608"></a>
-<span class="sourceLineNo">609</span> }<a name="line.609"></a>
-<span class="sourceLineNo">610</span> }*/<a name="line.610"></a>
-<span class="sourceLineNo">611</span> }<a name="line.611"></a>
-<span class="sourceLineNo">612</span> }<a name="line.612"></a>
-<span class="sourceLineNo">613</span><a name="line.613"></a>
-<span class="sourceLineNo">614</span> public void logSplit(final RegionInfo regionInfo) {<a name="line.614"></a>
-<span class="sourceLineNo">615</span> final RegionStateNode regionNode = getRegionStateNode(regionInfo);<a name="line.615"></a>
-<span class="sourceLineNo">616</span> synchronized (regionNode) {<a name="line.616"></a>
-<span class="sourceLineNo">617</span> regionNode.setState(State.SPLIT);<a name="line.617"></a>
-<span class="sourceLineNo">618</span> }<a name="line.618"></a>
-<span class="sourceLineNo">619</span> }<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span> @VisibleForTesting<a name="line.621"></a>
-<span class="sourceLineNo">622</span> public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span> final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.623"></a>
-<span class="sourceLineNo">624</span> synchronized (regionNode) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span> regionNode.setState(state);<a name="line.625"></a>
-<span class="sourceLineNo">626</span> }<a name="line.626"></a>
-<span class="sourceLineNo">627</span> }<a name="line.627"></a>
-<span class="sourceLineNo">628</span><a name="line.628"></a>
-<span class="sourceLineNo">629</span> // ============================================================================================<a name="line.629"></a>
-<span class="sourceLineNo">630</span> // TODO:<a name="line.630"></a>
-<span class="sourceLineNo">631</span> // ============================================================================================<a name="line.631"></a>
-<span class="sourceLineNo">632</span> public List<RegionInfo> getAssignedRegions() {<a name="line.632"></a>
-<span class="sourceLineNo">633</span> final List<RegionInfo> result = new ArrayList<RegionInfo>();<a name="line.633"></a>
-<span class="sourceLineNo">634</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span> if (!node.isInTransition()) {<a name="line.635"></a>
-<span class="sourceLineNo">636</span> result.add(node.getRegionInfo());<a name="line.636"></a>
-<span class="sourceLineNo">637</span> }<a name="line.637"></a>
-<span class="sourceLineNo">638</span> }<a name="line.638"></a>
-<span class="sourceLineNo">639</span> return result;<a name="line.639"></a>
-<span class="sourceLineNo">640</span> }<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span> public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.643"></a>
-<span class="sourceLineNo">644</span> if (region != null) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span> synchronized (region) {<a name="line.645"></a>
-<span class="sourceLineNo">646</span> return region.isInState(state);<a name="line.646"></a>
-<span class="sourceLineNo">647</span> }<a name="line.647"></a>
-<span class="sourceLineNo">648</span> }<a name="line.648"></a>
-<span class="sourceLineNo">649</span> return false;<a name="line.649"></a>
-<span class="sourceLineNo">650</span> }<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span> public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span> return isRegionInState(regionInfo, State.OPEN);<a name="line.653"></a>
+<span class="sourceLineNo">592</span> /**<a name="line.592"></a>
+<span class="sourceLineNo">593</span> * Utility. Whether to include region in list of regions. Default is to<a name="line.593"></a>
+<span class="sourceLineNo">594</span> * weed out split and offline regions.<a name="line.594"></a>
+<span class="sourceLineNo">595</span> * @return True if we should include the <code>node</code> (do not include<a name="line.595"></a>
+<span class="sourceLineNo">596</span> * if split or offline unless <code>offline</code> is set to true.<a name="line.596"></a>
+<span class="sourceLineNo">597</span> */<a name="line.597"></a>
+<span class="sourceLineNo">598</span> boolean include(final RegionStateNode node, final boolean offline) {<a name="line.598"></a>
+<span class="sourceLineNo">599</span> if (LOG.isTraceEnabled()) {<a name="line.599"></a>
+<span class="sourceLineNo">600</span> LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.600"></a>
+<span class="sourceLineNo">601</span> }<a name="line.601"></a>
+<span class="sourceLineNo">602</span> if (node.isInState(State.SPLIT)) return false;<a name="line.602"></a>
+<span class="sourceLineNo">603</span> if (node.isInState(State.OFFLINE) && !offline) return false;<a name="line.603"></a>
+<span class="sourceLineNo">604</span> final RegionInfo hri = node.getRegionInfo();<a name="line.604"></a>
+<span class="sourceLineNo">605</span> return (!hri.isOffline() && !hri.isSplit()) ||<a name="line.605"></a>
+<span class="sourceLineNo">606</span> ((hri.isOffline() || hri.isSplit()) && offline);<a name="line.606"></a>
+<span class="sourceLineNo">607</span> }<a name="line.607"></a>
+<span class="sourceLineNo">608</span><a name="line.608"></a>
+<span class="sourceLineNo">609</span> /**<a name="line.609"></a>
+<span class="sourceLineNo">610</span> * Returns the set of regions hosted by the specified server<a name="line.610"></a>
+<span class="sourceLineNo">611</span> * @param serverName the server we are interested in<a name="line.611"></a>
+<span class="sourceLineNo">612</span> * @return set of RegionInfo hosted by the specified server<a name="line.612"></a>
+<span class="sourceLineNo">613</span> */<a name="line.613"></a>
+<span class="sourceLineNo">614</span> public List<RegionInfo> getServerRegionInfoSet(final ServerName serverName) {<a name="line.614"></a>
+<span class="sourceLineNo">615</span> final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.615"></a>
+<span class="sourceLineNo">616</span> if (serverInfo == null) return Collections.emptyList();<a name="line.616"></a>
+<span class="sourceLineNo">617</span><a name="line.617"></a>
+<span class="sourceLineNo">618</span> synchronized (serverInfo) {<a name="line.618"></a>
+<span class="sourceLineNo">619</span> return serverInfo.getRegionInfoList();<a name="line.619"></a>
+<span class="sourceLineNo">620</span> }<a name="line.620"></a>
+<span class="sourceLineNo">621</span> }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span> // ============================================================================================<a name="line.623"></a>
+<span class="sourceLineNo">624</span> // TODO: split helpers<a name="line.624"></a>
+<span class="sourceLineNo">625</span> // ============================================================================================<a name="line.625"></a>
+<span class="sourceLineNo">626</span><a name="line.626"></a>
+<span class="sourceLineNo">627</span> /**<a name="line.627"></a>
+<span class="sourceLineNo">628</span> * Call this when we start log splitting a crashed Server.<a name="line.628"></a>
+<span class="sourceLineNo">629</span> * @see #logSplit(ServerName)<a name="line.629"></a>
+<span class="sourceLineNo">630</span> */<a name="line.630"></a>
+<span class="sourceLineNo">631</span> public void logSplitting(final ServerName serverName) {<a name="line.631"></a>
+<span class="sourceLineNo">632</span> final ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.632"></a>
+<span class="sourceLineNo">633</span> synchronized (serverNode) {<a name="line.633"></a>
+<span class="sourceLineNo">634</span> serverNode.setState(ServerState.SPLITTING);<a name="line.634"></a>
+<span class="sourceLineNo">635</span> }<a name="line.635"></a>
+<span class="sourceLineNo">636</span> }<a name="line.636"></a>
+<span class="sourceLineNo">637</span><a name="line.637"></a>
+<span class="sourceLineNo">638</span> /**<a name="line.638"></a>
+<span class="sourceLineNo">639</span> * Called after we've split all logs on a crashed Server.<a name="line.639"></a>
+<span class="sourceLineNo">640</span> * @see #logSplitting(ServerName)<a name="line.640"></a>
+<span class="sourceLineNo">641</span> */<a name="line.641"></a>
+<span class="sourceLineNo">642</span> public void logSplit(final ServerName serverName) {<a name="line.642"></a>
+<span class="sourceLineNo">643</span> final ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.643"></a>
+<span class="sourceLineNo">644</span> synchronized (serverNode) {<a name="line.644"></a>
+<span class="sourceLineNo">645</span> serverNode.setState(ServerState.OFFLINE);<a name="line.645"></a>
+<span class="sourceLineNo">646</span> }<a name="line.646"></a>
+<span class="sourceLineNo">647</span> }<a name="line.647"></a>
+<span class="sourceLineNo">648</span><a name="line.648"></a>
+<span class="sourceLineNo">649</span> public void logSplit(final RegionInfo regionInfo) {<a name="line.649"></a>
+<span class="sourceLineNo">650</span> final RegionStateNode regionNode = getRegionStateNode(regionInfo);<a name="line.650"></a>
+<span class="sourceLineNo">651</span> synchronized (regionNode) {<a name="line.651"></a>
+<span class="sourceLineNo">652</span> regionNode.setState(State.SPLIT);<a name="line.652"></a>
+<span class="sourceLineNo">653</span> }<a name="line.653"></a>
<span class="sourceLineNo">654</span> }<a name="line.654"></a>
<span class="sourceLineNo">655</span><a name="line.655"></a>
-<span class="sourceLineNo">656</span> /**<a name="line.656"></a>
-<span class="sourceLineNo">657</span> * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.657"></a>
-<span class="sourceLineNo">658</span> */<a name="line.658"></a>
-<span class="sourceLineNo">659</span> public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.659"></a>
-<span class="sourceLineNo">660</span> return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.660"></a>
-<span class="sourceLineNo">661</span> }<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span> public Map<ServerName, List<RegionInfo>> getSnapShotOfAssignment(<a name="line.663"></a>
-<span class="sourceLineNo">664</span> final Collection<RegionInfo> regions) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span> final Map<ServerName, List<RegionInfo>> result = new HashMap<ServerName, List<RegionInfo>>();<a name="line.665"></a>
-<span class="sourceLineNo">666</span> for (RegionInfo hri: regions) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span> final RegionStateNode node = getRegionStateNode(hri);<a name="line.667"></a>
-<span class="sourceLineNo">668</span> if (node == null) continue;<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span> // TODO: State.OPEN<a name="line.670"></a>
-<span class="sourceLineNo">671</span> final ServerName serverName = node.getRegionLocation();<a name="line.671"></a>
-<span class="sourceLineNo">672</span> if (serverName == null) continue;<a name="line.672"></a>
-<span class="sourceLineNo">673</span><a name="line.673"></a>
-<span class="sourceLineNo">674</span> List<RegionInfo> serverRegions = result.get(serverName);<a name="line.674"></a>
-<span class="sourceLineNo">675</span> if (serverRegions == null) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span> serverRegions = new ArrayList<RegionInfo>();<a name="line.676"></a>
-<span class="sourceLineNo">677</span> result.put(serverName, serverRegions);<a name="line.677"></a>
-<span class="sourceLineNo">678</span> }<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span> serverRegions.add(node.getRegionInfo());<a name="line.680"></a>
-<span class="sourceLineNo">681</span> }<a name="line.681"></a>
-<span class="sourceLineNo">682</span> return result;<a name="line.682"></a>
-<span class="sourceLineNo">683</span> }<a name="line.683"></a>
-<span class="sourceLineNo">684</span><a name="line.684"></a>
-<span class="sourceLineNo">685</span> public Map<RegionInfo, ServerName> getRegionAssignments() {<a name="line.685"></a>
-<span class="sourceLineNo">686</span> final HashMap<RegionInfo, ServerName> assignments = new HashMap<RegionInfo, ServerName>();<a name="line.686"></a>
-<span class="sourceLineNo">687</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.687"></a>
-<span class="sourceLineNo">688</span> assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.688"></a>
-<span class="sourceLineNo">689</span> }<a name="line.689"></a>
-<span class="sourceLineNo">690</span> return assignments;<a name="line.690"></a>
-<span class="sourceLineNo">691</span> }<a name="line.691"></a>
-<span class="sourceLineNo">692</span><a name="line.692"></a>
-<span class="sourceLineNo">693</span> public Map<RegionState.State, List<RegionInfo>> getRegionByStateOfTable(TableName tableName) {<a name="line.693"></a>
-<span class="sourceLineNo">694</span> final State[] states = State.values();<a name="line.694"></a>
-<span class="sourceLineNo">695</span> final Map<RegionState.State, List<RegionInfo>> tableRegions =<a name="line.695"></a>
-<span class="sourceLineNo">696</span> new HashMap<State, List<RegionInfo>>(states.length);<a name="line.696"></a>
-<span class="sourceLineNo">697</span> for (int i = 0; i < states.length; ++i) {<a name="line.697"></a>
-<span class="sourceLineNo">698</span> tableRegions.put(states[i], new ArrayList<RegionInfo>());<a name="line.698"></a>
-<span class="sourceLineNo">699</span> }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span> if (node.getTable().equals(tableName)) {<a name="line.702"></a>
-<span class="sourceLineNo">703</span> tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.703"></a>
-<span class="sourceLineNo">704</span> }<a name="line.704"></a>
-<span class="sourceLineNo">705</span> }<a name="line.705"></a>
-<span class="sourceLineNo">706</span> return tableRegions;<a name="line.706"></a>
-<span class="sourceLineNo">707</span> }<a name="line.707"></a>
+<span class="sourceLineNo">656</span> @VisibleForTesting<a name="line.656"></a>
+<span class="sourceLineNo">657</span> public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.657"></a>
+<span class="sourceLineNo">658</span> final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.658"></a>
+<span class="sourceLineNo">659</span> synchronized (regionNode) {<a name="line.659"></a>
+<span class="sourceLineNo">660</span> regionNode.setState(state);<a name="line.660"></a>
+<span class="sourceLineNo">661</span> }<a name="line.661"></a>
+<span class="sourceLineNo">662</span> }<a name="line.662"></a>
+<span class="sourceLineNo">663</span><a name="line.663"></a>
+<span class="sourceLineNo">664</span> // ============================================================================================<a name="line.664"></a>
+<span class="sourceLineNo">665</span> // TODO:<a name="line.665"></a>
+<span class="sourceLineNo">666</span> // ============================================================================================<a name="line.666"></a>
+<span class="sourceLineNo">667</span> public List<RegionInfo> getAssignedRegions() {<a name="line.667"></a>
+<span class="sourceLineNo">668</span> final List<RegionInfo> result = new ArrayList<RegionInfo>();<a name="line.668"></a>
+<span class="sourceLineNo">669</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.669"></a>
+<span class="sourceLineNo">670</span> if (!node.isInTransition()) {<a name="line.670"></a>
+<span class="sourceLineNo">671</span> result.add(node.getRegionInfo());<a name="line.671"></a>
+<span class="sourceLineNo">672</span> }<a name="line.672"></a>
+<span class="sourceLineNo">673</span> }<a name="line.673"></a>
+<span class="sourceLineNo">674</span> return result;<a name="line.674"></a>
+<span class="sourceLineNo">675</span> }<a name="line.675"></a>
+<span class="sourceLineNo">676</span><a name="line.676"></a>
+<span class="sourceLineNo">677</span> public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.677"></a>
+<span class="sourceLineNo">678</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.678"></a>
+<span class="sourceLineNo">679</span> if (region != null) {<a name="line.679"></a>
+<span class="sourceLineNo">680</span> synchronized (region) {<a name="line.680"></a>
+<span class="sourceLineNo">681</span> return region.isInState(state);<a name="line.681"></a>
+<span class="sourceLineNo">682</span> }<a name="line.682"></a>
+<span class="sourceLineNo">683</span> }<a name="line.683"></a>
+<span class="sourceLineNo">684</span> return false;<a name="line.684"></a>
+<span class="sourceLineNo">685</span> }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span> public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.687"></a>
+<span class="sourceLineNo">688</span> return isRegionInState(regionInfo, State.OPEN);<a name="line.688"></a>
+<span class="sourceLineNo">689</span> }<a name="line.689"></a>
+<span class="sourceLineNo">690</span><a name="line.690"></a>
+<span class="sourceLineNo">691</span> /**<a name="line.691"></a>
+<span class="sourceLineNo">692</span> * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.692"></a>
+<span class="sourceLineNo">693</span> */<a name="line.693"></a>
+<span class="sourceLineNo">694</span> public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.694"></a>
+<span class="sourceLineNo">695</span> return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.695"></a>
+<span class="sourceLineNo">696</span> }<a name="line.696"></a>
+<span class="sourceLineNo">697</span><a name="line.697"></a>
+<span class="sourceLineNo">698</span> public Map<ServerName, List<RegionInfo>> getSnapShotOfAssignment(<a name="line.698"></a>
+<span class="sourceLineNo">699</span> final Collection<RegionInfo> regions) {<a name="line.699"></a>
+<span class="sourceLineNo">700</span> final Map<ServerName, List<RegionInfo>> result = new HashMap<ServerName, List<RegionInfo>>();<a name="line.700"></a>
+<span class="sourceLineNo">701</span> for (RegionInfo hri: regions) {<a name="line.701"></a>
+<span class="sourceLineNo">702</span> final RegionStateNode node = getRegionStateNode(hri);<a name="line.702"></a>
+<span class="sourceLineNo">703</span> if (node == null) continue;<a name="line.703"></a>
+<span class="sourceLineNo">704</span><a name="line.704"></a>
+<span class="sourceLineNo">705</span> // TODO: State.OPEN<a name="line.705"></a>
+<span class="sourceLineNo">706</span> final ServerName serverName = node.getRegionLocation();<a name="line.706"></a>
+<span class="sourceLineNo">707</span> if (serverName == null) continue;<a name="line.707"></a>
<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span> public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.709"></a>
-<span class="sourceLineNo">710</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.710"></a>
-<span class="sourceLineNo">711</span> if (region != null) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span> synchronized (region) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span> ServerName server = region.getRegionLocation();<a name="line.713"></a>
-<span class="sourceLineNo">714</span> return server != null ? server : region.getLastHost();<a name="line.714"></a>
-<span class="sourceLineNo">715</span> }<a name="line.715"></a>
+<span class="sourceLineNo">709</span> List<RegionInfo> serverRegions = result.get(serverName);<a name="line.709"></a>
+<span class="sourceLineNo">710</span> if (serverRegions == null) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span> serverRegions = new ArrayList<RegionInfo>();<a name="line.711"></a>
+<span class="sourceLineNo">712</span> result.put(serverName, serverRegions);<a name="line.712"></a>
+<span class="sourceLineNo">713</span> }<a name="line.713"></a>
+<span class="sourceLineNo">714</span><a name="line.714"></a>
+<span class="sourceLineNo">715</span> serverRegions.add(node.getRegionInfo());<a name="line.715"></a>
<span class="sourceLineNo">716</span> }<a name="line.716"></a>
-<span class="sourceLineNo">717</span> return null;<a name="line.717"></a>
+<span class="sourceLineNo">717</span> return result;<a name="line.717"></a>
<span class="sourceLineNo">718</span> }<a name="line.718"></a>
<span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span> /**<a name="line.720"></a>
-<span class="sourceLineNo">721</span> * This is an EXPENSIVE clone. Cloning though is the safest thing to do.<a name="line.721"></a>
-<span class="sourceLineNo">722</span> * Can't let out original since it can change and at least the load balancer<a name="line.722"></a>
-<span class="sourceLineNo">723</span> * wants to iterate this exported list. We need to synchronize on regions<a name="line.723"></a>
-<span class="sourceLineNo">724</span> * since all access to this.servers is under a lock on this.regions.<a name="line.724"></a>
-<span class="sourceLineNo">725</span> * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.725"></a>
-<span class="sourceLineNo">726</span> * @return A clone of current assignments by table.<a name="line.726"></a>
-<span class="sourceLineNo">727</span> */<a name="line.727"></a>
-<span class="sourceLineNo">728</span> public Map<TableName, Map<ServerName, List<RegionInfo>>> getAssignmentsByTable(<a name="line.728"></a>
-<span class="sourceLineNo">729</span> final boolean forceByCluster) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span> if (!forceByCluster) return getAssignmentsByTable();<a name="line.730"></a>
-<span class="sourceLineNo">731</span><a name="line.731"></a>
-<span class="sourceLineNo">732</span> final HashMap<ServerName, List<RegionInfo>> ensemble =<a name="line.732"></a>
-<span class="sourceLineNo">733</span> new HashMap<ServerName, List<RegionInfo>>(serverMap.size());<a name="line.733"></a>
-<span class="sourceLineNo">734</span> for (ServerStateNode serverNode: serverMap.values()) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span> ensemble.put(serverNode.getServerName(), serverNode.getRegionInfoList());<a name="line.735"></a>
-<span class="sourceLineNo">736</span> }<a name="line.736"></a>
-<span class="sourceLineNo">737</span><a name="line.737"></a>
-<span class="sourceLineNo">738</span> // TODO: can we use Collections.singletonMap(HConstants.ENSEMBLE_TABLE_NAME, ensemble)?<a name="line.738"></a>
-<span class="sourceLineNo">739</span> final Map<TableName, Map<ServerName, List<RegionInfo>>> result =<a name="line.739"></a>
-<span class="sourceLineNo">740</span> new HashMap<TableName, Map<ServerName, List<RegionInfo>>>(1);<a name="line.740"></a>
-<span class="sourceLineNo">741</span> result.put(HConstants.ENSEMBLE_TABLE_NAME, ensemble);<a name="line.741"></a>
-<span class="sourceLineNo">742</span> return result;<a name="line.742"></a>
-<span class="sourceLineNo">743</span> }<a name="line.743"></a>
-<span class="sourceLineNo">744</span><a name="line.744"></a>
-<span class="sourceLineNo">745</span> public Map<TableName, Map<ServerName, List<RegionInfo>>> getAssignmentsByTable() {<a name="line.745"></a>
-<span class="sourceLineNo">746</span> final Map<TableName, Map<ServerName, List<RegionInfo>>> result = new HashMap<>();<a name="line.746"></a>
-<span class="sourceLineNo">747</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span> Map<ServerName, List<RegionInfo>> tableResult = result.get(node.getTable());<a name="line.748"></a>
-<span class="sourceLineNo">749</span> if (tableResult == null) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span> tableResult = new HashMap<ServerName, List<RegionInfo>>();<a name="line.750"></a>
-<span class="sourceLineNo">751</span> result.put(node.getTable(), tableResult);<a name="line.751"></a>
-<span class="sourceLineNo">752</span> }<a name="line.752"></a>
-<span class="sourceLineNo">753</span><a name="line.753"></a>
-<span class="sourceLineNo">754</span> final ServerName serverName = node.getRegionLocation();<a name="line.754"></a>
-<span class="sourceLineNo">755</span> if (serverName == null) {<a name="line.755"></a>
-<span class="sourceLineNo">756</span> LOG.info("Skipping, no server for " + node);<a name="line.756"></a>
-<span class="sourceLineNo">757</span> continue;<a name="line.757"></a>
-<span class="sourceLineNo">758</span> }<a name="line.758"></a>
-<span class="sourceLineNo">759</span> List<RegionInfo> serverResult = tableResult.get(serverName);<a name="line.759"></a>
-<span class="sourceLineNo">760</span> if (serverResult == null) {<a name="line.760"></a>
-<span class="sourceLineNo">761</span> serverResult = new ArrayList<RegionInfo>();<a name="line.761"></a>
-<span class="sourceLineNo">762</span> tableResult.put(serverName, serverResult);<a name="line.762"></a>
-<span class="sourceLineNo">763</span> }<a name="line.763"></a>
-<span class="sourceLineNo">764</span><a name="line.764"></a>
-<span class="sourceLineNo">765</span> serverResult.add(node.getRegionInfo());<a name="line.765"></a>
-<span class="sourceLineNo">766</span> }<a name="line.766"></a>
-<span class="sourceLineNo">767</span> // Add online servers with no assignment for the table.<a name="line.767"></a>
-<span class="sourceLineNo">768</span> for (Map<ServerName, List<RegionInfo>> table: result.values()) {<a name="line.768"></a>
-<span class="sourceLineNo">769</span> for (ServerName svr : serverMap.keySet()) {<a name="line.769"></a>
-<span class="sourceLineNo">770</span> if (!table.containsKey(svr)) {<a name="line.770"></a>
-<span class="sourceLineNo">771</span> table.put(svr, new ArrayList<RegionInfo>());<a name="line.771"></a>
-<span class="sourceLineNo">772</span> }<a name="line.772"></a>
-<span class="sourceLineNo">773</span> }<a name="line.773"></a>
-<span class="sourceLineNo">774</span> }<a name="line.774"></a>
-<span class="sourceLineNo">775</span> return result;<a name="line.775"></a>
-<span class="sourceLineNo">776</span> }<a name="line.776"></a>
-<span class="sourceLineNo">777</span><a name="line.777"></a>
-<span class="sourceLineNo">778</span> // ==========================================================================<a name="line.778"></a>
-<span class="sourceLineNo">779</span> // Region in transition helpers<a name="line.779"></a>
-<span class="sourceLineNo">780</span> // ==========================================================================<a name="line.780"></a>
-<span class="sourceLineNo">781</span> protected boolean addRegionInTransition(final RegionStateNode regionNode,<a name="line.781"></a>
-<span class="sourceLineNo">782</span> final RegionTransitionProcedure procedure) {<a name="line.782"></a>
-<span class="sourceLineNo">783</span> if (procedure != null && !regionNode.setProcedure(procedure)) return false;<a name="line.783"></a>
-<span class="sourceLineNo">784</span><a name="line.784"></a>
-<span class="sourceLineNo">785</span> regionInTransition.put(regionNode.getRegionInfo(), regionNode);<a name="line.785"></a>
-<span class="sourceLineNo">786</span> return true;<a name="line.786"></a>
-<span class="sourceLineNo">787</span> }<a name="line.787"></a>
+<span class="sourceLineNo">720</span> public Map<RegionInfo, ServerName> getRegionAssignments() {<a name="line.720"></a>
+<span class="sourceLineNo">721</span> final HashMap<RegionInfo, ServerName> assignments = new HashMap<RegionInfo, ServerName>();<a name="line.721"></a>
+<span class="sourceLineNo">722</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span> assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.723"></a>
+<span class="sourceLineNo">724</span> }<a name="line.724"></a>
+<span class="sourceLineNo">725</span> return assignments;<a name="line.725"></a>
+<span class="sourceLineNo">726</span> }<a name="line.726"></a>
+<span class="sourceLineNo">727</span><a name="line.727"></a>
+<span class="sourceLineNo">728</span> public Map<RegionState.State, List<RegionInfo>> getRegionByStateOfTable(TableName tableName) {<a name="line.728"></a>
+<span class="sourceLineNo">729</span> final State[] states = State.values();<a name="line.729"></a>
+<span class="sourceLineNo">730</span> final Map<RegionState.State, List<RegionInfo>> tableRegions =<a name="line.730"></a>
+<span class="sourceLineNo">731</span> new HashMap<State, List<RegionInfo>>(states.length);<a name="line.731"></a>
+<span class="sourceLineNo">732</span> for (int i = 0; i < states.length; ++i) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span> tableRegions.put(states[i], new ArrayList<RegionInfo>());<a name="line.733"></a>
+<span class="sourceLineNo">734</span> }<a name="line.734"></a>
+<span class="sourceLineNo">735</span><a name="line.735"></a>
+<span class="sourceLineNo">736</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.736"></a>
+<span class="sourceLineNo">737</span> if (node.getTable().equals(tableName)) {<a name="line.737"></a>
+<span class="sourceLineNo">738</span> tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.738"></a>
+<span class="sourceLineNo">739</span> }<a name="line.739"></a>
+<span class="sourceLineNo">740</span> }<a name="line.740"></a>
+<span class="sourceLineNo">741</span> return tableRegions;<a name="line.741"></a>
+<span class="sourceLineNo">742</span> }<a name="line.742"></a>
+<span class="sourceLineNo">743</span><a name="line.743"></a>
+<span class="sourceLineNo">744</span> public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.744"></a>
+<span class="sourceLineNo">745</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.745"></a>
+<span class="sourceLineNo">746</span> if (region != null) {<a name="line.746"></a>
+<span class="sourceLineNo">747</span> synchronized (region) {<a name="line.747"></a>
+<span class="sourceLineNo">748</span> ServerName server = region.getRegionLocation();<a name="line.748"></a>
+<span class="sourceLineNo">749</span> return server != null ? server : region.getLastHost();<a name="line.749"></a>
+<span class="sourceLineNo">750</span> }<a name="line.750"></a>
+<span class="sourceLineNo">751</span> }<a name="line.751"></a>
+<span class="sourceLineNo">752</span> return null;<a name="line.752"></a>
+<span class="sourceLineNo">753</span> }<a name="line.753"></a>
+<span class="sourceLineNo">754</span><a name="line.754"></a>
+<span class="sourceLineNo">755</span> /**<a name="line.755"></a>
+<span class="sourceLineNo">756</span> * This is an EXPENSIVE clone. Cloning though is the safest thing to do.<a name="line.756"></a>
+<span class="sourceLineNo">757</span> * Can't let out original since it can change and at least the load balancer<a name="line.757"></a>
+<span class="sourceLineNo">758</span> * wants to iterate this exported list. We need to synchronize on regions<a name="line.758"></a>
+<span class="sourceLineNo">759</span> * since all access to this.servers is under a lock on this.regions.<a name="line.759"></a>
+<span class="sourceLineNo">760</span> * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.760"></a>
+<span class="sourceLineNo">761</span> * @return A clone of current assignments by table.<a name="line.761"></a>
+<span class="sourceLineNo">762</span> */<a name="line.762"></a>
+<span class="sourceLineNo">763</span> public Map<TableName, Map<ServerName, List<RegionInfo>>> getAssignmentsByTable(<a name="line.763"></a>
+<span class="sourceLineNo">764</span> final boolean forceByC
<TRUNCATED>
[38/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html
index 5c74619..988a49b 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html
@@ -123,7 +123,7 @@ var activeTableTab = "activeTableTab";
<hr>
<br>
<pre>@InterfaceAudience.Private
-public abstract class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.94">RegionTransitionProcedure</a>
+public abstract class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.95">RegionTransitionProcedure</a>
extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>>
implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a><<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>,<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>></pre>
<div class="block">Base class for the Assign and Unassign Procedure.
@@ -538,7 +538,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>LOG</h4>
-<pre>private static final org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.98">LOG</a></pre>
+<pre>private static final org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.99">LOG</a></pre>
</li>
</ul>
<a name="aborted">
@@ -547,7 +547,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>aborted</h4>
-<pre>protected final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.100">aborted</a></pre>
+<pre>protected final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.101">aborted</a></pre>
</li>
</ul>
<a name="transitionState">
@@ -556,7 +556,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>transitionState</h4>
-<pre>private org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.102">transitionState</a></pre>
+<pre>private org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.103">transitionState</a></pre>
</li>
</ul>
<a name="regionInfo">
@@ -565,7 +565,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>regionInfo</h4>
-<pre>private <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.108">regionInfo</a></pre>
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.109">regionInfo</a></pre>
<div class="block">This data member must be persisted. Expectation is that it is done by subclasses in their
<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-"><code>Procedure.serializeStateData(ProcedureStateSerializer)</code></a> call, restoring <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#regionInfo"><code>regionInfo</code></a>
in their <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-"><code>Procedure.deserializeStateData(ProcedureStateSerializer)</code></a> method.</div>
@@ -577,7 +577,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>attempt</h4>
-<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.114">attempt</a></pre>
+<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.115">attempt</a></pre>
<div class="block">Like <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#regionInfo"><code>regionInfo</code></a>, the expectation is that subclasses persist the value of this
data member. It is used doing backoff when Procedure gets stuck.</div>
</li>
@@ -588,7 +588,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockListLast">
<li class="blockList">
<h4>lock</h4>
-<pre>private volatile boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.116">lock</a></pre>
+<pre>private volatile boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.117">lock</a></pre>
</li>
</ul>
</li>
@@ -605,7 +605,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>RegionTransitionProcedure</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.119">RegionTransitionProcedure</a>()</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.120">RegionTransitionProcedure</a>()</pre>
</li>
</ul>
<a name="RegionTransitionProcedure-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -614,7 +614,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockListLast">
<li class="blockList">
<h4>RegionTransitionProcedure</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.121">RegionTransitionProcedure</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.122">RegionTransitionProcedure</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
</li>
</ul>
</li>
@@ -631,7 +631,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>getRegionInfo</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.126">getRegionInfo</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.127">getRegionInfo</a>()</pre>
</li>
</ul>
<a name="setRegionInfo-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -640,7 +640,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>setRegionInfo</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.137">setRegionInfo</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.138">setRegionInfo</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
<div class="block">This setter is for subclasses to call in their
<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-"><code>Procedure.deserializeStateData(ProcedureStateSerializer)</code></a> method. Expectation is that
subclasses will persist `regioninfo` in their
@@ -654,7 +654,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>setAttempt</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.146">setAttempt</a>(int attempt)</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.147">setAttempt</a>(int attempt)</pre>
<div class="block">This setter is for subclasses to call in their
<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-"><code>Procedure.deserializeStateData(ProcedureStateSerializer)</code></a> method.</div>
<dl>
@@ -669,7 +669,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>getAttempt</h4>
-<pre>protected int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.150">getAttempt</a>()</pre>
+<pre>protected int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.151">getAttempt</a>()</pre>
</li>
</ul>
<a name="getTableName--">
@@ -678,7 +678,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>getTableName</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.155">getTableName</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.156">getTableName</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.html#getTableName--">getTableName</a></code> in interface <code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface</a></code></dd>
@@ -693,7 +693,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>isMeta</h4>
-<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.160">isMeta</a>()</pre>
+<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.161">isMeta</a>()</pre>
</li>
</ul>
<a name="toStringClassDetails-java.lang.StringBuilder-">
@@ -702,7 +702,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>toStringClassDetails</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.165">toStringClassDetails</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a> sb)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.166">toStringClassDetails</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a> sb)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClassDetails-java.lang.StringBuilder-">Procedure</a></code></span></div>
<div class="block">Extend the toString() information with the procedure details
e.g. className and parameters</div>
@@ -720,7 +720,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>getRegionState</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.173">getRegionState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.174">getRegionState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
</li>
</ul>
<a name="setTransitionState-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionState-">
@@ -729,7 +729,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>setTransitionState</h4>
-<pre>void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.177">setTransitionState</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionState state)</pre>
+<pre>void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.178">setTransitionState</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionState state)</pre>
</li>
</ul>
<a name="getTransitionState--">
@@ -738,7 +738,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>getTransitionState</h4>
-<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.181">getTransitionState</a>()</pre>
+<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.182">getTransitionState</a>()</pre>
</li>
</ul>
<a name="startTransition-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">
@@ -747,7 +747,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>startTransition</h4>
-<pre>protected abstract boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.185">startTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>protected abstract boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.186">startTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a></pre>
@@ -764,7 +764,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>updateTransition</h4>
-<pre>protected abstract boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.194">updateTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>protected abstract boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.195">updateTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a></pre>
@@ -785,7 +785,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>finishTransition</h4>
-<pre>protected abstract void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.197">finishTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>protected abstract void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.198">finishTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a></pre>
@@ -802,7 +802,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>reportTransition</h4>
-<pre>protected abstract void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.200">reportTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>protected abstract void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.201">reportTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode,
org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode code,
long seqId)
@@ -819,7 +819,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>remoteCallBuild</h4>
-<pre>public abstract <a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteOperation</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.204">remoteCallBuild</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>public abstract <a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteOperation</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.205">remoteCallBuild</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html#remoteCallBuild-TEnv-TRemote-">RemoteProcedureDispatcher.RemoteProcedure</a></code></span></div>
<div class="block">For building the remote operation.</div>
@@ -835,7 +835,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>remoteCallFailed</h4>
-<pre>protected abstract boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.211">remoteCallFailed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>protected abstract boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.212">remoteCallFailed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a> exception)</pre>
<dl>
@@ -852,7 +852,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>remoteCallFailed</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.215">remoteCallFailed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.216">remoteCallFailed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a> exception)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html#remoteCallFailed-TEnv-TRemote-java.io.IOException-">RemoteProcedureDispatcher.RemoteProcedure</a></code></span></div>
@@ -869,7 +869,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>addToRemoteDispatcher</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.240">addToRemoteDispatcher</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.239">addToRemoteDispatcher</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> targetServer)</pre>
<div class="block">Be careful! At the end of this method, the procedure has either succeeded
and this procedure has been set into a suspended state OR, we failed and
@@ -889,7 +889,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>reportTransition</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.264">reportTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.260">reportTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode code,
long seqId)
@@ -906,7 +906,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>isServerOnline</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.292">isServerOnline</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.288">isServerOnline</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</pre>
</li>
</ul>
@@ -916,7 +916,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>isServerOnline</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.296">isServerOnline</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.292">isServerOnline</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
</li>
</ul>
@@ -926,7 +926,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>toStringState</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.301">toStringState</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a> builder)</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.297">toStringState</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a> builder)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringState-java.lang.StringBuilder-">Procedure</a></code></span></div>
<div class="block">Called from <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString--"><code>Procedure.toString()</code></a> when interpolating <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2"><code>Procedure</code></a> State.
Allows decorating generic Procedure State with Procedure particulars.</div>
@@ -944,7 +944,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>execute</h4>
-<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.310">execute</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.306">execute</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
throws <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#execute-TEnvironment-">Procedure</a></code></span></div>
<div class="block">The main code of the procedure. It must be idempotent since execute()
@@ -970,7 +970,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>getBackoffTime</h4>
-<pre>private long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.382">getBackoffTime</a>(int attempts)</pre>
+<pre>private long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.378">getBackoffTime</a>(int attempts)</pre>
</li>
</ul>
<a name="setTimeoutFailure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
@@ -979,7 +979,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>setTimeoutFailure</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.392">setTimeoutFailure</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.388">setTimeoutFailure</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block">At end of timeout, wake ourselves up so we run again.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
@@ -996,7 +996,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>rollback</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.399">rollback</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.395">rollback</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#rollback-TEnvironment-">Procedure</a></code></span></div>
<div class="block">The code to undo what was done by the execute() code.
It is called when the procedure or one of the sub-procedures failed or an
@@ -1018,7 +1018,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>isRollbackSupported</h4>
-<pre>protected abstract boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.414">isRollbackSupported</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionState state)</pre>
+<pre>protected abstract boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.410">isRollbackSupported</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionState state)</pre>
</li>
</ul>
<a name="abort-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
@@ -1027,7 +1027,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>abort</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.417">abort</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.413">abort</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#abort-TEnvironment-">Procedure</a></code></span></div>
<div class="block">The abort() call is asynchronous and each procedure must decide how to deal
with it, if they want to be abortable. The simplest implementation
@@ -1050,7 +1050,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>acquireLock</h4>
-<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.426">acquireLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.422">acquireLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock-TEnvironment-">Procedure</a></code></span></div>
<div class="block">The user should override this method if they need a lock on an Entity.
A lock can be anything, and it is up to the implementor. The Procedure
@@ -1087,7 +1087,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>releaseLock</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.449">releaseLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.445">releaseLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock-TEnvironment-">Procedure</a></code></span></div>
<div class="block">The user should override this method, and release lock if necessary.</div>
<dl>
@@ -1102,7 +1102,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>holdLock</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.455">holdLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.451">holdLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-">Procedure</a></code></span></div>
<div class="block">Used to keep the procedure lock even when the procedure is yielding or suspended.
Must implement <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasLock-TEnvironment-"><code>Procedure.hasLock(Object)</code></a> if you want to hold the lock for life
@@ -1123,7 +1123,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>hasLock</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.460">hasLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.456">hasLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasLock-TEnvironment-">Procedure</a></code></span></div>
<div class="block">This is used in conjunction with <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-"><code>Procedure.holdLock(Object)</code></a>. If <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-"><code>Procedure.holdLock(Object)</code></a>
returns true, the procedure executor will call acquireLock() once and thereafter
@@ -1145,7 +1145,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>shouldWaitClientAck</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.465">shouldWaitClientAck</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.461">shouldWaitClientAck</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#shouldWaitClientAck-TEnvironment-">Procedure</a></code></span></div>
<div class="block">By default, the executor will keep the procedure result around util
the eviction TTL is expired. The client can cut down the waiting time
@@ -1168,7 +1168,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>getServer</h4>
-<pre>public abstract <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.475">getServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>public abstract <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.471">getServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block">Used by ServerCrashProcedure to see if this Assign/Unassign needs processing.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -1182,7 +1182,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>remoteOperationCompleted</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.478">remoteOperationCompleted</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.474">remoteOperationCompleted</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html#remoteOperationCompleted-TEnv-">RemoteProcedureDispatcher.RemoteProcedure</a></code></span></div>
<div class="block">Called when RS tells the remote procedure is succeeded through the
<code>reportProcedureDone</code> method.</div>
@@ -1198,7 +1198,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockListLast">
<li class="blockList">
<h4>remoteOperationFailed</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.484">remoteOperationFailed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#line.480">remoteOperationFailed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureException</a> error)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html#remoteOperationFailed-TEnv-org.apache.hadoop.hbase.procedure2.RemoteProcedureException-">RemoteProcedureDispatcher.RemoteProcedure</a></code></span></div>
<div class="block">Called when RS tells the remote procedure is failed through the <code>reportProcedureDone</code>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html
index 66ff010..575693e 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html
@@ -18,7 +18,7 @@
catch(err) {
}
//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -315,45 +315,61 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Reg
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#isRollbackSupported-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionState-">isRollbackSupported</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionState state)</code> </td>
</tr>
<tr id="i6" class="altColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#isSafeToProceed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-java.io.IOException-">isSafeToProceed</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+ <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a> exception)</code>
+<div class="block">Our remote call failed but there are a few states where it is safe to proceed with the
+ unassign; e.g.</div>
+</td>
+</tr>
+<tr id="i7" class="rowColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#proceed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">proceed</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+ <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</code>
+<div class="block">Set it up so when procedure is unsuspended, we'll move to the procedure finish.</div>
+</td>
+</tr>
+<tr id="i8" class="altColor">
<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteOperation</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#remoteCallBuild-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.ServerName-">remoteCallBuild</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code>
<div class="block">For building the remote operation.</div>
</td>
</tr>
-<tr id="i7" class="rowColor">
+<tr id="i9" class="rowColor">
<td class="colFirst"><code>protected boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#remoteCallFailed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-java.io.IOException-">remoteCallFailed</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a> exception)</code> </td>
</tr>
-<tr id="i8" class="altColor">
+<tr id="i10" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#reportTransition-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-long-">reportTransition</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode,
org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode code,
long seqId)</code> </td>
</tr>
-<tr id="i9" class="rowColor">
+<tr id="i11" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">serializeStateData</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)</code>
<div class="block">The user-level code of the procedure may have some state to
persist (e.g.</div>
</td>
</tr>
-<tr id="i10" class="altColor">
+<tr id="i12" class="altColor">
<td class="colFirst"><code>protected boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#startTransition-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">startTransition</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</code> </td>
</tr>
-<tr id="i11" class="rowColor">
+<tr id="i13" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#toStringClassDetails-java.lang.StringBuilder-">toStringClassDetails</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a> sb)</code>
<div class="block">Extend the toString() information with the procedure details
e.g.</div>
</td>
</tr>
-<tr id="i12" class="altColor">
+<tr id="i14" class="altColor">
<td class="colFirst"><code>protected boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#updateTransition-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">updateTransition</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</code>
@@ -621,7 +637,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Reg
<ul class="blockList">
<li class="blockList">
<h4>finishTransition</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#line.215">finishTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#line.216">finishTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
@@ -638,7 +654,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Reg
<ul class="blockList">
<li class="blockList">
<h4>remoteCallBuild</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteOperation</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#line.234">remoteCallBuild</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteOperation</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#line.235">remoteCallBuild</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html#remoteCallBuild-TEnv-TRemote-">RemoteProcedureDispatcher.RemoteProcedure</a></code></span></div>
<div class="block">For building the remote operation.</div>
@@ -656,7 +672,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Reg
<ul class="blockList">
<li class="blockList">
<h4>reportTransition</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#line.240">reportTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#line.241">reportTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode,
org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode code,
long seqId)
@@ -669,22 +685,49 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Reg
</dl>
</li>
</ul>
+<a name="isSafeToProceed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-java.io.IOException-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isSafeToProceed</h4>
+<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#line.260">isSafeToProceed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+ <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a> exception)</pre>
+<div class="block">Our remote call failed but there are a few states where it is safe to proceed with the
+ unassign; e.g. if a server crash and it has had all of its WALs processed, then we can allow
+ this unassign to go to completion.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>True if it is safe to proceed with the unassign.</dd>
+</dl>
+</li>
+</ul>
+<a name="proceed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>proceed</h4>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#line.278">proceed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+ <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</pre>
+<div class="block">Set it up so when procedure is unsuspended, we'll move to the procedure finish.</div>
+</li>
+</ul>
<a name="remoteCallFailed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-java.io.IOException-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>remoteCallFailed</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#line.254">remoteCallFailed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#line.291">remoteCallFailed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a> exception)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#remoteCallFailed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-java.io.IOException-">remoteCallFailed</a></code> in class <code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionTransitionProcedure</a></code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
-<dd>True if processing of fail is complete; the procedure will be woken from its suspend
- and we'll go back to running through procedure steps:
- otherwise if false we leave the procedure in suspended state.</dd>
+<dd>If true, we will re-wake up this procedure; if false, the procedure stays suspended.</dd>
</dl>
</li>
</ul>
@@ -694,7 +737,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Reg
<ul class="blockList">
<li class="blockList">
<h4>toStringClassDetails</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#line.295">toStringClassDetails</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a> sb)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#line.335">toStringClassDetails</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a> sb)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClassDetails-java.lang.StringBuilder-">Procedure</a></code></span></div>
<div class="block">Extend the toString() information with the procedure details
e.g. className and parameters</div>
@@ -712,7 +755,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Reg
<ul class="blockList">
<li class="blockList">
<h4>getServer</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#line.301">getServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#line.341">getServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#getServer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">RegionTransitionProcedure</a></code></span></div>
<div class="block">Used by ServerCrashProcedure to see if this Assign/Unassign needs processing.</div>
<dl>
@@ -729,7 +772,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Reg
<ul class="blockListLast">
<li class="blockList">
<h4>getProcedureMetrics</h4>
-<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureMetrics.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureMetrics</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#line.306">getProcedureMetrics</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureMetrics.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureMetrics</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#line.346">getProcedureMetrics</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcedureMetrics-TEnvironment-">Procedure</a></code></span></div>
<div class="block">Override this method to provide procedure specific counters for submitted count, failed
count and time histogram.</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/assignment/class-use/FailedRemoteDispatchException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/class-use/FailedRemoteDispatchException.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/class-use/FailedRemoteDispatchException.html
deleted file mode 100644
index 0c35a9e..0000000
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/class-use/FailedRemoteDispatchException.html
+++ /dev/null
@@ -1,125 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class org.apache.hadoop.hbase.master.assignment.FailedRemoteDispatchException (Apache HBase 3.0.0-SNAPSHOT API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
- try {
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="Uses of Class org.apache.hadoop.hbase.master.assignment.FailedRemoteDispatchException (Apache HBase 3.0.0-SNAPSHOT API)";
- }
- }
- catch(err) {
- }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!-- -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!-- -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.master.assignment">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/class-use/FailedRemoteDispatchException.html" target="_top">Frames</a></li>
-<li><a href="FailedRemoteDispatchException.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
- allClassesLink = document.getElementById("allclasses_navbar_top");
- if(window==top) {
- allClassesLink.style.display = "block";
- }
- else {
- allClassesLink.style.display = "none";
- }
- //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!-- -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h2 title="Uses of Class org.apache.hadoop.hbase.master.assignment.FailedRemoteDispatchException" class="title">Uses of Class<br>org.apache.hadoop.hbase.master.assignment.FailedRemoteDispatchException</h2>
-</div>
-<div class="classUseContainer">No usage of org.apache.hadoop.hbase.master.assignment.FailedRemoteDispatchException</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!-- -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!-- -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.master.assignment">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/class-use/FailedRemoteDispatchException.html" target="_top">Frames</a></li>
-<li><a href="FailedRemoteDispatchException.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
- allClassesLink = document.getElementById("allclasses_navbar_bottom");
- if(window==top) {
- allClassesLink.style.display = "block";
- }
- else {
- allClassesLink.style.display = "none";
- }
- //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!-- -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>
[34/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/FailedRemoteDispatchException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/FailedRemoteDispatchException.html b/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/FailedRemoteDispatchException.html
new file mode 100644
index 0000000..53eb717
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/FailedRemoteDispatchException.html
@@ -0,0 +1,179 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.procedure2.FailedRemoteDispatchException (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class org.apache.hadoop.hbase.procedure2.FailedRemoteDispatchException (Apache HBase 3.0.0-SNAPSHOT API)";
+ }
+ }
+ catch(err) {
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/procedure2/class-use/FailedRemoteDispatchException.html" target="_top">Frames</a></li>
+<li><a href="FailedRemoteDispatchException.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.procedure2.FailedRemoteDispatchException" class="title">Uses of Class<br>org.apache.hadoop.hbase.procedure2.FailedRemoteDispatchException</h2>
+</div>
+<div class="classUseContainer">
+<ul class="blockList">
+<li class="blockList">
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
+<caption><span>Packages that use <a href="../../../../../../org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">FailedRemoteDispatchException</a></span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Package</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2</a></td>
+<td class="colLast"> </td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<ul class="blockList">
+<li class="blockList"><a name="org.apache.hadoop.hbase.procedure2">
+<!-- -->
+</a>
+<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">FailedRemoteDispatchException</a> in <a href="../../../../../../org/apache/hadoop/hbase/procedure2/package-summary.html">org.apache.hadoop.hbase.procedure2</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing subclasses, and an explanation">
+<caption><span>Subclasses of <a href="../../../../../../org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">FailedRemoteDispatchException</a> in <a href="../../../../../../org/apache/hadoop/hbase/procedure2/package-summary.html">org.apache.hadoop.hbase.procedure2</a></span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>class </code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NoNodeDispatchException</a></span></code>
+<div class="block">Used internally signaling failed queue of a remote procedure operation.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>class </code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NoServerDispatchException</a></span></code>
+<div class="block">Used internally signaling failed queue of a remote procedure operation.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>class </code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NullTargetServerDispatchException</a></span></code>
+<div class="block">Used internally signaling failed queue of a remote procedure operation.</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/procedure2/class-use/FailedRemoteDispatchException.html" target="_top">Frames</a></li>
+<li><a href="FailedRemoteDispatchException.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/NoNodeDispatchException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/NoNodeDispatchException.html b/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/NoNodeDispatchException.html
new file mode 100644
index 0000000..7952270
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/NoNodeDispatchException.html
@@ -0,0 +1,168 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.procedure2.NoNodeDispatchException (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class org.apache.hadoop.hbase.procedure2.NoNodeDispatchException (Apache HBase 3.0.0-SNAPSHOT API)";
+ }
+ }
+ catch(err) {
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/procedure2/class-use/NoNodeDispatchException.html" target="_top">Frames</a></li>
+<li><a href="NoNodeDispatchException.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.procedure2.NoNodeDispatchException" class="title">Uses of Class<br>org.apache.hadoop.hbase.procedure2.NoNodeDispatchException</h2>
+</div>
+<div class="classUseContainer">
+<ul class="blockList">
+<li class="blockList">
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
+<caption><span>Packages that use <a href="../../../../../../org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NoNodeDispatchException</a></span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Package</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2</a></td>
+<td class="colLast"> </td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<ul class="blockList">
+<li class="blockList"><a name="org.apache.hadoop.hbase.procedure2">
+<!-- -->
+</a>
+<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NoNodeDispatchException</a> in <a href="../../../../../../org/apache/hadoop/hbase/procedure2/package-summary.html">org.apache.hadoop.hbase.procedure2</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../org/apache/hadoop/hbase/procedure2/package-summary.html">org.apache.hadoop.hbase.procedure2</a> that throw <a href="../../../../../../org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NoNodeDispatchException</a></span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="typeNameLabel">RemoteProcedureDispatcher.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#addOperationToNode-TRemote-org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure-">addOperationToNode</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TRemote</a> key,
+ <a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a> rp)</code>
+<div class="block">Add a remote rpc.</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/procedure2/class-use/NoNodeDispatchException.html" target="_top">Frames</a></li>
+<li><a href="NoNodeDispatchException.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/NoServerDispatchException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/NoServerDispatchException.html b/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/NoServerDispatchException.html
new file mode 100644
index 0000000..c948ae9
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/NoServerDispatchException.html
@@ -0,0 +1,168 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.procedure2.NoServerDispatchException (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class org.apache.hadoop.hbase.procedure2.NoServerDispatchException (Apache HBase 3.0.0-SNAPSHOT API)";
+ }
+ }
+ catch(err) {
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/procedure2/class-use/NoServerDispatchException.html" target="_top">Frames</a></li>
+<li><a href="NoServerDispatchException.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.procedure2.NoServerDispatchException" class="title">Uses of Class<br>org.apache.hadoop.hbase.procedure2.NoServerDispatchException</h2>
+</div>
+<div class="classUseContainer">
+<ul class="blockList">
+<li class="blockList">
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
+<caption><span>Packages that use <a href="../../../../../../org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NoServerDispatchException</a></span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Package</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2</a></td>
+<td class="colLast"> </td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<ul class="blockList">
+<li class="blockList"><a name="org.apache.hadoop.hbase.procedure2">
+<!-- -->
+</a>
+<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NoServerDispatchException</a> in <a href="../../../../../../org/apache/hadoop/hbase/procedure2/package-summary.html">org.apache.hadoop.hbase.procedure2</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../org/apache/hadoop/hbase/procedure2/package-summary.html">org.apache.hadoop.hbase.procedure2</a> that throw <a href="../../../../../../org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NoServerDispatchException</a></span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="typeNameLabel">RemoteProcedureDispatcher.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#addOperationToNode-TRemote-org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure-">addOperationToNode</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TRemote</a> key,
+ <a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a> rp)</code>
+<div class="block">Add a remote rpc.</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/procedure2/class-use/NoServerDispatchException.html" target="_top">Frames</a></li>
+<li><a href="NoServerDispatchException.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/NullTargetServerDispatchException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/NullTargetServerDispatchException.html b/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/NullTargetServerDispatchException.html
new file mode 100644
index 0000000..c31c28a
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/NullTargetServerDispatchException.html
@@ -0,0 +1,168 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.procedure2.NullTargetServerDispatchException (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class org.apache.hadoop.hbase.procedure2.NullTargetServerDispatchException (Apache HBase 3.0.0-SNAPSHOT API)";
+ }
+ }
+ catch(err) {
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/procedure2/class-use/NullTargetServerDispatchException.html" target="_top">Frames</a></li>
+<li><a href="NullTargetServerDispatchException.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.procedure2.NullTargetServerDispatchException" class="title">Uses of Class<br>org.apache.hadoop.hbase.procedure2.NullTargetServerDispatchException</h2>
+</div>
+<div class="classUseContainer">
+<ul class="blockList">
+<li class="blockList">
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
+<caption><span>Packages that use <a href="../../../../../../org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NullTargetServerDispatchException</a></span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Package</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2</a></td>
+<td class="colLast"> </td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<ul class="blockList">
+<li class="blockList"><a name="org.apache.hadoop.hbase.procedure2">
+<!-- -->
+</a>
+<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NullTargetServerDispatchException</a> in <a href="../../../../../../org/apache/hadoop/hbase/procedure2/package-summary.html">org.apache.hadoop.hbase.procedure2</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../org/apache/hadoop/hbase/procedure2/package-summary.html">org.apache.hadoop.hbase.procedure2</a> that throw <a href="../../../../../../org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NullTargetServerDispatchException</a></span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="typeNameLabel">RemoteProcedureDispatcher.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#addOperationToNode-TRemote-org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure-">addOperationToNode</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TRemote</a> key,
+ <a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a> rp)</code>
+<div class="block">Add a remote rpc.</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/procedure2/class-use/NullTargetServerDispatchException.html" target="_top">Frames</a></li>
+<li><a href="NullTargetServerDispatchException.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/RemoteProcedureDispatcher.RemoteProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/RemoteProcedureDispatcher.RemoteProcedure.html b/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/RemoteProcedureDispatcher.RemoteProcedure.html
index 1d34c23..b33d630 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/RemoteProcedureDispatcher.RemoteProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/RemoteProcedureDispatcher.RemoteProcedure.html
@@ -329,7 +329,7 @@
<td class="colLast"><span class="typeNameLabel">RemoteProcedureDispatcher.RemoteNode.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html#add-org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure-">add</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a><<a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html" title="type parameter in RemoteProcedureDispatcher.RemoteNode">TEnv</a>,<a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html" title="type parameter in RemoteProcedureDispatcher.RemoteNode">TRemote</a>> operation)</code> </td>
</tr>
<tr class="altColor">
-<td class="colFirst"><code>boolean</code></td>
+<td class="colFirst"><code>void</code></td>
<td class="colLast"><span class="typeNameLabel">RemoteProcedureDispatcher.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#addOperationToNode-TRemote-org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure-">addOperationToNode</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TRemote</a> key,
<a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a> rp)</code>
<div class="block">Add a remote rpc.</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/procedure2/package-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/package-frame.html b/devapidocs/org/apache/hadoop/hbase/procedure2/package-frame.html
index 5ff2eb6..af80e9f 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-frame.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-frame.html
@@ -64,6 +64,10 @@
<h2 title="Exceptions">Exceptions</h2>
<ul title="Exceptions">
<li><a href="BadProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2" target="classFrame">BadProcedureException</a></li>
+<li><a href="FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2" target="classFrame">FailedRemoteDispatchException</a></li>
+<li><a href="NoNodeDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2" target="classFrame">NoNodeDispatchException</a></li>
+<li><a href="NoServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2" target="classFrame">NoServerDispatchException</a></li>
+<li><a href="NullTargetServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2" target="classFrame">NullTargetServerDispatchException</a></li>
<li><a href="ProcedureAbortedException.html" title="class in org.apache.hadoop.hbase.procedure2" target="classFrame">ProcedureAbortedException</a></li>
<li><a href="ProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2" target="classFrame">ProcedureException</a></li>
<li><a href="ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2" target="classFrame">ProcedureSuspendedException</a></li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/procedure2/package-summary.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/package-summary.html b/devapidocs/org/apache/hadoop/hbase/procedure2/package-summary.html
index e7ac6dc..f98ef2d 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-summary.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-summary.html
@@ -348,6 +348,31 @@
<td class="colLast"> </td>
</tr>
<tr class="rowColor">
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">FailedRemoteDispatchException</a></td>
+<td class="colLast">
+<div class="block">Used internally signaling failed queue of a remote procedure
+ operation.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NoNodeDispatchException</a></td>
+<td class="colLast">
+<div class="block">Used internally signaling failed queue of a remote procedure operation.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NoServerDispatchException</a></td>
+<td class="colLast">
+<div class="block">Used internally signaling failed queue of a remote procedure operation.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NullTargetServerDispatchException</a></td>
+<td class="colLast">
+<div class="block">Used internally signaling failed queue of a remote procedure operation.</div>
+</td>
+</tr>
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureAbortedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureAbortedException</a></td>
<td class="colLast">
<div class="block">Thrown when a procedure is aborted</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index 7285261..f44ba5a 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -180,6 +180,13 @@
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseIOException</span></a>
<ul>
<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/BadProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">BadProcedureException</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">FailedRemoteDispatchException</span></a>
+<ul>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">NoNodeDispatchException</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">NoServerDispatchException</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">NullTargetServerDispatchException</span></a></li>
+</ul>
+</li>
</ul>
</li>
</ul>
@@ -212,11 +219,11 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/procedure2/package-use.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/package-use.html b/devapidocs/org/apache/hadoop/hbase/procedure2/package-use.html
index d4f23ce..baabaf5 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-use.html
@@ -487,24 +487,45 @@
</td>
</tr>
<tr class="rowColor">
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/procedure2/class-use/FailedRemoteDispatchException.html#org.apache.hadoop.hbase.procedure2">FailedRemoteDispatchException</a>
+<div class="block">Used internally signaling failed queue of a remote procedure
+ operation.</div>
+</td>
+</tr>
+<tr class="altColor">
<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/procedure2/class-use/InlineChore.html#org.apache.hadoop.hbase.procedure2">InlineChore</a>
<div class="block">Inline Chores (executors internal chores).</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/procedure2/class-use/LockedResource.html#org.apache.hadoop.hbase.procedure2">LockedResource</a> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/procedure2/class-use/LockedResourceType.html#org.apache.hadoop.hbase.procedure2">LockedResourceType</a> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/procedure2/class-use/LockStatus.html#org.apache.hadoop.hbase.procedure2">LockStatus</a>
<div class="block">Interface to get status of a Lock without getting access to acquire/release lock.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/procedure2/class-use/LockType.html#org.apache.hadoop.hbase.procedure2">LockType</a> </td>
</tr>
+<tr class="rowColor">
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/procedure2/class-use/NoNodeDispatchException.html#org.apache.hadoop.hbase.procedure2">NoNodeDispatchException</a>
+<div class="block">Used internally signaling failed queue of a remote procedure operation.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/procedure2/class-use/NoServerDispatchException.html#org.apache.hadoop.hbase.procedure2">NoServerDispatchException</a>
+<div class="block">Used internally signaling failed queue of a remote procedure operation.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/procedure2/class-use/NullTargetServerDispatchException.html#org.apache.hadoop.hbase.procedure2">NullTargetServerDispatchException</a>
+<div class="block">Used internally signaling failed queue of a remote procedure operation.</div>
+</td>
+</tr>
<tr class="altColor">
<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/procedure2/class-use/Procedure.html#org.apache.hadoop.hbase.procedure2">Procedure</a>
<div class="block">Base Procedure class responsible for Procedure Metadata;
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
index d9bad50..06b2c50 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -229,13 +229,13 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottlingException.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/regionserver/CSLMImmutableSegment.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/CSLMImmutableSegment.html b/devapidocs/org/apache/hadoop/hbase/regionserver/CSLMImmutableSegment.html
index 58cd026..582d5be 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/CSLMImmutableSegment.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/CSLMImmutableSegment.html
@@ -223,7 +223,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSe
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html" title="class in org.apache.hadoop.hbase.regionserver">ImmutableSegment</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#getAllSegments--">getAllSegments</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#getNumOfSegments--">getNumOfSegments</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#getNumUniqueKeys--">getNumUniqueKeys</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#toString--">toString</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#getAllSegments--">getAllSegments</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#getNumOfSegments--">getNumOfSegments</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#getNumUniqueKeys--">getNumUniqueKeys</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#getSnapshotScanners--">getSnapshotScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#toString--">toString</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.regionserver.Segment">
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/regionserver/CellArrayImmutableSegment.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/CellArrayImmutableSegment.html b/devapidocs/org/apache/hadoop/hbase/regionserver/CellArrayImmutableSegment.html
index 70f4c68..19dfafa 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/CellArrayImmutableSegment.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/CellArrayImmutableSegment.html
@@ -252,7 +252,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSe
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html" title="class in org.apache.hadoop.hbase.regionserver">ImmutableSegment</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#getAllSegments--">getAllSegments</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#getNumOfSegments--">getNumOfSegments</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#getNumUniqueKeys--">getNumUniqueKeys</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#toString--">toString</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#getAllSegments--">getAllSegments</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#getNumOfSegments--">getNumOfSegments</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#getNumUniqueKeys--">getNumUniqueKeys</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#getSnapshotScanners--">getSnapshotScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#toString--">toString</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.regionserver.Segment">
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/regionserver/CellChunkImmutableSegment.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/CellChunkImmutableSegment.html b/devapidocs/org/apache/hadoop/hbase/regionserver/CellChunkImmutableSegment.html
index 975ec39..77dd431 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/CellChunkImmutableSegment.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/CellChunkImmutableSegment.html
@@ -291,7 +291,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSe
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html" title="class in org.apache.hadoop.hbase.regionserver">ImmutableSegment</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#getAllSegments--">getAllSegments</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#getNumOfSegments--">getNumOfSegments</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#getNumUniqueKeys--">getNumUniqueKeys</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#toString--">toString</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#getAllSegments--">getAllSegments</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#getNumOfSegments--">getNumOfSegments</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#getNumUniqueKeys--">getNumUniqueKeys</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#getSnapshotScanners--">getSnapshotScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#toString--">toString</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.regionserver.Segment">
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html b/devapidocs/org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html
index b81f11b..f09c4bb 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html
@@ -18,7 +18,7 @@
catch(err) {
}
//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -279,14 +279,18 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSe
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html#getScanners-long-">getScanners</a></span>(long readPoint)</code> </td>
</tr>
<tr id="i15" class="rowColor">
+<td class="colFirst"><code>(package private) <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html#getSnapshotScanners--">getSnapshotScanners</a></span>()</code> </td>
+</tr>
+<tr id="i16" class="altColor">
<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.html" title="class in org.apache.hadoop.hbase.regionserver">TimeRangeTracker</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html#getTimeRangeTracker--">getTimeRangeTracker</a></span>()</code> </td>
</tr>
-<tr id="i16" class="altColor">
+<tr id="i17" class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html#headSet-org.apache.hadoop.hbase.Cell-">headSet</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstKeyOnRow)</code> </td>
</tr>
-<tr id="i17" class="rowColor">
+<tr id="i18" class="altColor">
<td class="colFirst"><code>long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html#incMemStoreSize-long-long-long-">incMemStoreSize</a></span>(long delta,
long heapOverhead,
@@ -294,37 +298,37 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSe
<div class="block">Updates the heap size counter of the segment by the given delta</div>
</td>
</tr>
-<tr id="i18" class="altColor">
+<tr id="i19" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html#incScannerCount--">incScannerCount</a></span>()</code> </td>
</tr>
-<tr id="i19" class="rowColor">
+<tr id="i20" class="altColor">
<td class="colFirst"><code>protected long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html#indexEntrySize--">indexEntrySize</a></span>()</code> </td>
</tr>
-<tr id="i20" class="altColor">
+<tr id="i21" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html#internalAdd-org.apache.hadoop.hbase.Cell-boolean-org.apache.hadoop.hbase.regionserver.MemStoreSizing-">internalAdd</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell,
boolean mslabUsed,
<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSizing.html" title="interface in org.apache.hadoop.hbase.regionserver">MemStoreSizing</a> memstoreSizing)</code> </td>
</tr>
-<tr id="i21" class="rowColor">
+<tr id="i22" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html#isEmpty--">isEmpty</a></span>()</code> </td>
</tr>
-<tr id="i22" class="altColor">
+<tr id="i23" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html#isTagsPresent--">isTagsPresent</a></span>()</code> </td>
</tr>
-<tr id="i23" class="rowColor">
+<tr id="i24" class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html#iterator--">iterator</a></span>()</code> </td>
</tr>
-<tr id="i24" class="altColor">
+<tr id="i25" class="rowColor">
<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html#last--">last</a></span>()</code> </td>
</tr>
-<tr id="i25" class="rowColor">
+<tr id="i26" class="altColor">
<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html#maybeCloneWithAllocator-org.apache.hadoop.hbase.Cell-boolean-">maybeCloneWithAllocator</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell,
boolean forceCloneOfBigCell)</code>
@@ -332,7 +336,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSe
otherwise the given cell is returned</div>
</td>
</tr>
-<tr id="i26" class="altColor">
+<tr id="i27" class="rowColor">
<td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html" title="class in org.apache.hadoop.hbase.regionserver">CompositeImmutableSegment</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html#setCellSet-org.apache.hadoop.hbase.regionserver.CellSet-org.apache.hadoop.hbase.regionserver.CellSet-">setCellSet</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/CellSet.html" title="class in org.apache.hadoop.hbase.regionserver">CellSet</a> cellSetOld,
<a href="../../../../../org/apache/hadoop/hbase/regionserver/CellSet.html" title="class in org.apache.hadoop.hbase.regionserver">CellSet</a> cellSetNew)</code>
@@ -340,22 +344,22 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSe
immutable CellSet after its creation in immutable segment constructor</div>
</td>
</tr>
-<tr id="i27" class="rowColor">
+<tr id="i28" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html#shouldSeek-org.apache.hadoop.hbase.io.TimeRange-long-">shouldSeek</a></span>(<a href="../../../../../org/apache/hadoop/hbase/io/TimeRange.html" title="class in org.apache.hadoop.hbase.io">TimeRange</a> tr,
long oldestUnexpiredTS)</code> </td>
</tr>
-<tr id="i28" class="altColor">
+<tr id="i29" class="rowColor">
<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html#tailSet-org.apache.hadoop.hbase.Cell-">tailSet</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstCell)</code>
<div class="block">Returns a subset of the segment cell set, which starts with the given cell</div>
</td>
</tr>
-<tr id="i29" class="rowColor">
+<tr id="i30" class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html#toString--">toString</a></span>()</code> </td>
</tr>
-<tr id="i30" class="altColor">
+<tr id="i31" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html#updateMetaInfo-org.apache.hadoop.hbase.Cell-boolean-boolean-org.apache.hadoop.hbase.regionserver.MemStoreSizing-">updateMetaInfo</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cellToAdd,
boolean succ,
@@ -891,7 +895,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSe
<a name="toString--">
<!-- -->
</a>
-<ul class="blockListLast">
+<ul class="blockList">
<li class="blockList">
<h4>toString</h4>
<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html#line.274">toString</a>()</pre>
@@ -901,6 +905,19 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSe
</dl>
</li>
</ul>
+<a name="getSnapshotScanners--">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>getSnapshotScanners</h4>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html#line.284">getSnapshotScanners</a>()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#getSnapshotScanners--">getSnapshotScanners</a></code> in class <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html" title="class in org.apache.hadoop.hbase.regionserver">ImmutableSegment</a></code></dd>
+</dl>
+</li>
+</ul>
</li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/regionserver/ImmutableSegment.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/ImmutableSegment.html b/devapidocs/org/apache/hadoop/hbase/regionserver/ImmutableSegment.html
index f2cf000..aa21ddf 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/ImmutableSegment.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/ImmutableSegment.html
@@ -18,7 +18,7 @@
catch(err) {
}
//-->
-var methods = {"i0":6,"i1":10,"i2":10,"i3":10,"i4":10};
+var methods = {"i0":6,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -238,6 +238,10 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/Segment.htm
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#getNumUniqueKeys--">getNumUniqueKeys</a></span>()</code> </td>
</tr>
<tr id="i4" class="altColor">
+<td class="colFirst"><code>(package private) <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#getSnapshotScanners--">getSnapshotScanners</a></span>()</code> </td>
+</tr>
+<tr id="i5" class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#toString--">toString</a></span>()</code> </td>
</tr>
@@ -388,7 +392,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/Segment.htm
<a name="toString--">
<!-- -->
</a>
-<ul class="blockListLast">
+<ul class="blockList">
<li class="blockList">
<h4>toString</h4>
<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#line.82">toString</a>()</pre>
@@ -398,6 +402,15 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/Segment.htm
</dl>
</li>
</ul>
+<a name="getSnapshotScanners--">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>getSnapshotScanners</h4>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ImmutableSegment.html#line.88">getSnapshotScanners</a>()</pre>
+</li>
+</ul>
</li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/regionserver/KeyValueScanner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/KeyValueScanner.html b/devapidocs/org/apache/hadoop/hbase/regionserver/KeyValueScanner.html
index 64c839f..ab235ad 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/KeyValueScanner.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/KeyValueScanner.html
@@ -105,7 +105,7 @@ var activeTableTab = "activeTableTab";
</dl>
<dl>
<dt>All Known Implementing Classes:</dt>
-<dd><a href="../../../../../org/apache/hadoop/hbase/util/CollectionBackedScanner.html" title="class in org.apache.hadoop.hbase.util">CollectionBackedScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">KeyValueHeap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MobStoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">MobStoreScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/NonLazyKeyValueScanner.html" title="class in org.apache.hadoop.hbase.regionserver">NonLazyKeyValueScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.html" title="class in org.apache.hadoop.hbase.regionserver">NonReversedNonLazyKeyValueScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReversedKeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">ReversedKeyValueH
eap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReversedMobStoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">ReversedMobStoreScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">ReversedStoreScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/SegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">SegmentScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></dd>
+<dd><a href="../../../../../org/apache/hadoop/hbase/util/CollectionBackedScanner.html" title="class in org.apache.hadoop.hbase.util">CollectionBackedScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">KeyValueHeap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MobStoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">MobStoreScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/NonLazyKeyValueScanner.html" title="class in org.apache.hadoop.hbase.regionserver">NonLazyKeyValueScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.html" title="class in org.apache.hadoop.hbase.regionserver">NonReversedNonLazyKeyValueScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReversedKeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">ReversedKeyValueH
eap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReversedMobStoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">ReversedMobStoreScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">ReversedStoreScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/SegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">SegmentScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">SnapshotSegmentScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></dd>
</dl>
<hr>
<br>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.html b/devapidocs/org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.html
index 858e9be..df55cd7 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
</dl>
<dl>
<dt>Direct Known Subclasses:</dt>
-<dd><a href="../../../../../org/apache/hadoop/hbase/util/CollectionBackedScanner.html" title="class in org.apache.hadoop.hbase.util">CollectionBackedScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">KeyValueHeap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></dd>
+<dd><a href="../../../../../org/apache/hadoop/hbase/util/CollectionBackedScanner.html" title="class in org.apache.hadoop.hbase.util">CollectionBackedScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">KeyValueHeap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">SnapshotSegmentScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></dd>
</dl>
<hr>
<br>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/regionserver/Shipper.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/Shipper.html b/devapidocs/org/apache/hadoop/hbase/regionserver/Shipper.html
index 71278d6..1f9c648 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/Shipper.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/Shipper.html
@@ -105,7 +105,7 @@ var activeTableTab = "activeTableTab";
</dl>
<dl>
<dt>All Known Implementing Classes:</dt>
-<dd><a href="../../../../../org/apache/hadoop/hbase/util/CollectionBackedScanner.html" title="class in org.apache.hadoop.hbase.util">CollectionBackedScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.EncodedScanner.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileReaderImpl.EncodedScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.HFileScannerImpl.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileReaderImpl.HFileScannerImpl</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.RegionScannerImpl</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">KeyValueHeap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MobStoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">MobS
toreScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/NonLazyKeyValueScanner.html" title="class in org.apache.hadoop.hbase.regionserver">NonLazyKeyValueScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.html" title="class in org.apache.hadoop.hbase.regionserver">NonReversedNonLazyKeyValueScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReversedKeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">ReversedKeyValueHeap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReversedMobStoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">ReversedMobStoreScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReversedRegionScannerImpl.html" title="class in org.apache.hadoop.hbase.regionserver">ReversedRegionScannerImpl</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html" title=
"class in org.apache.hadoop.hbase.regionserver">ReversedStoreScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/SegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">SegmentScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></dd>
+<dd><a href="../../../../../org/apache/hadoop/hbase/util/CollectionBackedScanner.html" title="class in org.apache.hadoop.hbase.util">CollectionBackedScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.EncodedScanner.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileReaderImpl.EncodedScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.HFileScannerImpl.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileReaderImpl.HFileScannerImpl</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.RegionScannerImpl</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">KeyValueHeap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MobStoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">MobS
toreScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/NonLazyKeyValueScanner.html" title="class in org.apache.hadoop.hbase.regionserver">NonLazyKeyValueScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.html" title="class in org.apache.hadoop.hbase.regionserver">NonReversedNonLazyKeyValueScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReversedKeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">ReversedKeyValueHeap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReversedMobStoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">ReversedMobStoreScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReversedRegionScannerImpl.html" title="class in org.apache.hadoop.hbase.regionserver">ReversedRegionScannerImpl</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html" title=
"class in org.apache.hadoop.hbase.regionserver">ReversedStoreScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/SegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">SegmentScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">SnapshotSegmentScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></dd>
</dl>
<hr>
<br>
[36/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html
index e73b7da..46943f3 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html
@@ -119,7 +119,7 @@ var activeTableTab = "activeTableTab";
<hr>
<br>
<pre>@InterfaceAudience.Private
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.44">RefreshPeerProcedure</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.45">RefreshPeerProcedure</a>
extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>>
implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a><<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>,<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>></pre>
</li>
@@ -353,7 +353,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockList">
<li class="blockList">
<h4>LOG</h4>
-<pre>private static final org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.47">LOG</a></pre>
+<pre>private static final org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.48">LOG</a></pre>
</li>
</ul>
<a name="peerId">
@@ -362,7 +362,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockList">
<li class="blockList">
<h4>peerId</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.49">peerId</a></pre>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.50">peerId</a></pre>
</li>
</ul>
<a name="type">
@@ -371,7 +371,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockList">
<li class="blockList">
<h4>type</h4>
-<pre>private <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface.PeerOperationType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.51">type</a></pre>
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface.PeerOperationType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.52">type</a></pre>
</li>
</ul>
<a name="targetServer">
@@ -380,7 +380,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockList">
<li class="blockList">
<h4>targetServer</h4>
-<pre>private <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.55">targetServer</a></pre>
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.56">targetServer</a></pre>
</li>
</ul>
<a name="dispatched">
@@ -389,7 +389,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockList">
<li class="blockList">
<h4>dispatched</h4>
-<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.57">dispatched</a></pre>
+<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.58">dispatched</a></pre>
</li>
</ul>
<a name="event">
@@ -398,7 +398,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockList">
<li class="blockList">
<h4>event</h4>
-<pre>private <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureEvent.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureEvent</a><?> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.59">event</a></pre>
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureEvent.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureEvent</a><?> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.60">event</a></pre>
</li>
</ul>
<a name="succ">
@@ -407,7 +407,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockListLast">
<li class="blockList">
<h4>succ</h4>
-<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.61">succ</a></pre>
+<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.62">succ</a></pre>
</li>
</ul>
</li>
@@ -424,7 +424,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockList">
<li class="blockList">
<h4>RefreshPeerProcedure</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.63">RefreshPeerProcedure</a>()</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.64">RefreshPeerProcedure</a>()</pre>
</li>
</ul>
<a name="RefreshPeerProcedure-java.lang.String-org.apache.hadoop.hbase.master.procedure.PeerProcedureInterface.PeerOperationType-org.apache.hadoop.hbase.ServerName-">
@@ -433,7 +433,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockListLast">
<li class="blockList">
<h4>RefreshPeerProcedure</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.66">RefreshPeerProcedure</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId,
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.67">RefreshPeerProcedure</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId,
<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface.PeerOperationType</a> type,
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> targetServer)</pre>
</li>
@@ -452,7 +452,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockList">
<li class="blockList">
<h4>getPeerId</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.73">getPeerId</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.74">getPeerId</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html#getPeerId--">getPeerId</a></code> in interface <code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface</a></code></dd>
@@ -465,7 +465,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockList">
<li class="blockList">
<h4>getPeerOperationType</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface.PeerOperationType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.78">getPeerOperationType</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface.PeerOperationType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.79">getPeerOperationType</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html#getPeerOperationType--">getPeerOperationType</a></code> in interface <code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface</a></code></dd>
@@ -478,7 +478,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockList">
<li class="blockList">
<h4>toPeerModificationType</h4>
-<pre>private static org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationType <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.82">toPeerModificationType</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface.PeerOperationType</a> type)</pre>
+<pre>private static org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationType <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.83">toPeerModificationType</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface.PeerOperationType</a> type)</pre>
</li>
</ul>
<a name="toPeerOperationType-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationType-">
@@ -487,7 +487,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockList">
<li class="blockList">
<h4>toPeerOperationType</h4>
-<pre>private static <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface.PeerOperationType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.99">toPeerOperationType</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationType type)</pre>
+<pre>private static <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface.PeerOperationType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.100">toPeerOperationType</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationType type)</pre>
</li>
</ul>
<a name="remoteCallBuild-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.ServerName-">
@@ -496,7 +496,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockList">
<li class="blockList">
<h4>remoteCallBuild</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteOperation</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.117">remoteCallBuild</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteOperation</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.118">remoteCallBuild</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> remote)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html#remoteCallBuild-TEnv-TRemote-">RemoteProcedureDispatcher.RemoteProcedure</a></code></span></div>
<div class="block">For building the remote operation.</div>
@@ -512,7 +512,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockList">
<li class="blockList">
<h4>complete</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.124">complete</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.125">complete</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a> error)</pre>
</li>
</ul>
@@ -522,7 +522,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockList">
<li class="blockList">
<h4>remoteCallFailed</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.143">remoteCallFailed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.144">remoteCallFailed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> remote,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a> exception)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html#remoteCallFailed-TEnv-TRemote-java.io.IOException-">RemoteProcedureDispatcher.RemoteProcedure</a></code></span></div>
@@ -539,7 +539,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockList">
<li class="blockList">
<h4>remoteOperationCompleted</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.149">remoteOperationCompleted</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.150">remoteOperationCompleted</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html#remoteOperationCompleted-TEnv-">RemoteProcedureDispatcher.RemoteProcedure</a></code></span></div>
<div class="block">Called when RS tells the remote procedure is succeeded through the
<code>reportProcedureDone</code> method.</div>
@@ -555,7 +555,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockList">
<li class="blockList">
<h4>remoteOperationFailed</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.154">remoteOperationFailed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.155">remoteOperationFailed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureException</a> error)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html#remoteOperationFailed-TEnv-org.apache.hadoop.hbase.procedure2.RemoteProcedureException-">RemoteProcedureDispatcher.RemoteProcedure</a></code></span></div>
<div class="block">Called when RS tells the remote procedure is failed through the <code>reportProcedureDone</code>
@@ -572,7 +572,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockList">
<li class="blockList">
<h4>execute</h4>
-<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>>[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.160">execute</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>>[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.161">execute</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
throws <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureYieldException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureYieldException</a>,
<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -602,7 +602,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockList">
<li class="blockList">
<h4>rollback</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.182">rollback</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.185">rollback</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#rollback-TEnvironment-">Procedure</a></code></span></div>
@@ -629,7 +629,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockList">
<li class="blockList">
<h4>abort</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.187">abort</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.190">abort</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#abort-TEnvironment-">Procedure</a></code></span></div>
<div class="block">The abort() call is asynchronous and each procedure must decide how to deal
with it, if they want to be abortable. The simplest implementation
@@ -652,7 +652,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockList">
<li class="blockList">
<h4>serializeStateData</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.193">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.196">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
<div class="block">The user-level code of the procedure may have some state to
@@ -674,7 +674,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockListLast">
<li class="blockList">
<h4>deserializeStateData</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.200">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#line.203">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
<div class="block">Called on store load to allow the user to decode the previously serialized
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
index 9eb46aa..3e1ea7f 100644
--- a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
@@ -125,8 +125,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">MonitoredTask.State</span></a></li>
<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskFilter.TaskType.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor.TaskFilter.TaskType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">MonitoredTask.State</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/package-tree.html b/devapidocs/org/apache/hadoop/hbase/package-tree.html
index 6c65f8f..e23ac85 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -437,19 +437,19 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/procedure2/DelayedProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/DelayedProcedure.html b/devapidocs/org/apache/hadoop/hbase/procedure2/DelayedProcedure.html
index 66e5578..106c1e8 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/DelayedProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/DelayedProcedure.html
@@ -44,7 +44,7 @@
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/BadProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Next Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/hadoop/hbase/procedure2/DelayedProcedure.html" target="_top">Frames</a></li>
@@ -235,7 +235,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/util/DelayedU
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/BadProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Next Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/hadoop/hbase/procedure2/DelayedProcedure.html" target="_top">Frames</a></li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html b/devapidocs/org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html
new file mode 100644
index 0000000..64b5c06
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html
@@ -0,0 +1,280 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>FailedRemoteDispatchException (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="FailedRemoteDispatchException (Apache HBase 3.0.0-SNAPSHOT API)";
+ }
+ }
+ catch(err) {
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/FailedRemoteDispatchException.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/DelayedProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" target="_top">Frames</a></li>
+<li><a href="FailedRemoteDispatchException.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Nested | </li>
+<li>Field | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#methods.inherited.from.class.java.lang.Throwable">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#constructor.detail">Constr</a> | </li>
+<li>Method</li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.procedure2</div>
+<h2 title="Class FailedRemoteDispatchException" class="title">Class FailedRemoteDispatchException</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">java.lang.Throwable</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">java.lang.Exception</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">java.io.IOException</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">org.apache.hadoop.hbase.HBaseIOException</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.procedure2.FailedRemoteDispatchException</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a></dd>
+</dl>
+<dl>
+<dt>Direct Known Subclasses:</dt>
+<dd><a href="../../../../../org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NoNodeDispatchException</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NoServerDispatchException</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NullTargetServerDispatchException</a></dd>
+</dl>
+<hr>
+<br>
+<pre>@InterfaceAudience.Private
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html#line.29">FailedRemoteDispatchException</a>
+extends <a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
+<div class="block">Used internally signaling failed queue of a remote procedure
+ operation.</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../serialized-form.html#org.apache.hadoop.hbase.procedure2.FailedRemoteDispatchException">Serialized Form</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html#FailedRemoteDispatchException-java.lang.String-">FailedRemoteDispatchException</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> msg)</code> </td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Throwable">
+<!-- -->
+</a>
+<h3>Methods inherited from class java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#addSuppressed-java.lang.Throwable-" title="class or interface in java.lang">addSuppressed</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#fillInStackTrace--" title="class or interface in java.lang">fillInStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#getCause--" title="class or interface in java.lang">getCause</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#getLocalizedMessage--" title="class or interface in java.lang">getLocalizedMessage</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#getMessage--" title="class or interface in java.lang">getMessage</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#getStackTrace--" title="class or
interface in java.lang">getStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#getSuppressed--" title="class or interface in java.lang">getSuppressed</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#initCause-java.lang.Throwable-" title="class or interface in java.lang">initCause</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace--" title="class or interface in java.lang">printStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace-java.io.PrintStream-" title="class or interface in java.lang">printStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace-java.io.PrintWriter-" title="class or interface in java.lang">printStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/
api/java/lang/Throwable.html?is-external=true#setStackTrace-java.lang.StackTraceElement:A-" title="class or interface in java.lang">setStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="FailedRemoteDispatchException-java.lang.String-">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>FailedRemoteDispatchException</h4>
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html#line.30">FailedRemoteDispatchException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> msg)</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/FailedRemoteDispatchException.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/DelayedProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/InlineChore.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" target="_top">Frames</a></li>
+<li><a href="FailedRemoteDispatchException.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Nested | </li>
+<li>Field | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#methods.inherited.from.class.java.lang.Throwable">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#constructor.detail">Constr</a> | </li>
+<li>Method</li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/procedure2/InlineChore.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/InlineChore.html b/devapidocs/org/apache/hadoop/hbase/procedure2/InlineChore.html
index cb9e50c..f17bbac 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/InlineChore.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/InlineChore.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/DelayedProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Prev Class</span></a></li>
<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/LockAndQueue.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
@@ -322,7 +322,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/DelayedProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Prev Class</span></a></li>
<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/LockAndQueue.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/procedure2/LockType.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/LockType.html b/devapidocs/org/apache/hadoop/hbase/procedure2/LockType.html
index b164f75..f0ca4fd 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/LockType.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/LockType.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/LockStatus.html" title="interface in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/OnePhaseProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Next Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/hadoop/hbase/procedure2/LockType.html" target="_top">Frames</a></li>
@@ -298,7 +298,7 @@ not permitted.)</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/LockStatus.html" title="interface in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/OnePhaseProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Next Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/hadoop/hbase/procedure2/LockType.html" target="_top">Frames</a></li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html b/devapidocs/org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html
new file mode 100644
index 0000000..4825b96
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html
@@ -0,0 +1,282 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NoNodeDispatchException (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="NoNodeDispatchException (Apache HBase 3.0.0-SNAPSHOT API)";
+ }
+ }
+ catch(err) {
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/NoNodeDispatchException.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html" target="_top">Frames</a></li>
+<li><a href="NoNodeDispatchException.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Nested | </li>
+<li>Field | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#methods.inherited.from.class.java.lang.Throwable">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#constructor.detail">Constr</a> | </li>
+<li>Method</li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.procedure2</div>
+<h2 title="Class NoNodeDispatchException" class="title">Class NoNodeDispatchException</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">java.lang.Throwable</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">java.lang.Exception</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">java.io.IOException</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">org.apache.hadoop.hbase.HBaseIOException</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2.FailedRemoteDispatchException</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.procedure2.NoNodeDispatchException</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a></dd>
+</dl>
+<hr>
+<br>
+<pre>@InterfaceAudience.Private
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html#line.29">NoNodeDispatchException</a>
+extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">FailedRemoteDispatchException</a></pre>
+<div class="block">Used internally signaling failed queue of a remote procedure operation.
+ In particular, no dispatch Node was found for the passed server name
+ key AFTER queuing dispatch.</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../serialized-form.html#org.apache.hadoop.hbase.procedure2.NoNodeDispatchException">Serialized Form</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html#NoNodeDispatchException-java.lang.String-">NoNodeDispatchException</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> msg)</code> </td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Throwable">
+<!-- -->
+</a>
+<h3>Methods inherited from class java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#addSuppressed-java.lang.Throwable-" title="class or interface in java.lang">addSuppressed</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#fillInStackTrace--" title="class or interface in java.lang">fillInStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#getCause--" title="class or interface in java.lang">getCause</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#getLocalizedMessage--" title="class or interface in java.lang">getLocalizedMessage</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#getMessage--" title="class or interface in java.lang">getMessage</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#getStackTrace--" title="class or
interface in java.lang">getStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#getSuppressed--" title="class or interface in java.lang">getSuppressed</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#initCause-java.lang.Throwable-" title="class or interface in java.lang">initCause</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace--" title="class or interface in java.lang">printStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace-java.io.PrintStream-" title="class or interface in java.lang">printStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace-java.io.PrintWriter-" title="class or interface in java.lang">printStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/
api/java/lang/Throwable.html?is-external=true#setStackTrace-java.lang.StackTraceElement:A-" title="class or interface in java.lang">setStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="NoNodeDispatchException-java.lang.String-">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>NoNodeDispatchException</h4>
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html#line.30">NoNodeDispatchException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> msg)</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/NoNodeDispatchException.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html" target="_top">Frames</a></li>
+<li><a href="NoNodeDispatchException.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Nested | </li>
+<li>Field | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#methods.inherited.from.class.java.lang.Throwable">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#constructor.detail">Constr</a> | </li>
+<li>Method</li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
[48/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 17459c2..5dd7b1b 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180604" />
+ <meta name="Date-Revision-yyyymmdd" content="20180605" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Checkstyle Results</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -281,10 +281,10 @@
<th><img src="images/icon_warning_sml.gif" alt="" /> Warnings</th>
<th><img src="images/icon_error_sml.gif" alt="" /> Errors</th></tr>
<tr class="b">
-<td>3621</td>
+<td>3626</td>
<td>0</td>
<td>0</td>
-<td>16261</td></tr></table></div>
+<td>16252</td></tr></table></div>
<div class="section">
<h2><a name="Files"></a>Files</h2>
<table border="0" class="table table-striped">
@@ -4987,7 +4987,7 @@
<td><a href="#org.apache.hadoop.hbase.master.assignment.TestAssignmentManager.java">org/apache/hadoop/hbase/master/assignment/TestAssignmentManager.java</a></td>
<td>0</td>
<td>0</td>
-<td>16</td></tr>
+<td>6</td></tr>
<tr class="a">
<td><a href="#org.apache.hadoop.hbase.master.assignment.TestAssignmentOnRSCrash.java">org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.java</a></td>
<td>0</td>
@@ -5787,7 +5787,7 @@
<td><a href="#org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.java">org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.java</a></td>
<td>0</td>
<td>0</td>
-<td>4</td></tr>
+<td>5</td></tr>
<tr class="a">
<td><a href="#org.apache.hadoop.hbase.procedure2.RemoteProcedureException.java">org/apache/hadoop/hbase/procedure2/RemoteProcedureException.java</a></td>
<td>0</td>
@@ -10106,7 +10106,7 @@
<li>caseIndent: <tt>"2"</tt></li>
<li>basicOffset: <tt>"2"</tt></li>
<li>lineWrappingIndentation: <tt>"2"</tt></li></ul></td>
-<td>5236</td>
+<td>5227</td>
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td></tr>
<tr class="a">
<td>javadoc</td>
@@ -64126,73 +64126,73 @@
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>2913</td></tr>
+<td>2916</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>3089</td></tr>
+<td>3092</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>3091</td></tr>
+<td>3094</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 109).</td>
-<td>3161</td></tr>
+<td>3164</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>3182</td></tr>
+<td>3185</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'for' construct must use '{}'s.</td>
-<td>3212</td></tr>
+<td>3215</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3219</td></tr>
+<td>3222</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>3224</td></tr>
+<td>3227</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>3253</td></tr>
+<td>3256</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 111).</td>
-<td>3351</td></tr>
+<td>3354</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3497</td></tr>
+<td>3512</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>3547</td></tr></table></div>
+<td>3562</td></tr></table></div>
<div class="section">
<h3 id="org.apache.hadoop.hbase.master.HMasterCommandLine.java">org/apache/hadoop/hbase/master/HMasterCommandLine.java</h3>
<table border="0" class="table table-striped">
@@ -64648,13 +64648,13 @@
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1597</td></tr>
+<td>1601</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1658</td></tr></table></div>
+<td>1662</td></tr></table></div>
<div class="section">
<h3 id="org.apache.hadoop.hbase.master.MasterServices.java">org/apache/hadoop/hbase/master/MasterServices.java</h3>
<table border="0" class="table table-striped">
@@ -64855,61 +64855,61 @@
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>363</td></tr>
+<td>364</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>371</td></tr>
+<td>372</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>378</td></tr>
+<td>379</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>386</td></tr>
+<td>387</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>394</td></tr>
+<td>395</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>JavadocTagContinuationIndentation</td>
<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>401</td></tr>
+<td>402</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>402</td></tr>
+<td>403</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>407</td></tr>
+<td>408</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>JavadocTagContinuationIndentation</td>
<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>409</td></tr>
+<td>410</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>410</td></tr></table></div>
+<td>411</td></tr></table></div>
<div class="section">
<h3 id="org.apache.hadoop.hbase.master.MasterStatusServlet.java">org/apache/hadoop/hbase/master/MasterStatusServlet.java</h3>
<table border="0" class="table table-striped">
@@ -66028,73 +66028,73 @@
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>686</td></tr>
+<td>692</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>725</td></tr>
+<td>731</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>756</td></tr>
+<td>762</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>758</td></tr>
+<td>764</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>770</td></tr>
+<td>776</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>772</td></tr>
+<td>778</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>776</td></tr>
+<td>782</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>823</td></tr>
+<td>829</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 106).</td>
-<td>852</td></tr>
+<td>858</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 106).</td>
-<td>865</td></tr>
+<td>871</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 107).</td>
-<td>866</td></tr>
+<td>872</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 103).</td>
-<td>888</td></tr></table></div>
+<td>894</td></tr></table></div>
<div class="section">
<h3 id="org.apache.hadoop.hbase.master.SnapshotOfRegionAssignmentFromMeta.java">org/apache/hadoop/hbase/master/SnapshotOfRegionAssignmentFromMeta.java</h3>
<table border="0" class="table table-striped">
@@ -67588,85 +67588,85 @@
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>1161</td></tr>
+<td>1164</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>1163</td></tr>
+<td>1166</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>EmptyBlock</td>
<td>Must have at least one statement.</td>
-<td>1261</td></tr>
+<td>1264</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>JavadocTagContinuationIndentation</td>
<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>1295</td></tr>
+<td>1298</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>1412</td></tr>
+<td>1415</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1430</td></tr>
+<td>1433</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>1432</td></tr>
+<td>1435</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>1435</td></tr>
+<td>1438</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>1440</td></tr>
+<td>1443</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>EmptyBlock</td>
<td>Must have at least one statement.</td>
-<td>1517</td></tr>
+<td>1520</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>1705</td></tr>
+<td>1708</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>1830</td></tr>
+<td>1833</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'lambda arguments' has incorrect indentation level 8, expected level should be 6.</td>
-<td>1878</td></tr>
+<td>1881</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>1895</td></tr></table></div>
+<td>1898</td></tr></table></div>
<div class="section">
<h3 id="org.apache.hadoop.hbase.master.assignment.GCMergedRegionsProcedure.java">org/apache/hadoop/hbase/master/assignment/GCMergedRegionsProcedure.java</h3>
<table border="0" class="table table-striped">
@@ -68125,139 +68125,139 @@
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>397</td></tr>
+<td>423</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>398</td></tr>
+<td>424</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>475</td></tr>
+<td>501</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>483</td></tr>
+<td>509</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>492</td></tr>
+<td>518</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>501</td></tr>
+<td>527</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>561</td></tr>
+<td>587</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>JavadocTagContinuationIndentation</td>
<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>570</td></tr>
+<td>596</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>576</td></tr>
+<td>602</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>577</td></tr>
+<td>603</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>590</td></tr>
+<td>616</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>668</td></tr>
+<td>703</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>672</td></tr>
+<td>707</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>730</td></tr>
+<td>765</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'for' has incorrect indentation level 8, expected level should be 6.</td>
-<td>769</td></tr>
+<td>804</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'if' has incorrect indentation level 10, expected level should be 8.</td>
-<td>770</td></tr>
+<td>805</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'if' child has incorrect indentation level 12, expected level should be 10.</td>
-<td>771</td></tr>
+<td>806</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'if rcurly' has incorrect indentation level 10, expected level should be 8.</td>
-<td>772</td></tr>
+<td>807</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'for rcurly' has incorrect indentation level 8, expected level should be 6.</td>
-<td>773</td></tr>
+<td>808</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>783</td></tr>
+<td>818</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>809</td></tr>
+<td>844</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>815</td></tr>
+<td>850</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>921</td></tr></table></div>
+<td>956</td></tr></table></div>
<div class="section">
<h3 id="org.apache.hadoop.hbase.master.assignment.RegionTransitionProcedure.java">org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.java</h3>
<table border="0" class="table table-striped">
@@ -68272,43 +68272,43 @@
<td>imports</td>
<td>ImportOrder</td>
<td>Wrong order for 'org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionState' import.</td>
-<td>37</td></tr>
+<td>38</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>imports</td>
<td>ImportOrder</td>
<td>Wrong order for 'org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting' import.</td>
-<td>39</td></tr>
+<td>40</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>imports</td>
<td>ImportOrder</td>
<td>Wrong order for 'org.apache.yetus.audience.InterfaceAudience' import.</td>
-<td>40</td></tr>
+<td>41</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>JavadocTagContinuationIndentation</td>
<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>208</td></tr>
+<td>209</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>JavadocTagContinuationIndentation</td>
<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>209</td></tr>
+<td>210</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>JavadocTagContinuationIndentation</td>
<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>238</td></tr>
+<td>237</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>coding</td>
<td>MissingSwitchDefault</td>
<td>switch without "default" clause.</td>
-<td>325</td></tr></table></div>
+<td>321</td></tr></table></div>
<div class="section">
<h3 id="org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.java">org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.java</h3>
<table border="0" class="table table-striped">
@@ -68395,82 +68395,22 @@
<td>664</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>722</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>723</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>724</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>725</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>726</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>727</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>728</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>735</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>736</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>737</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>coding</td>
<td>MissingSwitchDefault</td>
<td>switch without "default" clause.</td>
-<td>748</td></tr>
+<td>764</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>coding</td>
<td>MissingSwitchDefault</td>
<td>switch without "default" clause.</td>
-<td>759</td></tr>
+<td>775</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 112).</td>
-<td>775</td></tr></table></div>
+<td>791</td></tr></table></div>
<div class="section">
<h3 id="org.apache.hadoop.hbase.master.assignment.TestAssignmentOnRSCrash.java">org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.java</h3>
<table border="0" class="table table-striped">
@@ -68557,19 +68497,19 @@
<td>blocks</td>
<td>EmptyBlock</td>
<td>Must have at least one statement.</td>
-<td>206</td></tr>
+<td>207</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 101).</td>
-<td>234</td></tr>
+<td>235</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 101).</td>
-<td>248</td></tr></table></div>
+<td>249</td></tr></table></div>
<div class="section">
<h3 id="org.apache.hadoop.hbase.master.assignment.Util.java">org/apache/hadoop/hbase/master/assignment/Util.java</h3>
<table border="0" class="table table-striped">
@@ -73195,43 +73135,43 @@
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>200</td></tr>
+<td>203</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>201</td></tr>
+<td>204</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>217</td></tr>
+<td>220</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>244</td></tr>
+<td>246</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>274</td></tr>
+<td>276</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 128).</td>
-<td>329</td></tr>
+<td>331</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>402</td></tr></table></div>
+<td>404</td></tr></table></div>
<div class="section">
<h3 id="org.apache.hadoop.hbase.master.procedure.TestCreateTableProcedure.java">org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.java</h3>
<table border="0" class="table table-striped">
@@ -76867,50 +76807,56 @@
<td>39</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
+<td>169</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>191</td></tr>
-<tr class="a">
+<td>192</td></tr>
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>256</td></tr>
-<tr class="b">
+<td>257</td></tr>
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>257</td></tr></table></div>
+<td>258</td></tr></table></div>
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.RemoteProcedureException.java">org/apache/hadoop/hbase/procedure2/RemoteProcedureException.java</h3>
<table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>imports</td>
<td>ImportOrder</td>
<td>Wrong order for 'org.apache.hadoop.hbase.util.ForeignExceptionUtil' import.</td>
<td>26</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>52</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>53</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
@@ -76919,31 +76865,31 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.RootProcedureState.java">org/apache/hadoop/hbase/procedure2/RootProcedureState.java</h3>
<table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>94</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>122</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>157</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
@@ -76952,43 +76898,43 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.StateMachineProcedure.java">org/apache/hadoop/hbase/procedure2/StateMachineProcedure.java</h3>
<table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
<td>90</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>159</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
<td>166</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>171</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>190</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
@@ -76997,19 +76943,19 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.TestProcedureExecution.java">org/apache/hadoop/hbase/procedure2/TestProcedureExecution.java</h3>
<table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>LeftCurly</td>
<td>'{' at column 47 should have line break after.</td>
<td>87</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>LeftCurly</td>
@@ -77018,13 +76964,13 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.TestProcedureExecutor.java">org/apache/hadoop/hbase/procedure2/TestProcedureExecutor.java</h3>
<table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>imports</td>
<td>RedundantImport</td>
@@ -77033,13 +76979,13 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.TestProcedureMetrics.java">org/apache/hadoop/hbase/procedure2/TestProcedureMetrics.java</h3>
<table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
@@ -77048,31 +76994,31 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.TestProcedureNonce.java">org/apache/hadoop/hbase/procedure2/TestProcedureNonce.java</h3>
<table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'while' construct must use '{}'s.</td>
<td>128</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'for' construct must use '{}'s.</td>
<td>242</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'for' construct must use '{}'s.</td>
<td>243</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>LeftCurly</td>
@@ -77081,13 +77027,13 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.TestProcedureRecovery.java">org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.java</h3>
<table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>LeftCurly</td>
@@ -77096,13 +77042,13 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.TestProcedureReplayOrder.java">org/apache/hadoop/hbase/procedure2/TestProcedureReplayOrder.java</h3>
<table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>LeftCurly</td>
@@ -77111,31 +77057,31 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.TestProcedureSchedulerConcurrency.java">org/apache/hadoop/hbase/procedure2/TestProcedureSchedulerConcurrency.java</h3>
<table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>imports</td>
<td>UnusedImports</td>
<td>Unused import - org.junit.Assert.assertEquals.</td>
<td>20</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>imports</td>
<td>UnusedImports</td>
<td>Unused import - org.junit.Assert.assertFalse.</td>
<td>21</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>imports</td>
<td>UnusedImports</td>
<td>Unused import - org.junit.Assert.assertTrue.</td>
<td>22</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
@@ -77144,37 +77090,37 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.TestProcedureSuspended.java">org/apache/hadoop/hbase/procedure2/TestProcedureSuspended.java</h3>
<table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'while' construct must use '{}'s.</td>
<td>139</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'while' construct must use '{}'s.</td>
<td>147</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'while' construct must use '{}'s.</td>
<td>158</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>coding</td>
<td>InnerAssignment</td>
<td>Inner assignments should be avoided.</td>
<td>219</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>LeftCurly</td>
@@ -77183,31 +77129,31 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.TestProcedureToString.java">org/apache/hadoop/hbase/procedure2/TestProcedureToString.java</h3>
<table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>90</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>91</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'extends' has incorrect indentation level 2, expected level should be 4.</td>
<td>111</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
@@ -77216,25 +77162,25 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.TestStateMachineProcedure.java">org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.java</h3>
<table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>53</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>54</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>coding</td>
<td>MissingSwitchDefault</td>
@@ -77243,25 +77189,25 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.TestYieldProcedures.java">org/apache/hadoop/hbase/procedure2/TestYieldProcedures.java</h3>
<table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>LeftCurly</td>
<td>'{' at column 30 should have line break after.</td>
<td>204</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>LeftCurly</td>
<td>'{' at column 34 should have line break after.</td>
<td>205</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>LeftCurly</td>
@@ -77270,19 +77216,19 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.store.ProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/ProcedureStore.java</h3>
<table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>imports</td>
<td>ImportOrder</td>
<td>Wrong order for 'org.apache.hadoop.hbase.procedure2.Procedure' import.</td>
<td>25</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
@@ -77291,13 +77237,13 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.store.ProcedureStoreBase.java">org/apache/hadoop/hbase/procedure2/store/ProcedureStoreBase.java</h3>
<table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
@@ -77306,25 +77252,25 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.java">org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.java</h3>
<table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 102).</td>
<td>434</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>547</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
@@ -77333,13 +77279,13 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.store.TestProcedureStoreTracker.java">org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.java</h3>
<table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
@@ -77348,31 +77294,31 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFile.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.java</h3>
<table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>imports</td>
<td>ImportOrder</td>
<td>Wrong order for 'org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker' import.</td>
<td>31</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>117</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>198</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
@@ -77381,19 +77327,19 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormat.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.java</h3>
<table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>imports</td>
<td>ImportOrder</td>
<td>Wrong order for 'java.io.IOException' import.</td>
<td>23</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>imports</td>
<td>ImportOrder</td>
@@ -77402,67 +77348,67 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.java</h3>
<table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>imports</td>
<td>ImportOrder</td>
<td>Wrong order for 'java.io.IOException' import.</td>
<td>23</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>imports</td>
<td>ImportOrder</td>
<td>Wrong order for 'org.apache.hadoop.hbase.procedure2.Procedure' import.</td>
<td>30</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 101).</td>
<td>119</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>202</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>207</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
<td>227</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>JavadocTagContinuationIndentation</td>
<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
<td>467</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>JavadocTagContinuationIndentation</td>
<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
<td>468</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method call' child has incorrect indentation level 10, expected level should be 12.</td>
<td>725</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
@@ -77471,49 +77417,49 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALLoaderPerformanceEvaluation.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALLoaderPerformanceEvaluation.java</h3>
<table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>imports</td>
<td>ImportOrder</td>
<td>Wrong order for 'java.lang.System.currentTimeMillis' import.</td>
<td>42</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>JavadocTagContinuationIndentation</td>
<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
<td>138</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>JavadocTagContinuationIndentation</td>
<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
<td>139</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method def' child has incorrect indentation level 8, expected level should be 4.</td>
<td>210</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'NUM_PROCS_OPTION' has incorrect indentation level 8, expected level should be 10.</td>
<td>212</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'UPDATES_PER_PROC_OPTION' has incorrect indentation level 8, expected level should be 10.</td>
<td>213</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
@@ -77522,31 +77468,31 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALPerformanceEvaluation.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPerformanceEvaluation.java</h3>
<table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>imports</td>
<td>AvoidStarImport</td>
<td>Using the '.*' form of import should be avoided - org.apache.hadoop.fs.*.</td>
<td>30</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>imports</td>
<td>AvoidStarImport</td>
<td>Using the '.*' form of import should be avoided - org.apache.hadoop.conf.*.</td>
<td>31</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>imports</td>
<td>ImportOrder</td>
<td>Wrong order for 'org.apache.hadoop.conf.*' import.</td>
<td>31</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>imports</td>
<td>AvoidStarImport</td>
@@ -77555,19 +77501,19 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALPrettyPrinter.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.java</h3>
<table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>imports</td>
<td>ImportOrder</td>
<td>Wrong order for 'org.apache.hadoop.hbase.procedure2.Procedure' import.</td>
<td>35</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>imports</td>
<td>ImportOrder</td>
@@ -77576,25 +77522,25 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.store.wal.TestStressWALProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/wal/TestStressWALProcedureStore.java</h3>
<table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>imports</td>
<td>UnusedImports</td>
<td>Unused import - org.junit.Assert.assertFalse.</td>
<td>21</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>imports</td>
<td>UnusedImports</td>
<td>Unused import - org.junit.Assert.fail.</td>
<td>23</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>LeftCurly</td>
@@ -77603,79 +77549,79 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.store.wal.TestWALProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.java</h3>
<table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'object def' child has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
<td>742</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
<td>744</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'if' has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
<td>746</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'if' child has incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
<td>747</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'if' child has incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
<td>748</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'if' child has incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
<td>749</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'if rcurly' has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
<td>750</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
<td>751</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
<td>752</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
<td>753</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>LeftCurly</td>
<td>'{' at column 45 should have line break after.</td>
<td>948</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>LeftCurly</td>
@@ -77684,67 +77630,67 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.java</h3>
<table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>imports</td>
<td>ImportOrder</td>
<td>Wrong order for 'org.apache.hadoop.hbase.util.CommonFSUtils' import.</td>
<td>54</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 105).</td>
<td>210</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>464</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>616</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>903</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>993</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'if' child has incorrect indentation level 8, expected level should be 6.</td>
<td>1043</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>1142</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>1274</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
@@ -77753,31 +77699,31 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.util.DelayedUtil.java">org/apache/hadoop/hbase/procedure2/util/DelayedUtil.java</h3>
<table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>imports</td>
<td>ImportOrder</td>
<td>Wrong order for 'org.apache.hadoop.hbase.util.EnvironmentEdgeManager' import.</td>
<td>28</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>coding</td>
<td>EqualsHashCode</td>
<td>Definition of 'equals()' without corresponding definition of 'hashCode()'.</td>
<td>62</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>136</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
@@ -77786,31 +77732,31 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.procedure2.util.StringUtils.java">org/apache/hadoop/hbase/procedure2/util/StringUtils.java</h3>
<table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>59</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>60</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>61</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
@@ -77819,25 +77765,25 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.protobuf.ProtobufMagic.java">org/apache/hadoop/hbase/protobuf/ProtobufMagic.java</h3>
<table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>design</td>
<td>FinalClass</td>
<td>Class ProtobufMagic should be declared as final.</td>
<td>25</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>43</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
@@ -77846,13 +77792,13 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.protobuf.ProtobufMessageConverter.java">org/apache/hadoop/hbase/protobuf/ProtobufMessageConverter.java</h3>
<table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>design</td>
<td>FinalClass</td>
@@ -77861,697 +77807,697 @@
<div class="section">
<h3 id="org.apache.hadoop.hbase.protobuf.ProtobufUtil.java">org/apache/hadoop/hbase/protobuf/ProtobufUtil.java</h3>
<table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
<th>Severity</th>
<th>Category</th>
<th>Rule</th>
<th>Message</th>
<th>Line</th></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>JavadocTagContinuationIndentation</td>
<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
<td>189</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>264</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>294</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>314</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
<td>333</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
<td>334</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
<td>335</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
<td>336</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
<td>337</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
<td>338</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
<td>339</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
<td>340</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
<td>341</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
<td>342</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
<td>343</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
<td>344</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
<td>354</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
<td>355</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
<td>356</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
<td>357</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
<td>358</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
<td>359</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
<td>360</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
<td>361</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
<td>362</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
<td>363</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
<td>364</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
<td>365</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>374</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>377</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>455</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
<td>458</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>468</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
<td>471</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 104).</td>
<td>500</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>570</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
<td>573</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>583</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
<td>586</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 117).</td>
<td>652</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 109).</td>
<td>670</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 112).</td>
<td>691</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>705</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>708</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>728</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 108).</td>
<td>734</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>748</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>767</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>769</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>852</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>954</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>1058</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>1129</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>1130</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>1132</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
<td>1146</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>1183</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>1184</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>1185</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>1187</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>1197</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>1198</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>1200</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
<td>1203</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>1227</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>1228</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>1298</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>1300</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>1340</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
<td>1343</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>1363</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>1369</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
<td>1403</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>1460</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>1462</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
<td>1467</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
<td>1468</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
<td>1469</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
<td>1470</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
<td>1471</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
<td>1472</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
<td>1473</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
<td>1474</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
<td>1475</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>1485</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
<td>1490</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
<td>1491</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
<td>1492</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
<td>1493</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
<td>1494</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
<td>1495</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
<td>1496</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
<td>1497</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
<td>1498</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
<td>1499</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
<td>1512</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
<td>1550</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>1666</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>1680</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>1681</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
<td>1682</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
<td>1693</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
<td>1694</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'if' has incorrect indentation level 6, expected level should be 4.</td>
<td>1695</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'if' child has incorrect indentation level 8, expected level should be 6.</td>
<td>1696</td></tr>
-<tr class="b">
+<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'if rcurly' has incorrect indentation level 6, expected level should be 4.</td>
<td>1697</td></tr>
-<tr class="a">
+<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'if' has incorrect indentation level 6, expected level should be 4.</td>
<td>1698</td></tr>
-<t
<TRUNCATED>
[27/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html
index 275ca84..b9a30c4 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html
@@ -1499,782 +1499,786 @@
<span class="sourceLineNo">1491</span> final RpcController controller,<a name="line.1491"></a>
<span class="sourceLineNo">1492</span> final IsInMaintenanceModeRequest request) throws ServiceException {<a name="line.1492"></a>
<span class="sourceLineNo">1493</span> IsInMaintenanceModeResponse.Builder response = IsInMaintenanceModeResponse.newBuilder();<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span> response.setInMaintenanceMode(master.isInMaintenanceMode());<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span> return response.build();<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span> }<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span><a name="line.1497"></a>
-<span class="sourceLineNo">1498</span> @Override<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span> public UnassignRegionResponse unassignRegion(RpcController controller,<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span> UnassignRegionRequest req) throws ServiceException {<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span> try {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span> final byte [] regionName = req.getRegion().getValue().toByteArray();<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span> RegionSpecifierType type = req.getRegion().getType();<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span> final boolean force = req.getForce();<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span> UnassignRegionResponse urr = UnassignRegionResponse.newBuilder().build();<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span><a name="line.1506"></a>
-<span class="sourceLineNo">1507</span> master.checkInitialized();<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span> if (type != RegionSpecifierType.REGION_NAME) {<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span> LOG.warn("unassignRegion specifier type: expected: " + RegionSpecifierType.REGION_NAME<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span> + " actual: " + type);<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span> }<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span> Pair<RegionInfo, ServerName> pair =<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span> MetaTableAccessor.getRegion(master.getConnection(), regionName);<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span> if (Bytes.equals(RegionInfoBuilder.FIRST_META_REGIONINFO.getRegionName(),regionName)) {<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span> pair = new Pair<>(RegionInfoBuilder.FIRST_META_REGIONINFO,<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span> master.getMetaTableLocator().getMetaRegionLocation(master.getZooKeeper()));<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span> }<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span> if (pair == null) {<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span> throw new UnknownRegionException(Bytes.toString(regionName));<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span> }<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span><a name="line.1521"></a>
-<span class="sourceLineNo">1522</span> RegionInfo hri = pair.getFirst();<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span> if (master.cpHost != null) {<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span> master.cpHost.preUnassign(hri, force);<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span> }<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span> LOG.debug(master.getClientIdAuditPrefix() + " unassign " + hri.getRegionNameAsString()<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span> + " in current location if it is online and reassign.force=" + force);<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span> master.getAssignmentManager().unassign(hri);<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span> if (master.cpHost != null) {<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span> master.cpHost.postUnassign(hri, force);<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span> }<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span><a name="line.1532"></a>
-<span class="sourceLineNo">1533</span> return urr;<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span> } catch (IOException ioe) {<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span> throw new ServiceException(ioe);<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span> }<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span> }<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span> @Override<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span> public ReportRegionStateTransitionResponse reportRegionStateTransition(RpcController c,<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span> ReportRegionStateTransitionRequest req) throws ServiceException {<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span> try {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span> master.checkServiceStarted();<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span> return master.getAssignmentManager().reportRegionStateTransition(req);<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span> } catch (IOException ioe) {<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span> throw new ServiceException(ioe);<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span> }<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span> }<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span><a name="line.1549"></a>
-<span class="sourceLineNo">1550</span> @Override<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span> public SetQuotaResponse setQuota(RpcController c, SetQuotaRequest req)<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span> throws ServiceException {<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span> try {<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span> master.checkInitialized();<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span> return master.getMasterQuotaManager().setQuota(req);<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span> } catch (Exception e) {<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span> throw new ServiceException(e);<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span> }<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span> }<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span><a name="line.1560"></a>
-<span class="sourceLineNo">1561</span> @Override<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span> public MajorCompactionTimestampResponse getLastMajorCompactionTimestamp(RpcController controller,<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span> MajorCompactionTimestampRequest request) throws ServiceException {<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span> MajorCompactionTimestampResponse.Builder response =<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span> MajorCompactionTimestampResponse.newBuilder();<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span> try {<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span> master.checkInitialized();<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span> response.setCompactionTimestamp(master.getLastMajorCompactionTimestamp(ProtobufUtil<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span> .toTableName(request.getTableName())));<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span> } catch (IOException e) {<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span> throw new ServiceException(e);<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span> }<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span> return response.build();<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span> }<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span><a name="line.1575"></a>
-<span class="sourceLineNo">1576</span> @Override<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span> public MajorCompactionTimestampResponse getLastMajorCompactionTimestampForRegion(<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span> RpcController controller, MajorCompactionTimestampForRegionRequest request)<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span> throws ServiceException {<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span> MajorCompactionTimestampResponse.Builder response =<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span> MajorCompactionTimestampResponse.newBuilder();<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span> try {<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span> master.checkInitialized();<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span> response.setCompactionTimestamp(master.getLastMajorCompactionTimestampForRegion(request<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span> .getRegion().getValue().toByteArray()));<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span> } catch (IOException e) {<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span> throw new ServiceException(e);<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span> }<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span> return response.build();<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span> }<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span><a name="line.1591"></a>
-<span class="sourceLineNo">1592</span> /**<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span> * Compact a region on the master.<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span> *<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span> * @param controller the RPC controller<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span> * @param request the request<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span> * @throws ServiceException<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span> */<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span> @Override<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span> @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span> public CompactRegionResponse compactRegion(final RpcController controller,<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span> final CompactRegionRequest request) throws ServiceException {<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span> try {<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span> master.checkInitialized();<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span> byte[] regionName = request.getRegion().getValue().toByteArray();<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span> TableName tableName = RegionInfo.getTable(regionName);<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span> // if the region is a mob region, do the mob file compaction.<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span> if (MobUtils.isMobRegionName(tableName, regionName)) {<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span> checkHFileFormatVersionForMob();<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span> return compactMob(request, tableName);<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span> } else {<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span> return super.compactRegion(controller, request);<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span> }<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span> } catch (IOException ie) {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span> throw new ServiceException(ie);<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span> }<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span> }<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span><a name="line.1618"></a>
-<span class="sourceLineNo">1619</span> /**<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span> * check configured hfile format version before to do compaction<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span> * @throws IOException throw IOException<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span> */<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span> private void checkHFileFormatVersionForMob() throws IOException {<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span> if (HFile.getFormatVersion(master.getConfiguration()) < HFile.MIN_FORMAT_VERSION_WITH_TAGS) {<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span> LOG.error("A minimum HFile version of " + HFile.MIN_FORMAT_VERSION_WITH_TAGS<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span> + " is required for MOB compaction. Compaction will not run.");<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span> throw new IOException("A minimum HFile version of " + HFile.MIN_FORMAT_VERSION_WITH_TAGS<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span> + " is required for MOB feature. Consider setting " + HFile.FORMAT_VERSION_KEY<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span> + " accordingly.");<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span> }<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span> }<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span><a name="line.1632"></a>
-<span class="sourceLineNo">1633</span> @Override<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span> @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span> public GetRegionInfoResponse getRegionInfo(final RpcController controller,<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span> final GetRegionInfoRequest request) throws ServiceException {<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span> byte[] regionName = request.getRegion().getValue().toByteArray();<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span> TableName tableName = RegionInfo.getTable(regionName);<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span> if (MobUtils.isMobRegionName(tableName, regionName)) {<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span> // a dummy region info contains the compaction state.<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span> RegionInfo mobRegionInfo = MobUtils.getMobRegionInfo(tableName);<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span> GetRegionInfoResponse.Builder builder = GetRegionInfoResponse.newBuilder();<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span> builder.setRegionInfo(ProtobufUtil.toRegionInfo(mobRegionInfo));<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span> if (request.hasCompactionState() && request.getCompactionState()) {<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span> builder.setCompactionState(master.getMobCompactionState(tableName));<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span> }<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span> return builder.build();<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span> } else {<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span> return super.getRegionInfo(controller, request);<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span> }<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span> }<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span><a name="line.1652"></a>
-<span class="sourceLineNo">1653</span> /**<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span> * Compacts the mob files in the current table.<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span> * @param request the request.<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span> * @param tableName the current table name.<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span> * @return The response of the mob file compaction.<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span> * @throws IOException<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span> */<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span> private CompactRegionResponse compactMob(final CompactRegionRequest request,<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span> TableName tableName) throws IOException {<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span> if (!master.getTableStateManager().isTableState(tableName, TableState.State.ENABLED)) {<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span> throw new DoNotRetryIOException("Table " + tableName + " is not enabled");<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span> }<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span> boolean allFiles = false;<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span> List<ColumnFamilyDescriptor> compactedColumns = new ArrayList<>();<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span> ColumnFamilyDescriptor[] hcds = master.getTableDescriptors().get(tableName).getColumnFamilies();<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span> byte[] family = null;<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span> if (request.hasFamily()) {<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span> family = request.getFamily().toByteArray();<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span> for (ColumnFamilyDescriptor hcd : hcds) {<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span> if (Bytes.equals(family, hcd.getName())) {<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span> if (!hcd.isMobEnabled()) {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span> LOG.error("Column family " + hcd.getNameAsString() + " is not a mob column family");<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span> throw new DoNotRetryIOException("Column family " + hcd.getNameAsString()<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span> + " is not a mob column family");<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span> }<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span> compactedColumns.add(hcd);<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span> }<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span> }<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span> } else {<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span> for (ColumnFamilyDescriptor hcd : hcds) {<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span> if (hcd.isMobEnabled()) {<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span> compactedColumns.add(hcd);<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span> }<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span> }<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span> }<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span> if (compactedColumns.isEmpty()) {<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span> LOG.error("No mob column families are assigned in the mob compaction");<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span> throw new DoNotRetryIOException(<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span> "No mob column families are assigned in the mob compaction");<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span> }<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span> if (request.hasMajor() && request.getMajor()) {<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span> allFiles = true;<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span> }<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span> String familyLogMsg = (family != null) ? Bytes.toString(family) : "";<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span> if (LOG.isTraceEnabled()) {<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span> LOG.trace("User-triggered mob compaction requested for table: "<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span> + tableName.getNameAsString() + " for column family: " + familyLogMsg);<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span> }<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span> master.requestMobCompaction(tableName, compactedColumns, allFiles);<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span> return CompactRegionResponse.newBuilder().build();<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span> }<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span><a name="line.1704"></a>
-<span class="sourceLineNo">1705</span> @Override<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span> public IsBalancerEnabledResponse isBalancerEnabled(RpcController controller,<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span> IsBalancerEnabledRequest request) throws ServiceException {<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span> IsBalancerEnabledResponse.Builder response = IsBalancerEnabledResponse.newBuilder();<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span> response.setEnabled(master.isBalancerOn());<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span> return response.build();<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span> }<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span><a name="line.1712"></a>
-<span class="sourceLineNo">1713</span> @Override<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span> public SetSplitOrMergeEnabledResponse setSplitOrMergeEnabled(RpcController controller,<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span> SetSplitOrMergeEnabledRequest request) throws ServiceException {<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span> SetSplitOrMergeEnabledResponse.Builder response = SetSplitOrMergeEnabledResponse.newBuilder();<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span> try {<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span> master.checkInitialized();<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span> boolean newValue = request.getEnabled();<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span> for (MasterProtos.MasterSwitchType masterSwitchType: request.getSwitchTypesList()) {<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span> MasterSwitchType switchType = convert(masterSwitchType);<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span> boolean oldValue = master.isSplitOrMergeEnabled(switchType);<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span> response.addPrevValue(oldValue);<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span> if (master.cpHost != null) {<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span> master.cpHost.preSetSplitOrMergeEnabled(newValue, switchType);<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span> }<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span> master.getSplitOrMergeTracker().setSplitOrMergeEnabled(newValue, switchType);<a name="line.1727"></a>
+<span class="sourceLineNo">1494</span> try {<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span> response.setInMaintenanceMode(master.isInMaintenanceMode());<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span> } catch (IOException e) {<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span> throw new ServiceException(e);<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span> }<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span> return response.build();<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span> }<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span><a name="line.1501"></a>
+<span class="sourceLineNo">1502</span> @Override<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span> public UnassignRegionResponse unassignRegion(RpcController controller,<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span> UnassignRegionRequest req) throws ServiceException {<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span> try {<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span> final byte [] regionName = req.getRegion().getValue().toByteArray();<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span> RegionSpecifierType type = req.getRegion().getType();<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span> final boolean force = req.getForce();<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span> UnassignRegionResponse urr = UnassignRegionResponse.newBuilder().build();<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span><a name="line.1510"></a>
+<span class="sourceLineNo">1511</span> master.checkInitialized();<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span> if (type != RegionSpecifierType.REGION_NAME) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span> LOG.warn("unassignRegion specifier type: expected: " + RegionSpecifierType.REGION_NAME<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span> + " actual: " + type);<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span> }<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span> Pair<RegionInfo, ServerName> pair =<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span> MetaTableAccessor.getRegion(master.getConnection(), regionName);<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span> if (Bytes.equals(RegionInfoBuilder.FIRST_META_REGIONINFO.getRegionName(),regionName)) {<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span> pair = new Pair<>(RegionInfoBuilder.FIRST_META_REGIONINFO,<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span> master.getMetaTableLocator().getMetaRegionLocation(master.getZooKeeper()));<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span> }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span> if (pair == null) {<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span> throw new UnknownRegionException(Bytes.toString(regionName));<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span> }<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span><a name="line.1525"></a>
+<span class="sourceLineNo">1526</span> RegionInfo hri = pair.getFirst();<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span> if (master.cpHost != null) {<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span> master.cpHost.preUnassign(hri, force);<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span> }<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span> LOG.debug(master.getClientIdAuditPrefix() + " unassign " + hri.getRegionNameAsString()<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span> + " in current location if it is online and reassign.force=" + force);<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span> master.getAssignmentManager().unassign(hri);<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span> if (master.cpHost != null) {<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span> master.cpHost.postUnassign(hri, force);<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span> }<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span><a name="line.1536"></a>
+<span class="sourceLineNo">1537</span> return urr;<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span> } catch (IOException ioe) {<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span> throw new ServiceException(ioe);<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span> }<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span> }<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span><a name="line.1542"></a>
+<span class="sourceLineNo">1543</span> @Override<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span> public ReportRegionStateTransitionResponse reportRegionStateTransition(RpcController c,<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span> ReportRegionStateTransitionRequest req) throws ServiceException {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span> try {<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span> master.checkServiceStarted();<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span> return master.getAssignmentManager().reportRegionStateTransition(req);<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span> } catch (IOException ioe) {<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span> throw new ServiceException(ioe);<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span> }<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span> }<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span><a name="line.1553"></a>
+<span class="sourceLineNo">1554</span> @Override<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span> public SetQuotaResponse setQuota(RpcController c, SetQuotaRequest req)<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span> throws ServiceException {<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span> try {<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span> master.checkInitialized();<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span> return master.getMasterQuotaManager().setQuota(req);<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span> } catch (Exception e) {<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span> throw new ServiceException(e);<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span> }<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span> }<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span><a name="line.1564"></a>
+<span class="sourceLineNo">1565</span> @Override<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span> public MajorCompactionTimestampResponse getLastMajorCompactionTimestamp(RpcController controller,<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span> MajorCompactionTimestampRequest request) throws ServiceException {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span> MajorCompactionTimestampResponse.Builder response =<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span> MajorCompactionTimestampResponse.newBuilder();<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span> try {<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span> master.checkInitialized();<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span> response.setCompactionTimestamp(master.getLastMajorCompactionTimestamp(ProtobufUtil<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span> .toTableName(request.getTableName())));<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span> } catch (IOException e) {<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span> throw new ServiceException(e);<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span> }<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span> return response.build();<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span> }<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span><a name="line.1579"></a>
+<span class="sourceLineNo">1580</span> @Override<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span> public MajorCompactionTimestampResponse getLastMajorCompactionTimestampForRegion(<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span> RpcController controller, MajorCompactionTimestampForRegionRequest request)<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span> throws ServiceException {<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span> MajorCompactionTimestampResponse.Builder response =<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span> MajorCompactionTimestampResponse.newBuilder();<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span> try {<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span> master.checkInitialized();<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span> response.setCompactionTimestamp(master.getLastMajorCompactionTimestampForRegion(request<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span> .getRegion().getValue().toByteArray()));<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span> } catch (IOException e) {<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span> throw new ServiceException(e);<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span> }<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span> return response.build();<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span> }<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span><a name="line.1595"></a>
+<span class="sourceLineNo">1596</span> /**<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span> * Compact a region on the master.<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span> *<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span> * @param controller the RPC controller<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span> * @param request the request<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span> * @throws ServiceException<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span> */<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span> @Override<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span> @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span> public CompactRegionResponse compactRegion(final RpcController controller,<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span> final CompactRegionRequest request) throws ServiceException {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span> try {<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span> master.checkInitialized();<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span> byte[] regionName = request.getRegion().getValue().toByteArray();<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span> TableName tableName = RegionInfo.getTable(regionName);<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span> // if the region is a mob region, do the mob file compaction.<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span> if (MobUtils.isMobRegionName(tableName, regionName)) {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span> checkHFileFormatVersionForMob();<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span> return compactMob(request, tableName);<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span> } else {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span> return super.compactRegion(controller, request);<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span> }<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span> } catch (IOException ie) {<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span> throw new ServiceException(ie);<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span> }<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span> }<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span><a name="line.1622"></a>
+<span class="sourceLineNo">1623</span> /**<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span> * check configured hfile format version before to do compaction<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span> * @throws IOException throw IOException<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span> */<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span> private void checkHFileFormatVersionForMob() throws IOException {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span> if (HFile.getFormatVersion(master.getConfiguration()) < HFile.MIN_FORMAT_VERSION_WITH_TAGS) {<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span> LOG.error("A minimum HFile version of " + HFile.MIN_FORMAT_VERSION_WITH_TAGS<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span> + " is required for MOB compaction. Compaction will not run.");<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span> throw new IOException("A minimum HFile version of " + HFile.MIN_FORMAT_VERSION_WITH_TAGS<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span> + " is required for MOB feature. Consider setting " + HFile.FORMAT_VERSION_KEY<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span> + " accordingly.");<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span> }<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span> }<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span><a name="line.1636"></a>
+<span class="sourceLineNo">1637</span> @Override<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span> @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span> public GetRegionInfoResponse getRegionInfo(final RpcController controller,<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span> final GetRegionInfoRequest request) throws ServiceException {<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span> byte[] regionName = request.getRegion().getValue().toByteArray();<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span> TableName tableName = RegionInfo.getTable(regionName);<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span> if (MobUtils.isMobRegionName(tableName, regionName)) {<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span> // a dummy region info contains the compaction state.<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span> RegionInfo mobRegionInfo = MobUtils.getMobRegionInfo(tableName);<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span> GetRegionInfoResponse.Builder builder = GetRegionInfoResponse.newBuilder();<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span> builder.setRegionInfo(ProtobufUtil.toRegionInfo(mobRegionInfo));<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span> if (request.hasCompactionState() && request.getCompactionState()) {<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span> builder.setCompactionState(master.getMobCompactionState(tableName));<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span> }<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span> return builder.build();<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span> } else {<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span> return super.getRegionInfo(controller, request);<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span> }<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span> }<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span><a name="line.1656"></a>
+<span class="sourceLineNo">1657</span> /**<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span> * Compacts the mob files in the current table.<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span> * @param request the request.<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span> * @param tableName the current table name.<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span> * @return The response of the mob file compaction.<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span> * @throws IOException<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span> */<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span> private CompactRegionResponse compactMob(final CompactRegionRequest request,<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span> TableName tableName) throws IOException {<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span> if (!master.getTableStateManager().isTableState(tableName, TableState.State.ENABLED)) {<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span> throw new DoNotRetryIOException("Table " + tableName + " is not enabled");<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span> }<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span> boolean allFiles = false;<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span> List<ColumnFamilyDescriptor> compactedColumns = new ArrayList<>();<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span> ColumnFamilyDescriptor[] hcds = master.getTableDescriptors().get(tableName).getColumnFamilies();<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span> byte[] family = null;<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span> if (request.hasFamily()) {<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span> family = request.getFamily().toByteArray();<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span> for (ColumnFamilyDescriptor hcd : hcds) {<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span> if (Bytes.equals(family, hcd.getName())) {<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span> if (!hcd.isMobEnabled()) {<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span> LOG.error("Column family " + hcd.getNameAsString() + " is not a mob column family");<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span> throw new DoNotRetryIOException("Column family " + hcd.getNameAsString()<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span> + " is not a mob column family");<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span> }<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span> compactedColumns.add(hcd);<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span> }<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span> }<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span> } else {<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span> for (ColumnFamilyDescriptor hcd : hcds) {<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span> if (hcd.isMobEnabled()) {<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span> compactedColumns.add(hcd);<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span> }<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span> }<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span> }<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span> if (compactedColumns.isEmpty()) {<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span> LOG.error("No mob column families are assigned in the mob compaction");<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span> throw new DoNotRetryIOException(<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span> "No mob column families are assigned in the mob compaction");<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span> }<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span> if (request.hasMajor() && request.getMajor()) {<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span> allFiles = true;<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span> }<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span> String familyLogMsg = (family != null) ? Bytes.toString(family) : "";<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span> if (LOG.isTraceEnabled()) {<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span> LOG.trace("User-triggered mob compaction requested for table: "<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span> + tableName.getNameAsString() + " for column family: " + familyLogMsg);<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span> }<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span> master.requestMobCompaction(tableName, compactedColumns, allFiles);<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span> return CompactRegionResponse.newBuilder().build();<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span> }<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span><a name="line.1708"></a>
+<span class="sourceLineNo">1709</span> @Override<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span> public IsBalancerEnabledResponse isBalancerEnabled(RpcController controller,<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span> IsBalancerEnabledRequest request) throws ServiceException {<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span> IsBalancerEnabledResponse.Builder response = IsBalancerEnabledResponse.newBuilder();<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span> response.setEnabled(master.isBalancerOn());<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span> return response.build();<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span> }<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span><a name="line.1716"></a>
+<span class="sourceLineNo">1717</span> @Override<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span> public SetSplitOrMergeEnabledResponse setSplitOrMergeEnabled(RpcController controller,<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span> SetSplitOrMergeEnabledRequest request) throws ServiceException {<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span> SetSplitOrMergeEnabledResponse.Builder response = SetSplitOrMergeEnabledResponse.newBuilder();<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span> try {<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span> master.checkInitialized();<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span> boolean newValue = request.getEnabled();<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span> for (MasterProtos.MasterSwitchType masterSwitchType: request.getSwitchTypesList()) {<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span> MasterSwitchType switchType = convert(masterSwitchType);<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span> boolean oldValue = master.isSplitOrMergeEnabled(switchType);<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span> response.addPrevValue(oldValue);<a name="line.1727"></a>
<span class="sourceLineNo">1728</span> if (master.cpHost != null) {<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span> master.cpHost.postSetSplitOrMergeEnabled(newValue, switchType);<a name="line.1729"></a>
+<span class="sourceLineNo">1729</span> master.cpHost.preSetSplitOrMergeEnabled(newValue, switchType);<a name="line.1729"></a>
<span class="sourceLineNo">1730</span> }<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span> }<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span> } catch (IOException e) {<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span> throw new ServiceException(e);<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span> } catch (KeeperException e) {<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span> throw new ServiceException(e);<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span> }<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span> return response.build();<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span> }<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span><a name="line.1739"></a>
-<span class="sourceLineNo">1740</span> @Override<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span> public IsSplitOrMergeEnabledResponse isSplitOrMergeEnabled(RpcController controller,<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span> IsSplitOrMergeEnabledRequest request) throws ServiceException {<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span> IsSplitOrMergeEnabledResponse.Builder response = IsSplitOrMergeEnabledResponse.newBuilder();<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span> response.setEnabled(master.isSplitOrMergeEnabled(convert(request.getSwitchType())));<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span> return response.build();<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span> }<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span><a name="line.1747"></a>
-<span class="sourceLineNo">1748</span> @Override<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span> public NormalizeResponse normalize(RpcController controller,<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span> NormalizeRequest request) throws ServiceException {<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span> rpcPreCheck("normalize");<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span> try {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span> return NormalizeResponse.newBuilder().setNormalizerRan(master.normalizeRegions()).build();<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span> } catch (IOException ex) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span> throw new ServiceException(ex);<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span> }<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span> }<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span><a name="line.1758"></a>
-<span class="sourceLineNo">1759</span> @Override<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span> public SetNormalizerRunningResponse setNormalizerRunning(RpcController controller,<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span> SetNormalizerRunningRequest request) throws ServiceException {<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span> rpcPreCheck("setNormalizerRunning");<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span><a name="line.1763"></a>
-<span class="sourceLineNo">1764</span> // Sets normalizer on/off flag in ZK.<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span> boolean prevValue = master.getRegionNormalizerTracker().isNormalizerOn();<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span> boolean newValue = request.getOn();<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span> try {<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span> master.getRegionNormalizerTracker().setNormalizerOn(newValue);<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span> } catch (KeeperException ke) {<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span> LOG.warn("Error flipping normalizer switch", ke);<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span> }<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span> LOG.info("{} set normalizerSwitch={}", master.getClientIdAuditPrefix(), newValue);<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span> return SetNormalizerRunningResponse.newBuilder().setPrevNormalizerValue(prevValue).build();<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span> }<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span><a name="line.1775"></a>
-<span class="sourceLineNo">1776</span> @Override<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span> public IsNormalizerEnabledResponse isNormalizerEnabled(RpcController controller,<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span> IsNormalizerEnabledRequest request) throws ServiceException {<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span> IsNormalizerEnabledResponse.Builder response = IsNormalizerEnabledResponse.newBuilder();<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span> response.setEnabled(master.isNormalizerOn());<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span> return response.build();<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span> }<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span><a name="line.1783"></a>
-<span class="sourceLineNo">1784</span> /**<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span> * Returns the security capabilities in effect on the cluster<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span> */<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span> @Override<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span> public SecurityCapabilitiesResponse getSecurityCapabilities(RpcController controller,<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span> SecurityCapabilitiesRequest request) throws ServiceException {<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span> SecurityCapabilitiesResponse.Builder response = SecurityCapabilitiesResponse.newBuilder();<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span> try {<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span> master.checkInitialized();<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span> Set<SecurityCapabilitiesResponse.Capability> capabilities = new HashSet<>();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span> // Authentication<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span> if (User.isHBaseSecurityEnabled(master.getConfiguration())) {<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span> capabilities.add(SecurityCapabilitiesResponse.Capability.SECURE_AUTHENTICATION);<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span> } else {<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span> capabilities.add(SecurityCapabilitiesResponse.Capability.SIMPLE_AUTHENTICATION);<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span> }<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span> // A coprocessor that implements AccessControlService can provide AUTHORIZATION and<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span> // CELL_AUTHORIZATION<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span> if (master.cpHost != null && hasAccessControlServiceCoprocessor(master.cpHost)) {<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span> if (AccessChecker.isAuthorizationSupported(master.getConfiguration())) {<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span> capabilities.add(SecurityCapabilitiesResponse.Capability.AUTHORIZATION);<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span> }<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span> if (AccessController.isCellAuthorizationSupported(master.getConfiguration())) {<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span> capabilities.add(SecurityCapabilitiesResponse.Capability.CELL_AUTHORIZATION);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span> }<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span> }<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span> // A coprocessor that implements VisibilityLabelsService can provide CELL_VISIBILITY.<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span> if (master.cpHost != null && hasVisibilityLabelsServiceCoprocessor(master.cpHost)) {<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span> if (VisibilityController.isCellAuthorizationSupported(master.getConfiguration())) {<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span> capabilities.add(SecurityCapabilitiesResponse.Capability.CELL_VISIBILITY);<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span> }<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span> }<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span> response.addAllCapabilities(capabilities);<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span> } catch (IOException e) {<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span> throw new ServiceException(e);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span> }<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span> return response.build();<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span> }<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span><a name="line.1822"></a>
-<span class="sourceLineNo">1823</span> /**<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span> * Determines if there is a MasterCoprocessor deployed which implements<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span> * {@link org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.Interface}.<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span> */<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span> boolean hasAccessControlServiceCoprocessor(MasterCoprocessorHost cpHost) {<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span> return checkCoprocessorWithService(<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span> cpHost.findCoprocessors(MasterCoprocessor.class), AccessControlService.Interface.class);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span> }<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span><a name="line.1831"></a>
-<span class="sourceLineNo">1832</span> /**<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span> * Determines if there is a MasterCoprocessor deployed which implements<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span> * {@link org.apache.hadoop.hbase.protobuf.generated.VisibilityLabelsProtos.VisibilityLabelsService.Interface}.<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span> */<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span> boolean hasVisibilityLabelsServiceCoprocessor(MasterCoprocessorHost cpHost) {<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span> return checkCoprocessorWithService(<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span> cpHost.findCoprocessors(MasterCoprocessor.class),<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span> VisibilityLabelsService.Interface.class);<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span> }<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span><a name="line.1841"></a>
-<span class="sourceLineNo">1842</span> /**<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span> * Determines if there is a coprocessor implementation in the provided argument which extends<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span> * or implements the provided {@code service}.<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span> */<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span> boolean checkCoprocessorWithService(<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span> List<MasterCoprocessor> coprocessorsToCheck, Class<?> service) {<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span> if (coprocessorsToCheck == null || coprocessorsToCheck.isEmpty()) {<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span> return false;<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span> }<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span> for (MasterCoprocessor cp : coprocessorsToCheck) {<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span> if (service.isAssignableFrom(cp.getClass())) {<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span> return true;<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span> }<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span> }<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span> return false;<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span> }<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span><a name="line.1858"></a>
-<span class="sourceLineNo">1859</span> private MasterSwitchType convert(MasterProtos.MasterSwitchType switchType) {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span> switch (switchType) {<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span> case SPLIT:<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span> return MasterSwitchType.SPLIT;<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span> case MERGE:<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span> return MasterSwitchType.MERGE;<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span> default:<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span> break;<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span> }<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span> return null;<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span> }<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span><a name="line.1870"></a>
-<span class="sourceLineNo">1871</span> @Override<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span> public AddReplicationPeerResponse addReplicationPeer(RpcController controller,<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span> AddReplicationPeerRequest request) throws ServiceException {<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span> try {<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span> long procId = master.addReplicationPeer(request.getPeerId(),<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span> ReplicationPeerConfigUtil.convert(request.getPeerConfig()),<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span> request.getPeerState().getState().equals(ReplicationState.State.ENABLED));<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span> return AddReplicationPeerResponse.newBuilder().setProcId(procId).build();<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span> } catch (ReplicationException | IOException e) {<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span> throw new ServiceException(e);<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span> }<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span> }<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span><a name="line.1883"></a>
-<span class="sourceLineNo">1884</span> @Override<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span> public RemoveReplicationPeerResponse removeReplicationPeer(RpcController controller,<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span> RemoveReplicationPeerRequest request) throws ServiceException {<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span> try {<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span> long procId = master.removeReplicationPeer(request.getPeerId());<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span> return RemoveReplicationPeerResponse.newBuilder().setProcId(procId).build();<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span> } catch (ReplicationException | IOException e) {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span> throw new ServiceException(e);<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span> }<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span> }<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span><a name="line.1894"></a>
-<span class="sourceLineNo">1895</span> @Override<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span> public EnableReplicationPeerResponse enableReplicationPeer(RpcController controller,<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span> EnableReplicationPeerRequest request) throws ServiceException {<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span> try {<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span> long procId = master.enableReplicationPeer(request.getPeerId());<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span> return EnableReplicationPeerResponse.newBuilder().setProcId(procId).build();<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span> } catch (ReplicationException | IOException e) {<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span> throw new ServiceException(e);<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span> }<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span> }<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span><a name="line.1905"></a>
-<span class="sourceLineNo">1906</span> @Override<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span> public DisableReplicationPeerResponse disableReplicationPeer(RpcController controller,<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span> DisableReplicationPeerRequest request) throws ServiceException {<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span> try {<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span> long procId = master.disableReplicationPeer(request.getPeerId());<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span> return DisableReplicationPeerResponse.newBuilder().setProcId(procId).build();<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span> } catch (ReplicationException | IOException e) {<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span> throw new ServiceException(e);<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span> }<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span> }<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span><a name="line.1916"></a>
-<span class="sourceLineNo">1917</span> @Override<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span> public GetReplicationPeerConfigResponse getReplicationPeerConfig(RpcController controller,<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span> GetReplicationPeerConfigRequest request) throws ServiceException {<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span> GetReplicationPeerConfigResponse.Builder response = GetReplicationPeerConfigResponse<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span> .newBuilder();<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span> try {<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span> String peerId = request.getPeerId();<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span> ReplicationPeerConfig peerConfig = master.getReplicationPeerConfig(peerId);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span> response.setPeerId(peerId);<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span> response.setPeerConfig(ReplicationPeerConfigUtil.convert(peerConfig));<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span> } catch (ReplicationException | IOException e) {<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span> throw new ServiceException(e);<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span> }<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span> return response.build();<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span> }<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span><a name="line.1932"></a>
-<span class="sourceLineNo">1933</span> @Override<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span> public UpdateReplicationPeerConfigResponse updateReplicationPeerConfig(RpcController controller,<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span> UpdateReplicationPeerConfigRequest request) throws ServiceException {<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span> try {<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span> long procId = master.updateReplicationPeerConfig(request.getPeerId(),<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span> ReplicationPeerConfigUtil.convert(request.getPeerConfig()));<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span> return UpdateReplicationPeerConfigResponse.newBuilder().setProcId(procId).build();<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span> } catch (ReplicationException | IOException e) {<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span> throw new ServiceException(e);<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span> }<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span> }<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span><a name="line.1944"></a>
-<span class="sourceLineNo">1945</span> @Override<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span> public ListReplicationPeersResponse listReplicationPeers(RpcController controller,<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span> ListReplicationPeersRequest request) throws ServiceException {<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span> ListReplicationPeersResponse.Builder response = ListReplicationPeersResponse.newBuilder();<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span> try {<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span> List<ReplicationPeerDescription> peers = master<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span> .listReplicationPeers(request.hasRegex() ? request.getRegex() : null);<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span> for (ReplicationPeerDescription peer : peers) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span> response.addPeerDesc(ReplicationPeerConfigUtil.toProtoReplicationPeerDescription(peer));<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span> }<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span> } catch (ReplicationException | IOException e) {<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span> throw new ServiceException(e);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span> }<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span> return response.build();<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span> }<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span><a name="line.1960"></a>
-<span class="sourceLineNo">1961</span> @Override<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span> public ListDecommissionedRegionServersResponse listDecommissionedRegionServers(<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span> RpcController controller, ListDecommissionedRegionServersRequest request)<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span> throws ServiceException {<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span> ListDecommissionedRegionServersResponse.Builder response =<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span> ListDecommissionedRegionServersResponse.newBuilder();<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span> try {<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span> master.checkInitialized();<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span> if (master.cpHost != null) {<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span> master.cpHost.preListDecommissionedRegionServers();<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span> }<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span> List<ServerName> servers = master.listDecommissionedRegionServers();<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span> response.addAllServerName((servers.stream().map(server -> ProtobufUtil.toServerName(server)))<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span> .collect(Collectors.toList()));<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span> if (master.cpHost != null) {<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span> master.cpHost.postListDecommissionedRegionServers();<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span> }<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span> } catch (IOException io) {<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span> throw new ServiceException(io);<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span> }<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span><a name="line.1981"></a>
-<span class="sourceLineNo">1982</span> return response.build();<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span> }<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span><a name="line.1984"></a>
-<span class="sourceLineNo">1985</span> @Override<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span> public DecommissionRegionServersResponse decommissionRegionServers(RpcController controller,<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span> DecommissionRegionServersRequest request) throws ServiceException {<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span> try {<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span> master.checkInitialized();<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span> List<ServerName> servers = request.getServerNameList().stream()<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span> .map(pbServer -> ProtobufUtil.toServerName(pbServer)).collect(Collectors.toList());<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span> boolean offload = request.getOffload();<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span> if (master.cpHost != null) {<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span> master.cpHost.preDecommissionRegionServers(servers, offload);<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span> }<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span> master.decommissionRegionServers(servers, offload);<a name="line.1996"></a>
+<span class="sourceLineNo">1731</span> master.getSplitOrMergeTracker().setSplitOrMergeEnabled(newValue, switchType);<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span> if (master.cpHost != null) {<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span> master.cpHost.postSetSplitOrMergeEnabled(newValue, switchType);<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span> }<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span> }<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span> } catch (IOException e) {<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span> throw new ServiceException(e);<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span> } catch (KeeperException e) {<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span> throw new ServiceException(e);<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span> }<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span> return response.build();<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span> }<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span><a name="line.1743"></a>
+<span class="sourceLineNo">1744</span> @Override<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span> public IsSplitOrMergeEnabledResponse isSplitOrMergeEnabled(RpcController controller,<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span> IsSplitOrMergeEnabledRequest request) throws ServiceException {<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span> IsSplitOrMergeEnabledResponse.Builder response = IsSplitOrMergeEnabledResponse.newBuilder();<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span> response.setEnabled(master.isSplitOrMergeEnabled(convert(request.getSwitchType())));<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span> return response.build();<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span> }<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span><a name="line.1751"></a>
+<span class="sourceLineNo">1752</span> @Override<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span> public NormalizeResponse normalize(RpcController controller,<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span> NormalizeRequest request) throws ServiceException {<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span> rpcPreCheck("normalize");<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span> try {<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span> return NormalizeResponse.newBuilder().setNormalizerRan(master.normalizeRegions()).build();<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span> } catch (IOException ex) {<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span> throw new ServiceException(ex);<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span> }<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span> }<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span><a name="line.1762"></a>
+<span class="sourceLineNo">1763</span> @Override<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span> public SetNormalizerRunningResponse setNormalizerRunning(RpcController controller,<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span> SetNormalizerRunningRequest request) throws ServiceException {<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span> rpcPreCheck("setNormalizerRunning");<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span><a name="line.1767"></a>
+<span class="sourceLineNo">1768</span> // Sets normalizer on/off flag in ZK.<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span> boolean prevValue = master.getRegionNormalizerTracker().isNormalizerOn();<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span> boolean newValue = request.getOn();<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span> try {<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span> master.getRegionNormalizerTracker().setNormalizerOn(newValue);<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span> } catch (KeeperException ke) {<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span> LOG.warn("Error flipping normalizer switch", ke);<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span> }<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span> LOG.info("{} set normalizerSwitch={}", master.getClientIdAuditPrefix(), newValue);<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span> return SetNormalizerRunningResponse.newBuilder().setPrevNormalizerValue(prevValue).build();<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span> }<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span><a name="line.1779"></a>
+<span class="sourceLineNo">1780</span> @Override<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span> public IsNormalizerEnabledResponse isNormalizerEnabled(RpcController controller,<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span> IsNormalizerEnabledRequest request) throws ServiceException {<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span> IsNormalizerEnabledResponse.Builder response = IsNormalizerEnabledResponse.newBuilder();<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span> response.setEnabled(master.isNormalizerOn());<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span> return response.build();<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span> }<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span><a name="line.1787"></a>
+<span class="sourceLineNo">1788</span> /**<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span> * Returns the security capabilities in effect on the cluster<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span> */<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span> @Override<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span> public SecurityCapabilitiesResponse getSecurityCapabilities(RpcController controller,<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span> SecurityCapabilitiesRequest request) throws ServiceException {<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span> SecurityCapabilitiesResponse.Builder response = SecurityCapabilitiesResponse.newBuilder();<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span> try {<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span> master.checkInitialized();<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span> Set<SecurityCapabilitiesResponse.Capability> capabilities = new HashSet<>();<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span> // Authentication<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span> if (User.isHBaseSecurityEnabled(master.getConfiguration())) {<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span> capabilities.add(SecurityCapabilitiesResponse.Capability.SECURE_AUTHENTICATION);<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span> } else {<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span> capabilities.add(SecurityCapabilitiesResponse.Capability.SIMPLE_AUTHENTICATION);<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span> }<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span> // A coprocessor that implements AccessControlService can provide AUTHORIZATION and<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span> // CELL_AUTHORIZATION<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span> if (master.cpHost != null && hasAccessControlServiceCoprocessor(master.cpHost)) {<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span> if (AccessChecker.isAuthorizationSupported(master.getConfiguration())) {<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span> capabilities.add(SecurityCapabilitiesResponse.Capability.AUTHORIZATION);<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span> }<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span> if (AccessController.isCellAuthorizationSupported(master.getConfiguration())) {<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span> capabilities.add(SecurityCapabilitiesResponse.Capability.CELL_AUTHORIZATION);<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span> }<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span> }<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span> // A coprocessor that implements VisibilityLabelsService can provide CELL_VISIBILITY.<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span> if (master.cpHost != null && hasVisibilityLabelsServiceCoprocessor(master.cpHost)) {<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span> if (VisibilityController.isCellAuthorizationSupported(master.getConfiguration())) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span> capabilities.add(SecurityCapabilitiesResponse.Capability.CELL_VISIBILITY);<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span> }<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span> }<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span> response.addAllCapabilities(capabilities);<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span> } catch (IOException e) {<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span> throw new ServiceException(e);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span> }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span> return response.build();<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span> }<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span><a name="line.1826"></a>
+<span class="sourceLineNo">1827</span> /**<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span> * Determines if there is a MasterCoprocessor deployed which implements<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span> * {@link org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.Interface}.<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span> */<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span> boolean hasAccessControlServiceCoprocessor(MasterCoprocessorHost cpHost) {<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span> return checkCoprocessorWithService(<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span> cpHost.findCoprocessors(MasterCoprocessor.class), AccessControlService.Interface.class);<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span> }<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span><a name="line.1835"></a>
+<span class="sourceLineNo">1836</span> /**<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span> * Determines if there is a MasterCoprocessor deployed which implements<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span> * {@link org.apache.hadoop.hbase.protobuf.generated.VisibilityLabelsProtos.VisibilityLabelsService.Interface}.<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span> */<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span> boolean hasVisibilityLabelsServiceCoprocessor(MasterCoprocessorHost cpHost) {<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span> return checkCoprocessorWithService(<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span> cpHost.findCoprocessors(MasterCoprocessor.class),<a name="line.1842"></a>
+<span class="sourceLineNo">184
<TRUNCATED>
[15/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerReportEvent.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerReportEvent.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerReportEvent.html
index 5420d82..6ea3672 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerReportEvent.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerReportEvent.html
@@ -316,687 +316,728 @@
<span class="sourceLineNo">308</span> }<a name="line.308"></a>
<span class="sourceLineNo">309</span> }<a name="line.309"></a>
<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span> public enum ServerState { ONLINE, SPLITTING, OFFLINE }<a name="line.311"></a>
-<span class="sourceLineNo">312</span> public static class ServerStateNode implements Comparable<ServerStateNode> {<a name="line.312"></a>
-<span class="sourceLineNo">313</span> private final ServerReportEvent reportEvent;<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> private final Set<RegionStateNode> regions;<a name="line.315"></a>
-<span class="sourceLineNo">316</span> private final ServerName serverName;<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span> private volatile ServerState state = ServerState.ONLINE;<a name="line.318"></a>
-<span class="sourceLineNo">319</span> private volatile int versionNumber = 0;<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span> public ServerStateNode(final ServerName serverName) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span> this.serverName = serverName;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> this.regions = ConcurrentHashMap.newKeySet();<a name="line.323"></a>
-<span class="sourceLineNo">324</span> this.reportEvent = new ServerReportEvent(serverName);<a name="line.324"></a>
-<span class="sourceLineNo">325</span> }<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> public ServerName getServerName() {<a name="line.327"></a>
-<span class="sourceLineNo">328</span> return serverName;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> }<a name="line.329"></a>
+<span class="sourceLineNo">311</span> /**<a name="line.311"></a>
+<span class="sourceLineNo">312</span> * Server State.<a name="line.312"></a>
+<span class="sourceLineNo">313</span> */<a name="line.313"></a>
+<span class="sourceLineNo">314</span> public enum ServerState {<a name="line.314"></a>
+<span class="sourceLineNo">315</span> /**<a name="line.315"></a>
+<span class="sourceLineNo">316</span> * Initial state. Available.<a name="line.316"></a>
+<span class="sourceLineNo">317</span> */<a name="line.317"></a>
+<span class="sourceLineNo">318</span> ONLINE,<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span> /**<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * Server expired/crashed. Currently undergoing WAL splitting.<a name="line.321"></a>
+<span class="sourceLineNo">322</span> */<a name="line.322"></a>
+<span class="sourceLineNo">323</span> SPLITTING,<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span> /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * WAL splitting done.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> */<a name="line.327"></a>
+<span class="sourceLineNo">328</span> OFFLINE<a name="line.328"></a>
+<span class="sourceLineNo">329</span> }<a name="line.329"></a>
<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> public ServerState getState() {<a name="line.331"></a>
-<span class="sourceLineNo">332</span> return state;<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> public int getVersionNumber() {<a name="line.335"></a>
-<span class="sourceLineNo">336</span> return versionNumber;<a name="line.336"></a>
-<span class="sourceLineNo">337</span> }<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span> public ProcedureEvent<?> getReportEvent() {<a name="line.339"></a>
-<span class="sourceLineNo">340</span> return reportEvent;<a name="line.340"></a>
-<span class="sourceLineNo">341</span> }<a name="line.341"></a>
+<span class="sourceLineNo">331</span> /**<a name="line.331"></a>
+<span class="sourceLineNo">332</span> * State of Server; list of hosted regions, etc.<a name="line.332"></a>
+<span class="sourceLineNo">333</span> */<a name="line.333"></a>
+<span class="sourceLineNo">334</span> public static class ServerStateNode implements Comparable<ServerStateNode> {<a name="line.334"></a>
+<span class="sourceLineNo">335</span> private final ServerReportEvent reportEvent;<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> private final Set<RegionStateNode> regions;<a name="line.337"></a>
+<span class="sourceLineNo">338</span> private final ServerName serverName;<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span> private volatile ServerState state = ServerState.ONLINE;<a name="line.340"></a>
+<span class="sourceLineNo">341</span> private volatile int versionNumber = 0;<a name="line.341"></a>
<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span> public boolean isInState(final ServerState... expected) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span> boolean expectedState = false;<a name="line.344"></a>
-<span class="sourceLineNo">345</span> if (expected != null) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span> for (int i = 0; i < expected.length; ++i) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> expectedState |= (state == expected[i]);<a name="line.347"></a>
-<span class="sourceLineNo">348</span> }<a name="line.348"></a>
-<span class="sourceLineNo">349</span> }<a name="line.349"></a>
-<span class="sourceLineNo">350</span> return expectedState;<a name="line.350"></a>
+<span class="sourceLineNo">343</span> public ServerStateNode(final ServerName serverName) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span> this.serverName = serverName;<a name="line.344"></a>
+<span class="sourceLineNo">345</span> this.regions = ConcurrentHashMap.newKeySet();<a name="line.345"></a>
+<span class="sourceLineNo">346</span> this.reportEvent = new ServerReportEvent(serverName);<a name="line.346"></a>
+<span class="sourceLineNo">347</span> }<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span> public ServerName getServerName() {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> return serverName;<a name="line.350"></a>
<span class="sourceLineNo">351</span> }<a name="line.351"></a>
<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span> public void setState(final ServerState state) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span> this.state = state;<a name="line.354"></a>
+<span class="sourceLineNo">353</span> public ServerState getState() {<a name="line.353"></a>
+<span class="sourceLineNo">354</span> return state;<a name="line.354"></a>
<span class="sourceLineNo">355</span> }<a name="line.355"></a>
<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span> public void setVersionNumber(final int versionNumber) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> this.versionNumber = versionNumber;<a name="line.358"></a>
+<span class="sourceLineNo">357</span> public int getVersionNumber() {<a name="line.357"></a>
+<span class="sourceLineNo">358</span> return versionNumber;<a name="line.358"></a>
<span class="sourceLineNo">359</span> }<a name="line.359"></a>
<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span> public Set<RegionStateNode> getRegions() {<a name="line.361"></a>
-<span class="sourceLineNo">362</span> return regions;<a name="line.362"></a>
+<span class="sourceLineNo">361</span> public ProcedureEvent<?> getReportEvent() {<a name="line.361"></a>
+<span class="sourceLineNo">362</span> return reportEvent;<a name="line.362"></a>
<span class="sourceLineNo">363</span> }<a name="line.363"></a>
<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span> public int getRegionCount() {<a name="line.365"></a>
-<span class="sourceLineNo">366</span> return regions.size();<a name="line.366"></a>
+<span class="sourceLineNo">365</span> public boolean isOffline() {<a name="line.365"></a>
+<span class="sourceLineNo">366</span> return this.state.equals(ServerState.OFFLINE);<a name="line.366"></a>
<span class="sourceLineNo">367</span> }<a name="line.367"></a>
<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span> public ArrayList<RegionInfo> getRegionInfoList() {<a name="line.369"></a>
-<span class="sourceLineNo">370</span> ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(regions.size());<a name="line.370"></a>
-<span class="sourceLineNo">371</span> for (RegionStateNode region: regions) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span> hris.add(region.getRegionInfo());<a name="line.372"></a>
-<span class="sourceLineNo">373</span> }<a name="line.373"></a>
-<span class="sourceLineNo">374</span> return hris;<a name="line.374"></a>
-<span class="sourceLineNo">375</span> }<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span> public void addRegion(final RegionStateNode regionNode) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span> this.regions.add(regionNode);<a name="line.378"></a>
-<span class="sourceLineNo">379</span> }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span> public void removeRegion(final RegionStateNode regionNode) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span> this.regions.remove(regionNode);<a name="line.382"></a>
-<span class="sourceLineNo">383</span> }<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public int compareTo(final ServerStateNode other) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> return getServerName().compareTo(other.getServerName());<a name="line.387"></a>
-<span class="sourceLineNo">388</span> }<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span> @Override<a name="line.390"></a>
-<span class="sourceLineNo">391</span> public int hashCode() {<a name="line.391"></a>
-<span class="sourceLineNo">392</span> return getServerName().hashCode();<a name="line.392"></a>
+<span class="sourceLineNo">369</span> public boolean isInState(final ServerState... expected) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span> boolean expectedState = false;<a name="line.370"></a>
+<span class="sourceLineNo">371</span> if (expected != null) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span> for (int i = 0; i < expected.length; ++i) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> expectedState |= (state == expected[i]);<a name="line.373"></a>
+<span class="sourceLineNo">374</span> }<a name="line.374"></a>
+<span class="sourceLineNo">375</span> }<a name="line.375"></a>
+<span class="sourceLineNo">376</span> return expectedState;<a name="line.376"></a>
+<span class="sourceLineNo">377</span> }<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span> public void setState(final ServerState state) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span> this.state = state;<a name="line.380"></a>
+<span class="sourceLineNo">381</span> }<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span> public void setVersionNumber(final int versionNumber) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span> this.versionNumber = versionNumber;<a name="line.384"></a>
+<span class="sourceLineNo">385</span> }<a name="line.385"></a>
+<span class="sourceLineNo">386</span><a name="line.386"></a>
+<span class="sourceLineNo">387</span> public Set<RegionStateNode> getRegions() {<a name="line.387"></a>
+<span class="sourceLineNo">388</span> return regions;<a name="line.388"></a>
+<span class="sourceLineNo">389</span> }<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span> public int getRegionCount() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span> return regions.size();<a name="line.392"></a>
<span class="sourceLineNo">393</span> }<a name="line.393"></a>
<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
-<span class="sourceLineNo">396</span> public boolean equals(final Object other) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span> if (this == other) return true;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> if (!(other instanceof ServerStateNode)) return false;<a name="line.398"></a>
-<span class="sourceLineNo">399</span> return compareTo((ServerStateNode)other) == 0;<a name="line.399"></a>
-<span class="sourceLineNo">400</span> }<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span> @Override<a name="line.402"></a>
-<span class="sourceLineNo">403</span> public String toString() {<a name="line.403"></a>
-<span class="sourceLineNo">404</span> return String.format("ServerStateNode(%s)", getServerName());<a name="line.404"></a>
+<span class="sourceLineNo">395</span> public ArrayList<RegionInfo> getRegionInfoList() {<a name="line.395"></a>
+<span class="sourceLineNo">396</span> ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(regions.size());<a name="line.396"></a>
+<span class="sourceLineNo">397</span> for (RegionStateNode region: regions) {<a name="line.397"></a>
+<span class="sourceLineNo">398</span> hris.add(region.getRegionInfo());<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span> return hris;<a name="line.400"></a>
+<span class="sourceLineNo">401</span> }<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span> public void addRegion(final RegionStateNode regionNode) {<a name="line.403"></a>
+<span class="sourceLineNo">404</span> this.regions.add(regionNode);<a name="line.404"></a>
<span class="sourceLineNo">405</span> }<a name="line.405"></a>
-<span class="sourceLineNo">406</span> }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span> public final static RegionStateStampComparator REGION_STATE_STAMP_COMPARATOR =<a name="line.408"></a>
-<span class="sourceLineNo">409</span> new RegionStateStampComparator();<a name="line.409"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span> public void removeRegion(final RegionStateNode regionNode) {<a name="line.407"></a>
+<span class="sourceLineNo">408</span> this.regions.remove(regionNode);<a name="line.408"></a>
+<span class="sourceLineNo">409</span> }<a name="line.409"></a>
<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span> // TODO: Replace the ConcurrentSkipListMaps<a name="line.411"></a>
-<span class="sourceLineNo">412</span> /**<a name="line.412"></a>
-<span class="sourceLineNo">413</span> * RegionName -- i.e. RegionInfo.getRegionName() -- as bytes to {@link RegionStateNode}<a name="line.413"></a>
-<span class="sourceLineNo">414</span> */<a name="line.414"></a>
-<span class="sourceLineNo">415</span> private final ConcurrentSkipListMap<byte[], RegionStateNode> regionsMap =<a name="line.415"></a>
-<span class="sourceLineNo">416</span> new ConcurrentSkipListMap<byte[], RegionStateNode>(Bytes.BYTES_COMPARATOR);<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionInTransition =<a name="line.418"></a>
-<span class="sourceLineNo">419</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>(RegionInfo.COMPARATOR);<a name="line.419"></a>
+<span class="sourceLineNo">411</span> @Override<a name="line.411"></a>
+<span class="sourceLineNo">412</span> public int compareTo(final ServerStateNode other) {<a name="line.412"></a>
+<span class="sourceLineNo">413</span> return getServerName().compareTo(other.getServerName());<a name="line.413"></a>
+<span class="sourceLineNo">414</span> }<a name="line.414"></a>
+<span class="sourceLineNo">415</span><a name="line.415"></a>
+<span class="sourceLineNo">416</span> @Override<a name="line.416"></a>
+<span class="sourceLineNo">417</span> public int hashCode() {<a name="line.417"></a>
+<span class="sourceLineNo">418</span> return getServerName().hashCode();<a name="line.418"></a>
+<span class="sourceLineNo">419</span> }<a name="line.419"></a>
<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span> /**<a name="line.421"></a>
-<span class="sourceLineNo">422</span> * Regions marked as offline on a read of hbase:meta. Unused or at least, once<a name="line.422"></a>
-<span class="sourceLineNo">423</span> * offlined, regions have no means of coming on line again. TODO.<a name="line.423"></a>
-<span class="sourceLineNo">424</span> */<a name="line.424"></a>
-<span class="sourceLineNo">425</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionOffline =<a name="line.425"></a>
-<span class="sourceLineNo">426</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>();<a name="line.426"></a>
+<span class="sourceLineNo">421</span> @Override<a name="line.421"></a>
+<span class="sourceLineNo">422</span> public boolean equals(final Object other) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span> if (this == other) return true;<a name="line.423"></a>
+<span class="sourceLineNo">424</span> if (!(other instanceof ServerStateNode)) return false;<a name="line.424"></a>
+<span class="sourceLineNo">425</span> return compareTo((ServerStateNode)other) == 0;<a name="line.425"></a>
+<span class="sourceLineNo">426</span> }<a name="line.426"></a>
<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span> private final ConcurrentSkipListMap<byte[], RegionFailedOpen> regionFailedOpen =<a name="line.428"></a>
-<span class="sourceLineNo">429</span> new ConcurrentSkipListMap<byte[], RegionFailedOpen>(Bytes.BYTES_COMPARATOR);<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span> private final ConcurrentHashMap<ServerName, ServerStateNode> serverMap =<a name="line.431"></a>
-<span class="sourceLineNo">432</span> new ConcurrentHashMap<ServerName, ServerStateNode>();<a name="line.432"></a>
+<span class="sourceLineNo">428</span> @Override<a name="line.428"></a>
+<span class="sourceLineNo">429</span> public String toString() {<a name="line.429"></a>
+<span class="sourceLineNo">430</span> return String.format("ServerStateNode(%s)", getServerName());<a name="line.430"></a>
+<span class="sourceLineNo">431</span> }<a name="line.431"></a>
+<span class="sourceLineNo">432</span> }<a name="line.432"></a>
<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span> public RegionStates() { }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> public void clear() {<a name="line.436"></a>
-<span class="sourceLineNo">437</span> regionsMap.clear();<a name="line.437"></a>
-<span class="sourceLineNo">438</span> regionInTransition.clear();<a name="line.438"></a>
-<span class="sourceLineNo">439</span> regionOffline.clear();<a name="line.439"></a>
-<span class="sourceLineNo">440</span> serverMap.clear();<a name="line.440"></a>
-<span class="sourceLineNo">441</span> }<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span> @VisibleForTesting<a name="line.443"></a>
-<span class="sourceLineNo">444</span> public boolean isRegionInRegionStates(final RegionInfo hri) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span> return (regionsMap.containsKey(hri.getRegionName()) || regionInTransition.containsKey(hri)<a name="line.445"></a>
-<span class="sourceLineNo">446</span> || regionOffline.containsKey(hri));<a name="line.446"></a>
-<span class="sourceLineNo">447</span> }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span> // ==========================================================================<a name="line.449"></a>
-<span class="sourceLineNo">450</span> // RegionStateNode helpers<a name="line.450"></a>
-<span class="sourceLineNo">451</span> // ==========================================================================<a name="line.451"></a>
-<span class="sourceLineNo">452</span> protected RegionStateNode createRegionStateNode(final RegionInfo regionInfo) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> RegionStateNode newNode = new RegionStateNode(regionInfo);<a name="line.453"></a>
-<span class="sourceLineNo">454</span> RegionStateNode oldNode = regionsMap.putIfAbsent(regionInfo.getRegionName(), newNode);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> return oldNode != null ? oldNode : newNode;<a name="line.455"></a>
-<span class="sourceLineNo">456</span> }<a name="line.456"></a>
-<span class="sourceLineNo">457</span><a name="line.457"></a>
-<span class="sourceLineNo">458</span> protected RegionStateNode getOrCreateRegionStateNode(final RegionInfo regionInfo) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> RegionStateNode node = regionsMap.get(regionInfo.getRegionName());<a name="line.459"></a>
-<span class="sourceLineNo">460</span> return node != null ? node : createRegionStateNode(regionInfo);<a name="line.460"></a>
-<span class="sourceLineNo">461</span> }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span> RegionStateNode getRegionStateNodeFromName(final byte[] regionName) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span> return regionsMap.get(regionName);<a name="line.464"></a>
-<span class="sourceLineNo">465</span> }<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span> protected RegionStateNode getRegionStateNode(final RegionInfo regionInfo) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span> return getRegionStateNodeFromName(regionInfo.getRegionName());<a name="line.468"></a>
-<span class="sourceLineNo">469</span> }<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span> public void deleteRegion(final RegionInfo regionInfo) {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> regionsMap.remove(regionInfo.getRegionName());<a name="line.472"></a>
-<span class="sourceLineNo">473</span> // Remove from the offline regions map too if there.<a name="line.473"></a>
-<span class="sourceLineNo">474</span> if (this.regionOffline.containsKey(regionInfo)) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span> if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> this.regionOffline.remove(regionInfo);<a name="line.476"></a>
-<span class="sourceLineNo">477</span> }<a name="line.477"></a>
-<span class="sourceLineNo">478</span> }<a name="line.478"></a>
-<span class="sourceLineNo">479</span><a name="line.479"></a>
-<span class="sourceLineNo">480</span> ArrayList<RegionStateNode> getTableRegionStateNodes(final TableName tableName) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span> final ArrayList<RegionStateNode> regions = new ArrayList<RegionStateNode>();<a name="line.481"></a>
-<span class="sourceLineNo">482</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span> if (!node.getTable().equals(tableName)) break;<a name="line.483"></a>
-<span class="sourceLineNo">484</span> regions.add(node);<a name="line.484"></a>
-<span class="sourceLineNo">485</span> }<a name="line.485"></a>
-<span class="sourceLineNo">486</span> return regions;<a name="line.486"></a>
+<span class="sourceLineNo">434</span> public final static RegionStateStampComparator REGION_STATE_STAMP_COMPARATOR =<a name="line.434"></a>
+<span class="sourceLineNo">435</span> new RegionStateStampComparator();<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span> // TODO: Replace the ConcurrentSkipListMaps<a name="line.437"></a>
+<span class="sourceLineNo">438</span> /**<a name="line.438"></a>
+<span class="sourceLineNo">439</span> * RegionName -- i.e. RegionInfo.getRegionName() -- as bytes to {@link RegionStateNode}<a name="line.439"></a>
+<span class="sourceLineNo">440</span> */<a name="line.440"></a>
+<span class="sourceLineNo">441</span> private final ConcurrentSkipListMap<byte[], RegionStateNode> regionsMap =<a name="line.441"></a>
+<span class="sourceLineNo">442</span> new ConcurrentSkipListMap<byte[], RegionStateNode>(Bytes.BYTES_COMPARATOR);<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionInTransition =<a name="line.444"></a>
+<span class="sourceLineNo">445</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>(RegionInfo.COMPARATOR);<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span> /**<a name="line.447"></a>
+<span class="sourceLineNo">448</span> * Regions marked as offline on a read of hbase:meta. Unused or at least, once<a name="line.448"></a>
+<span class="sourceLineNo">449</span> * offlined, regions have no means of coming on line again. TODO.<a name="line.449"></a>
+<span class="sourceLineNo">450</span> */<a name="line.450"></a>
+<span class="sourceLineNo">451</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionOffline =<a name="line.451"></a>
+<span class="sourceLineNo">452</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>();<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span> private final ConcurrentSkipListMap<byte[], RegionFailedOpen> regionFailedOpen =<a name="line.454"></a>
+<span class="sourceLineNo">455</span> new ConcurrentSkipListMap<byte[], RegionFailedOpen>(Bytes.BYTES_COMPARATOR);<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span> private final ConcurrentHashMap<ServerName, ServerStateNode> serverMap =<a name="line.457"></a>
+<span class="sourceLineNo">458</span> new ConcurrentHashMap<ServerName, ServerStateNode>();<a name="line.458"></a>
+<span class="sourceLineNo">459</span><a name="line.459"></a>
+<span class="sourceLineNo">460</span> public RegionStates() { }<a name="line.460"></a>
+<span class="sourceLineNo">461</span><a name="line.461"></a>
+<span class="sourceLineNo">462</span> public void clear() {<a name="line.462"></a>
+<span class="sourceLineNo">463</span> regionsMap.clear();<a name="line.463"></a>
+<span class="sourceLineNo">464</span> regionInTransition.clear();<a name="line.464"></a>
+<span class="sourceLineNo">465</span> regionOffline.clear();<a name="line.465"></a>
+<span class="sourceLineNo">466</span> serverMap.clear();<a name="line.466"></a>
+<span class="sourceLineNo">467</span> }<a name="line.467"></a>
+<span class="sourceLineNo">468</span><a name="line.468"></a>
+<span class="sourceLineNo">469</span> @VisibleForTesting<a name="line.469"></a>
+<span class="sourceLineNo">470</span> public boolean isRegionInRegionStates(final RegionInfo hri) {<a name="line.470"></a>
+<span class="sourceLineNo">471</span> return (regionsMap.containsKey(hri.getRegionName()) || regionInTransition.containsKey(hri)<a name="line.471"></a>
+<span class="sourceLineNo">472</span> || regionOffline.containsKey(hri));<a name="line.472"></a>
+<span class="sourceLineNo">473</span> }<a name="line.473"></a>
+<span class="sourceLineNo">474</span><a name="line.474"></a>
+<span class="sourceLineNo">475</span> // ==========================================================================<a name="line.475"></a>
+<span class="sourceLineNo">476</span> // RegionStateNode helpers<a name="line.476"></a>
+<span class="sourceLineNo">477</span> // ==========================================================================<a name="line.477"></a>
+<span class="sourceLineNo">478</span> protected RegionStateNode createRegionStateNode(final RegionInfo regionInfo) {<a name="line.478"></a>
+<span class="sourceLineNo">479</span> RegionStateNode newNode = new RegionStateNode(regionInfo);<a name="line.479"></a>
+<span class="sourceLineNo">480</span> RegionStateNode oldNode = regionsMap.putIfAbsent(regionInfo.getRegionName(), newNode);<a name="line.480"></a>
+<span class="sourceLineNo">481</span> return oldNode != null ? oldNode : newNode;<a name="line.481"></a>
+<span class="sourceLineNo">482</span> }<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span> protected RegionStateNode getOrCreateRegionStateNode(final RegionInfo regionInfo) {<a name="line.484"></a>
+<span class="sourceLineNo">485</span> RegionStateNode node = regionsMap.get(regionInfo.getRegionName());<a name="line.485"></a>
+<span class="sourceLineNo">486</span> return node != null ? node : createRegionStateNode(regionInfo);<a name="line.486"></a>
<span class="sourceLineNo">487</span> }<a name="line.487"></a>
<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span> ArrayList<RegionState> getTableRegionStates(final TableName tableName) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>();<a name="line.490"></a>
-<span class="sourceLineNo">491</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span> if (!node.getTable().equals(tableName)) break;<a name="line.492"></a>
-<span class="sourceLineNo">493</span> regions.add(node.toRegionState());<a name="line.493"></a>
-<span class="sourceLineNo">494</span> }<a name="line.494"></a>
-<span class="sourceLineNo">495</span> return regions;<a name="line.495"></a>
-<span class="sourceLineNo">496</span> }<a name="line.496"></a>
-<span class="sourceLineNo">497</span><a name="line.497"></a>
-<span class="sourceLineNo">498</span> ArrayList<RegionInfo> getTableRegionsInfo(final TableName tableName) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span> final ArrayList<RegionInfo> regions = new ArrayList<RegionInfo>();<a name="line.499"></a>
-<span class="sourceLineNo">500</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span> if (!node.getTable().equals(tableName)) break;<a name="line.501"></a>
-<span class="sourceLineNo">502</span> regions.add(node.getRegionInfo());<a name="line.502"></a>
+<span class="sourceLineNo">489</span> RegionStateNode getRegionStateNodeFromName(final byte[] regionName) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span> return regionsMap.get(regionName);<a name="line.490"></a>
+<span class="sourceLineNo">491</span> }<a name="line.491"></a>
+<span class="sourceLineNo">492</span><a name="line.492"></a>
+<span class="sourceLineNo">493</span> protected RegionStateNode getRegionStateNode(final RegionInfo regionInfo) {<a name="line.493"></a>
+<span class="sourceLineNo">494</span> return getRegionStateNodeFromName(regionInfo.getRegionName());<a name="line.494"></a>
+<span class="sourceLineNo">495</span> }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span> public void deleteRegion(final RegionInfo regionInfo) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span> regionsMap.remove(regionInfo.getRegionName());<a name="line.498"></a>
+<span class="sourceLineNo">499</span> // Remove from the offline regions map too if there.<a name="line.499"></a>
+<span class="sourceLineNo">500</span> if (this.regionOffline.containsKey(regionInfo)) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span> if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.501"></a>
+<span class="sourceLineNo">502</span> this.regionOffline.remove(regionInfo);<a name="line.502"></a>
<span class="sourceLineNo">503</span> }<a name="line.503"></a>
-<span class="sourceLineNo">504</span> return regions;<a name="line.504"></a>
-<span class="sourceLineNo">505</span> }<a name="line.505"></a>
-<span class="sourceLineNo">506</span><a name="line.506"></a>
-<span class="sourceLineNo">507</span> Collection<RegionStateNode> getRegionStateNodes() {<a name="line.507"></a>
-<span class="sourceLineNo">508</span> return regionsMap.values();<a name="line.508"></a>
-<span class="sourceLineNo">509</span> }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span> public ArrayList<RegionState> getRegionStates() {<a name="line.511"></a>
-<span class="sourceLineNo">512</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>(regionsMap.size());<a name="line.512"></a>
-<span class="sourceLineNo">513</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span> regions.add(node.toRegionState());<a name="line.514"></a>
-<span class="sourceLineNo">515</span> }<a name="line.515"></a>
-<span class="sourceLineNo">516</span> return regions;<a name="line.516"></a>
-<span class="sourceLineNo">517</span> }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span> // ==========================================================================<a name="line.519"></a>
-<span class="sourceLineNo">520</span> // RegionState helpers<a name="line.520"></a>
-<span class="sourceLineNo">521</span> // ==========================================================================<a name="line.521"></a>
-<span class="sourceLineNo">522</span> public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span> RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.523"></a>
-<span class="sourceLineNo">524</span> return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.524"></a>
-<span class="sourceLineNo">525</span> }<a name="line.525"></a>
-<span class="sourceLineNo">526</span><a name="line.526"></a>
-<span class="sourceLineNo">527</span> public RegionState getRegionState(final String encodedRegionName) {<a name="line.527"></a>
-<span class="sourceLineNo">528</span> // TODO: Need a map <encodedName, ...> but it is just dispatch merge...<a name="line.528"></a>
-<span class="sourceLineNo">529</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.529"></a>
-<span class="sourceLineNo">530</span> if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span> return node.toRegionState();<a name="line.531"></a>
-<span class="sourceLineNo">532</span> }<a name="line.532"></a>
-<span class="sourceLineNo">533</span> }<a name="line.533"></a>
-<span class="sourceLineNo">534</span> return null;<a name="line.534"></a>
+<span class="sourceLineNo">504</span> }<a name="line.504"></a>
+<span class="sourceLineNo">505</span><a name="line.505"></a>
+<span class="sourceLineNo">506</span> ArrayList<RegionStateNode> getTableRegionStateNodes(final TableName tableName) {<a name="line.506"></a>
+<span class="sourceLineNo">507</span> final ArrayList<RegionStateNode> regions = new ArrayList<RegionStateNode>();<a name="line.507"></a>
+<span class="sourceLineNo">508</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.508"></a>
+<span class="sourceLineNo">509</span> if (!node.getTable().equals(tableName)) break;<a name="line.509"></a>
+<span class="sourceLineNo">510</span> regions.add(node);<a name="line.510"></a>
+<span class="sourceLineNo">511</span> }<a name="line.511"></a>
+<span class="sourceLineNo">512</span> return regions;<a name="line.512"></a>
+<span class="sourceLineNo">513</span> }<a name="line.513"></a>
+<span class="sourceLineNo">514</span><a name="line.514"></a>
+<span class="sourceLineNo">515</span> ArrayList<RegionState> getTableRegionStates(final TableName tableName) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>();<a name="line.516"></a>
+<span class="sourceLineNo">517</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.517"></a>
+<span class="sourceLineNo">518</span> if (!node.getTable().equals(tableName)) break;<a name="line.518"></a>
+<span class="sourceLineNo">519</span> regions.add(node.toRegionState());<a name="line.519"></a>
+<span class="sourceLineNo">520</span> }<a name="line.520"></a>
+<span class="sourceLineNo">521</span> return regions;<a name="line.521"></a>
+<span class="sourceLineNo">522</span> }<a name="line.522"></a>
+<span class="sourceLineNo">523</span><a name="line.523"></a>
+<span class="sourceLineNo">524</span> ArrayList<RegionInfo> getTableRegionsInfo(final TableName tableName) {<a name="line.524"></a>
+<span class="sourceLineNo">525</span> final ArrayList<RegionInfo> regions = new ArrayList<RegionInfo>();<a name="line.525"></a>
+<span class="sourceLineNo">526</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span> if (!node.getTable().equals(tableName)) break;<a name="line.527"></a>
+<span class="sourceLineNo">528</span> regions.add(node.getRegionInfo());<a name="line.528"></a>
+<span class="sourceLineNo">529</span> }<a name="line.529"></a>
+<span class="sourceLineNo">530</span> return regions;<a name="line.530"></a>
+<span class="sourceLineNo">531</span> }<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span> Collection<RegionStateNode> getRegionStateNodes() {<a name="line.533"></a>
+<span class="sourceLineNo">534</span> return regionsMap.values();<a name="line.534"></a>
<span class="sourceLineNo">535</span> }<a name="line.535"></a>
<span class="sourceLineNo">536</span><a name="line.536"></a>
-<span class="sourceLineNo">537</span> // ============================================================================================<a name="line.537"></a>
-<span class="sourceLineNo">538</span> // TODO: helpers<a name="line.538"></a>
-<span class="sourceLineNo">539</span> // ============================================================================================<a name="line.539"></a>
-<span class="sourceLineNo">540</span> public boolean hasTableRegionStates(final TableName tableName) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span> // TODO<a name="line.541"></a>
-<span class="sourceLineNo">542</span> return !getTableRegionStates(tableName).isEmpty();<a name="line.542"></a>
+<span class="sourceLineNo">537</span> public ArrayList<RegionState> getRegionStates() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>(regionsMap.size());<a name="line.538"></a>
+<span class="sourceLineNo">539</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span> regions.add(node.toRegionState());<a name="line.540"></a>
+<span class="sourceLineNo">541</span> }<a name="line.541"></a>
+<span class="sourceLineNo">542</span> return regions;<a name="line.542"></a>
<span class="sourceLineNo">543</span> }<a name="line.543"></a>
<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span> /**<a name="line.545"></a>
-<span class="sourceLineNo">546</span> * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.546"></a>
-<span class="sourceLineNo">547</span> */<a name="line.547"></a>
-<span class="sourceLineNo">548</span> public List<RegionInfo> getRegionsOfTable(final TableName table) {<a name="line.548"></a>
-<span class="sourceLineNo">549</span> return getRegionsOfTable(table, false);<a name="line.549"></a>
-<span class="sourceLineNo">550</span> }<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span> /**<a name="line.552"></a>
-<span class="sourceLineNo">553</span> * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.553"></a>
-<span class="sourceLineNo">554</span> * <code>offline</code> to true. Does not include regions that are in the<a name="line.554"></a>
-<span class="sourceLineNo">555</span> * {@link State#SPLIT} state.<a name="line.555"></a>
-<span class="sourceLineNo">556</span> */<a name="line.556"></a>
-<span class="sourceLineNo">557</span> public List<RegionInfo> getRegionsOfTable(final TableName table, final boolean offline) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span> final ArrayList<RegionStateNode> nodes = getTableRegionStateNodes(table);<a name="line.558"></a>
-<span class="sourceLineNo">559</span> final ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(nodes.size());<a name="line.559"></a>
-<span class="sourceLineNo">560</span> for (RegionStateNode node: nodes) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span> if (include(node, offline)) hris.add(node.getRegionInfo());<a name="line.561"></a>
-<span class="sourceLineNo">562</span> }<a name="line.562"></a>
-<span class="sourceLineNo">563</span> return hris;<a name="line.563"></a>
-<span class="sourceLineNo">564</span> }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span> /**<a name="line.566"></a>
-<span class="sourceLineNo">567</span> * Utility. Whether to include region in list of regions. Default is to<a name="line.567"></a>
-<span class="sourceLineNo">568</span> * weed out split and offline regions.<a name="line.568"></a>
-<span class="sourceLineNo">569</span> * @return True if we should include the <code>node</code> (do not include<a name="line.569"></a>
-<span class="sourceLineNo">570</span> * if split or offline unless <code>offline</code> is set to true.<a name="line.570"></a>
-<span class="sourceLineNo">571</span> */<a name="line.571"></a>
-<span class="sourceLineNo">572</span> boolean include(final RegionStateNode node, final boolean offline) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span> if (LOG.isTraceEnabled()) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span> LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.574"></a>
-<span class="sourceLineNo">575</span> }<a name="line.575"></a>
-<span class="sourceLineNo">576</span> if (node.isInState(State.SPLIT)) return false;<a name="line.576"></a>
-<span class="sourceLineNo">577</span> if (node.isInState(State.OFFLINE) && !offline) return false;<a name="line.577"></a>
-<span class="sourceLineNo">578</span> final RegionInfo hri = node.getRegionInfo();<a name="line.578"></a>
-<span class="sourceLineNo">579</span> return (!hri.isOffline() && !hri.isSplit()) ||<a name="line.579"></a>
-<span class="sourceLineNo">580</span> ((hri.isOffline() || hri.isSplit()) && offline);<a name="line.580"></a>
-<span class="sourceLineNo">581</span> }<a name="line.581"></a>
-<span class="sourceLineNo">582</span><a name="line.582"></a>
-<span class="sourceLineNo">583</span> /**<a name="line.583"></a>
-<span class="sourceLineNo">584</span> * Returns the set of regions hosted by the specified server<a name="line.584"></a>
-<span class="sourceLineNo">585</span> * @param serverName the server we are interested in<a name="line.585"></a>
-<span class="sourceLineNo">586</span> * @return set of RegionInfo hosted by the specified server<a name="line.586"></a>
-<span class="sourceLineNo">587</span> */<a name="line.587"></a>
-<span class="sourceLineNo">588</span> public List<RegionInfo> getServerRegionInfoSet(final ServerName serverName) {<a name="line.588"></a>
-<span class="sourceLineNo">589</span> final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.589"></a>
-<span class="sourceLineNo">590</span> if (serverInfo == null) return Collections.emptyList();<a name="line.590"></a>
+<span class="sourceLineNo">545</span> // ==========================================================================<a name="line.545"></a>
+<span class="sourceLineNo">546</span> // RegionState helpers<a name="line.546"></a>
+<span class="sourceLineNo">547</span> // ==========================================================================<a name="line.547"></a>
+<span class="sourceLineNo">548</span> public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.548"></a>
+<span class="sourceLineNo">549</span> RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.549"></a>
+<span class="sourceLineNo">550</span> return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.550"></a>
+<span class="sourceLineNo">551</span> }<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span> public RegionState getRegionState(final String encodedRegionName) {<a name="line.553"></a>
+<span class="sourceLineNo">554</span> // TODO: Need a map <encodedName, ...> but it is just dispatch merge...<a name="line.554"></a>
+<span class="sourceLineNo">555</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.555"></a>
+<span class="sourceLineNo">556</span> if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span> return node.toRegionState();<a name="line.557"></a>
+<span class="sourceLineNo">558</span> }<a name="line.558"></a>
+<span class="sourceLineNo">559</span> }<a name="line.559"></a>
+<span class="sourceLineNo">560</span> return null;<a name="line.560"></a>
+<span class="sourceLineNo">561</span> }<a name="line.561"></a>
+<span class="sourceLineNo">562</span><a name="line.562"></a>
+<span class="sourceLineNo">563</span> // ============================================================================================<a name="line.563"></a>
+<span class="sourceLineNo">564</span> // TODO: helpers<a name="line.564"></a>
+<span class="sourceLineNo">565</span> // ============================================================================================<a name="line.565"></a>
+<span class="sourceLineNo">566</span> public boolean hasTableRegionStates(final TableName tableName) {<a name="line.566"></a>
+<span class="sourceLineNo">567</span> // TODO<a name="line.567"></a>
+<span class="sourceLineNo">568</span> return !getTableRegionStates(tableName).isEmpty();<a name="line.568"></a>
+<span class="sourceLineNo">569</span> }<a name="line.569"></a>
+<span class="sourceLineNo">570</span><a name="line.570"></a>
+<span class="sourceLineNo">571</span> /**<a name="line.571"></a>
+<span class="sourceLineNo">572</span> * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.572"></a>
+<span class="sourceLineNo">573</span> */<a name="line.573"></a>
+<span class="sourceLineNo">574</span> public List<RegionInfo> getRegionsOfTable(final TableName table) {<a name="line.574"></a>
+<span class="sourceLineNo">575</span> return getRegionsOfTable(table, false);<a name="line.575"></a>
+<span class="sourceLineNo">576</span> }<a name="line.576"></a>
+<span class="sourceLineNo">577</span><a name="line.577"></a>
+<span class="sourceLineNo">578</span> /**<a name="line.578"></a>
+<span class="sourceLineNo">579</span> * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.579"></a>
+<span class="sourceLineNo">580</span> * <code>offline</code> to true. Does not include regions that are in the<a name="line.580"></a>
+<span class="sourceLineNo">581</span> * {@link State#SPLIT} state.<a name="line.581"></a>
+<span class="sourceLineNo">582</span> */<a name="line.582"></a>
+<span class="sourceLineNo">583</span> public List<RegionInfo> getRegionsOfTable(final TableName table, final boolean offline) {<a name="line.583"></a>
+<span class="sourceLineNo">584</span> final ArrayList<RegionStateNode> nodes = getTableRegionStateNodes(table);<a name="line.584"></a>
+<span class="sourceLineNo">585</span> final ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(nodes.size());<a name="line.585"></a>
+<span class="sourceLineNo">586</span> for (RegionStateNode node: nodes) {<a name="line.586"></a>
+<span class="sourceLineNo">587</span> if (include(node, offline)) hris.add(node.getRegionInfo());<a name="line.587"></a>
+<span class="sourceLineNo">588</span> }<a name="line.588"></a>
+<span class="sourceLineNo">589</span> return hris;<a name="line.589"></a>
+<span class="sourceLineNo">590</span> }<a name="line.590"></a>
<span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span> synchronized (serverInfo) {<a name="line.592"></a>
-<span class="sourceLineNo">593</span> return serverInfo.getRegionInfoList();<a name="line.593"></a>
-<span class="sourceLineNo">594</span> }<a name="line.594"></a>
-<span class="sourceLineNo">595</span> }<a name="line.595"></a>
-<span class="sourceLineNo">596</span><a name="line.596"></a>
-<span class="sourceLineNo">597</span> // ============================================================================================<a name="line.597"></a>
-<span class="sourceLineNo">598</span> // TODO: split helpers<a name="line.598"></a>
-<span class="sourceLineNo">599</span> // ============================================================================================<a name="line.599"></a>
-<span class="sourceLineNo">600</span> public void logSplit(final ServerName serverName) {<a name="line.600"></a>
-<span class="sourceLineNo">601</span> final ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.601"></a>
-<span class="sourceLineNo">602</span> synchronized (serverNode) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span> serverNode.setState(ServerState.SPLITTING);<a name="line.603"></a>
-<span class="sourceLineNo">604</span> /* THIS HAS TO BE WRONG. THIS IS SPLITTING OF REGION, NOT SPLITTING WALs.<a name="line.604"></a>
-<span class="sourceLineNo">605</span> for (RegionStateNode regionNode: serverNode.getRegions()) {<a name="line.605"></a>
-<span class="sourceLineNo">606</span> synchronized (regionNode) {<a name="line.606"></a>
-<span class="sourceLineNo">607</span> // TODO: Abort procedure if present<a name="line.607"></a>
-<span class="sourceLineNo">608</span> regionNode.setState(State.SPLITTING);<a name="line.608"></a>
-<span class="sourceLineNo">609</span> }<a name="line.609"></a>
-<span class="sourceLineNo">610</span> }*/<a name="line.610"></a>
-<span class="sourceLineNo">611</span> }<a name="line.611"></a>
-<span class="sourceLineNo">612</span> }<a name="line.612"></a>
-<span class="sourceLineNo">613</span><a name="line.613"></a>
-<span class="sourceLineNo">614</span> public void logSplit(final RegionInfo regionInfo) {<a name="line.614"></a>
-<span class="sourceLineNo">615</span> final RegionStateNode regionNode = getRegionStateNode(regionInfo);<a name="line.615"></a>
-<span class="sourceLineNo">616</span> synchronized (regionNode) {<a name="line.616"></a>
-<span class="sourceLineNo">617</span> regionNode.setState(State.SPLIT);<a name="line.617"></a>
-<span class="sourceLineNo">618</span> }<a name="line.618"></a>
-<span class="sourceLineNo">619</span> }<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span> @VisibleForTesting<a name="line.621"></a>
-<span class="sourceLineNo">622</span> public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span> final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.623"></a>
-<span class="sourceLineNo">624</span> synchronized (regionNode) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span> regionNode.setState(state);<a name="line.625"></a>
-<span class="sourceLineNo">626</span> }<a name="line.626"></a>
-<span class="sourceLineNo">627</span> }<a name="line.627"></a>
-<span class="sourceLineNo">628</span><a name="line.628"></a>
-<span class="sourceLineNo">629</span> // ============================================================================================<a name="line.629"></a>
-<span class="sourceLineNo">630</span> // TODO:<a name="line.630"></a>
-<span class="sourceLineNo">631</span> // ============================================================================================<a name="line.631"></a>
-<span class="sourceLineNo">632</span> public List<RegionInfo> getAssignedRegions() {<a name="line.632"></a>
-<span class="sourceLineNo">633</span> final List<RegionInfo> result = new ArrayList<RegionInfo>();<a name="line.633"></a>
-<span class="sourceLineNo">634</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span> if (!node.isInTransition()) {<a name="line.635"></a>
-<span class="sourceLineNo">636</span> result.add(node.getRegionInfo());<a name="line.636"></a>
-<span class="sourceLineNo">637</span> }<a name="line.637"></a>
-<span class="sourceLineNo">638</span> }<a name="line.638"></a>
-<span class="sourceLineNo">639</span> return result;<a name="line.639"></a>
-<span class="sourceLineNo">640</span> }<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span> public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.643"></a>
-<span class="sourceLineNo">644</span> if (region != null) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span> synchronized (region) {<a name="line.645"></a>
-<span class="sourceLineNo">646</span> return region.isInState(state);<a name="line.646"></a>
-<span class="sourceLineNo">647</span> }<a name="line.647"></a>
-<span class="sourceLineNo">648</span> }<a name="line.648"></a>
-<span class="sourceLineNo">649</span> return false;<a name="line.649"></a>
-<span class="sourceLineNo">650</span> }<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span> public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span> return isRegionInState(regionInfo, State.OPEN);<a name="line.653"></a>
+<span class="sourceLineNo">592</span> /**<a name="line.592"></a>
+<span class="sourceLineNo">593</span> * Utility. Whether to include region in list of regions. Default is to<a name="line.593"></a>
+<span class="sourceLineNo">594</span> * weed out split and offline regions.<a name="line.594"></a>
+<span class="sourceLineNo">595</span> * @return True if we should include the <code>node</code> (do not include<a name="line.595"></a>
+<span class="sourceLineNo">596</span> * if split or offline unless <code>offline</code> is set to true.<a name="line.596"></a>
+<span class="sourceLineNo">597</span> */<a name="line.597"></a>
+<span class="sourceLineNo">598</span> boolean include(final RegionStateNode node, final boolean offline) {<a name="line.598"></a>
+<span class="sourceLineNo">599</span> if (LOG.isTraceEnabled()) {<a name="line.599"></a>
+<span class="sourceLineNo">600</span> LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.600"></a>
+<span class="sourceLineNo">601</span> }<a name="line.601"></a>
+<span class="sourceLineNo">602</span> if (node.isInState(State.SPLIT)) return false;<a name="line.602"></a>
+<span class="sourceLineNo">603</span> if (node.isInState(State.OFFLINE) && !offline) return false;<a name="line.603"></a>
+<span class="sourceLineNo">604</span> final RegionInfo hri = node.getRegionInfo();<a name="line.604"></a>
+<span class="sourceLineNo">605</span> return (!hri.isOffline() && !hri.isSplit()) ||<a name="line.605"></a>
+<span class="sourceLineNo">606</span> ((hri.isOffline() || hri.isSplit()) && offline);<a name="line.606"></a>
+<span class="sourceLineNo">607</span> }<a name="line.607"></a>
+<span class="sourceLineNo">608</span><a name="line.608"></a>
+<span class="sourceLineNo">609</span> /**<a name="line.609"></a>
+<span class="sourceLineNo">610</span> * Returns the set of regions hosted by the specified server<a name="line.610"></a>
+<span class="sourceLineNo">611</span> * @param serverName the server we are interested in<a name="line.611"></a>
+<span class="sourceLineNo">612</span> * @return set of RegionInfo hosted by the specified server<a name="line.612"></a>
+<span class="sourceLineNo">613</span> */<a name="line.613"></a>
+<span class="sourceLineNo">614</span> public List<RegionInfo> getServerRegionInfoSet(final ServerName serverName) {<a name="line.614"></a>
+<span class="sourceLineNo">615</span> final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.615"></a>
+<span class="sourceLineNo">616</span> if (serverInfo == null) return Collections.emptyList();<a name="line.616"></a>
+<span class="sourceLineNo">617</span><a name="line.617"></a>
+<span class="sourceLineNo">618</span> synchronized (serverInfo) {<a name="line.618"></a>
+<span class="sourceLineNo">619</span> return serverInfo.getRegionInfoList();<a name="line.619"></a>
+<span class="sourceLineNo">620</span> }<a name="line.620"></a>
+<span class="sourceLineNo">621</span> }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span> // ============================================================================================<a name="line.623"></a>
+<span class="sourceLineNo">624</span> // TODO: split helpers<a name="line.624"></a>
+<span class="sourceLineNo">625</span> // ============================================================================================<a name="line.625"></a>
+<span class="sourceLineNo">626</span><a name="line.626"></a>
+<span class="sourceLineNo">627</span> /**<a name="line.627"></a>
+<span class="sourceLineNo">628</span> * Call this when we start log splitting a crashed Server.<a name="line.628"></a>
+<span class="sourceLineNo">629</span> * @see #logSplit(ServerName)<a name="line.629"></a>
+<span class="sourceLineNo">630</span> */<a name="line.630"></a>
+<span class="sourceLineNo">631</span> public void logSplitting(final ServerName serverName) {<a name="line.631"></a>
+<span class="sourceLineNo">632</span> final ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.632"></a>
+<span class="sourceLineNo">633</span> synchronized (serverNode) {<a name="line.633"></a>
+<span class="sourceLineNo">634</span> serverNode.setState(ServerState.SPLITTING);<a name="line.634"></a>
+<span class="sourceLineNo">635</span> }<a name="line.635"></a>
+<span class="sourceLineNo">636</span> }<a name="line.636"></a>
+<span class="sourceLineNo">637</span><a name="line.637"></a>
+<span class="sourceLineNo">638</span> /**<a name="line.638"></a>
+<span class="sourceLineNo">639</span> * Called after we've split all logs on a crashed Server.<a name="line.639"></a>
+<span class="sourceLineNo">640</span> * @see #logSplitting(ServerName)<a name="line.640"></a>
+<span class="sourceLineNo">641</span> */<a name="line.641"></a>
+<span class="sourceLineNo">642</span> public void logSplit(final ServerName serverName) {<a name="line.642"></a>
+<span class="sourceLineNo">643</span> final ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.643"></a>
+<span class="sourceLineNo">644</span> synchronized (serverNode) {<a name="line.644"></a>
+<span class="sourceLineNo">645</span> serverNode.setState(ServerState.OFFLINE);<a name="line.645"></a>
+<span class="sourceLineNo">646</span> }<a name="line.646"></a>
+<span class="sourceLineNo">647</span> }<a name="line.647"></a>
+<span class="sourceLineNo">648</span><a name="line.648"></a>
+<span class="sourceLineNo">649</span> public void logSplit(final RegionInfo regionInfo) {<a name="line.649"></a>
+<span class="sourceLineNo">650</span> final RegionStateNode regionNode = getRegionStateNode(regionInfo);<a name="line.650"></a>
+<span class="sourceLineNo">651</span> synchronized (regionNode) {<a name="line.651"></a>
+<span class="sourceLineNo">652</span> regionNode.setState(State.SPLIT);<a name="line.652"></a>
+<span class="sourceLineNo">653</span> }<a name="line.653"></a>
<span class="sourceLineNo">654</span> }<a name="line.654"></a>
<span class="sourceLineNo">655</span><a name="line.655"></a>
-<span class="sourceLineNo">656</span> /**<a name="line.656"></a>
-<span class="sourceLineNo">657</span> * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.657"></a>
-<span class="sourceLineNo">658</span> */<a name="line.658"></a>
-<span class="sourceLineNo">659</span> public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.659"></a>
-<span class="sourceLineNo">660</span> return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.660"></a>
-<span class="sourceLineNo">661</span> }<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span> public Map<ServerName, List<RegionInfo>> getSnapShotOfAssignment(<a name="line.663"></a>
-<span class="sourceLineNo">664</span> final Collection<RegionInfo> regions) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span> final Map<ServerName, List<RegionInfo>> result = new HashMap<ServerName, List<RegionInfo>>();<a name="line.665"></a>
-<span class="sourceLineNo">666</span> for (RegionInfo hri: regions) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span> final RegionStateNode node = getRegionStateNode(hri);<a name="line.667"></a>
-<span class="sourceLineNo">668</span> if (node == null) continue;<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span> // TODO: State.OPEN<a name="line.670"></a>
-<span class="sourceLineNo">671</span> final ServerName serverName = node.getRegionLocation();<a name="line.671"></a>
-<span class="sourceLineNo">672</span> if (serverName == null) continue;<a name="line.672"></a>
-<span class="sourceLineNo">673</span><a name="line.673"></a>
-<span class="sourceLineNo">674</span> List<RegionInfo> serverRegions = result.get(serverName);<a name="line.674"></a>
-<span class="sourceLineNo">675</span> if (serverRegions == null) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span> serverRegions = new ArrayList<RegionInfo>();<a name="line.676"></a>
-<span class="sourceLineNo">677</span> result.put(serverName, serverRegions);<a name="line.677"></a>
-<span class="sourceLineNo">678</span> }<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span> serverRegions.add(node.getRegionInfo());<a name="line.680"></a>
-<span class="sourceLineNo">681</span> }<a name="line.681"></a>
-<span class="sourceLineNo">682</span> return result;<a name="line.682"></a>
-<span class="sourceLineNo">683</span> }<a name="line.683"></a>
-<span class="sourceLineNo">684</span><a name="line.684"></a>
-<span class="sourceLineNo">685</span> public Map<RegionInfo, ServerName> getRegionAssignments() {<a name="line.685"></a>
-<span class="sourceLineNo">686</span> final HashMap<RegionInfo, ServerName> assignments = new HashMap<RegionInfo, ServerName>();<a name="line.686"></a>
-<span class="sourceLineNo">687</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.687"></a>
-<span class="sourceLineNo">688</span> assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.688"></a>
-<span class="sourceLineNo">689</span> }<a name="line.689"></a>
-<span class="sourceLineNo">690</span> return assignments;<a name="line.690"></a>
-<span class="sourceLineNo">691</span> }<a name="line.691"></a>
-<span class="sourceLineNo">692</span><a name="line.692"></a>
-<span class="sourceLineNo">693</span> public Map<RegionState.State, List<RegionInfo>> getRegionByStateOfTable(TableName tableName) {<a name="line.693"></a>
-<span class="sourceLineNo">694</span> final State[] states = State.values();<a name="line.694"></a>
-<span class="sourceLineNo">695</span> final Map<RegionState.State, List<RegionInfo>> tableRegions =<a name="line.695"></a>
-<span class="sourceLineNo">696</span> new HashMap<State, List<RegionInfo>>(states.length);<a name="line.696"></a>
-<span class="sourceLineNo">697</span> for (int i = 0; i < states.length; ++i) {<a name="line.697"></a>
-<span class="sourceLineNo">698</span> tableRegions.put(states[i], new ArrayList<RegionInfo>());<a name="line.698"></a>
-<span class="sourceLineNo">699</span> }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span> if (node.getTable().equals(tableName)) {<a name="line.702"></a>
-<span class="sourceLineNo">703</span> tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.703"></a>
-<span class="sourceLineNo">704</span> }<a name="line.704"></a>
-<span class="sourceLineNo">705</span> }<a name="line.705"></a>
-<span class="sourceLineNo">706</span> return tableRegions;<a name="line.706"></a>
-<span class="sourceLineNo">707</span> }<a name="line.707"></a>
+<span class="sourceLineNo">656</span> @VisibleForTesting<a name="line.656"></a>
+<span class="sourceLineNo">657</span> public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.657"></a>
+<span class="sourceLineNo">658</span> final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.658"></a>
+<span class="sourceLineNo">659</span> synchronized (regionNode) {<a name="line.659"></a>
+<span class="sourceLineNo">660</span> regionNode.setState(state);<a name="line.660"></a>
+<span class="sourceLineNo">661</span> }<a name="line.661"></a>
+<span class="sourceLineNo">662</span> }<a name="line.662"></a>
+<span class="sourceLineNo">663</span><a name="line.663"></a>
+<span class="sourceLineNo">664</span> // ============================================================================================<a name="line.664"></a>
+<span class="sourceLineNo">665</span> // TODO:<a name="line.665"></a>
+<span class="sourceLineNo">666</span> // ============================================================================================<a name="line.666"></a>
+<span class="sourceLineNo">667</span> public List<RegionInfo> getAssignedRegions() {<a name="line.667"></a>
+<span class="sourceLineNo">668</span> final List<RegionInfo> result = new ArrayList<RegionInfo>();<a name="line.668"></a>
+<span class="sourceLineNo">669</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.669"></a>
+<span class="sourceLineNo">670</span> if (!node.isInTransition()) {<a name="line.670"></a>
+<span class="sourceLineNo">671</span> result.add(node.getRegionInfo());<a name="line.671"></a>
+<span class="sourceLineNo">672</span> }<a name="line.672"></a>
+<span class="sourceLineNo">673</span> }<a name="line.673"></a>
+<span class="sourceLineNo">674</span> return result;<a name="line.674"></a>
+<span class="sourceLineNo">675</span> }<a name="line.675"></a>
+<span class="sourceLineNo">676</span><a name="line.676"></a>
+<span class="sourceLineNo">677</span> public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.677"></a>
+<span class="sourceLineNo">678</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.678"></a>
+<span class="sourceLineNo">679</span> if (region != null) {<a name="line.679"></a>
+<span class="sourceLineNo">680</span> synchronized (region) {<a name="line.680"></a>
+<span class="sourceLineNo">681</span> return region.isInState(state);<a name="line.681"></a>
+<span class="sourceLineNo">682</span> }<a name="line.682"></a>
+<span class="sourceLineNo">683</span> }<a name="line.683"></a>
+<span class="sourceLineNo">684</span> return false;<a name="line.684"></a>
+<span class="sourceLineNo">685</span> }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span> public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.687"></a>
+<span class="sourceLineNo">688</span> return isRegionInState(regionInfo, State.OPEN);<a name="line.688"></a>
+<span class="sourceLineNo">689</span> }<a name="line.689"></a>
+<span class="sourceLineNo">690</span><a name="line.690"></a>
+<span class="sourceLineNo">691</span> /**<a name="line.691"></a>
+<span class="sourceLineNo">692</span> * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.692"></a>
+<span class="sourceLineNo">693</span> */<a name="line.693"></a>
+<span class="sourceLineNo">694</span> public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.694"></a>
+<span class="sourceLineNo">695</span> return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.695"></a>
+<span class="sourceLineNo">696</span> }<a name="line.696"></a>
+<span class="sourceLineNo">697</span><a name="line.697"></a>
+<span class="sourceLineNo">698</span> public Map<ServerName, List<RegionInfo>> getSnapShotOfAssignment(<a name="line.698"></a>
+<span class="sourceLineNo">699</span> final Collection<RegionInfo> regions) {<a name="line.699"></a>
+<span class="sourceLineNo">700</span> final Map<ServerName, List<RegionInfo>> result = new HashMap<ServerName, List<RegionInfo>>();<a name="line.700"></a>
+<span class="sourceLineNo">701</span> for (RegionInfo hri: regions) {<a name="line.701"></a>
+<span class="sourceLineNo">702</span> final RegionStateNode node = getRegionStateNode(hri);<a name="line.702"></a>
+<span class="sourceLineNo">703</span> if (node == null) continue;<a name="line.703"></a>
+<span class="sourceLineNo">704</span><a name="line.704"></a>
+<span class="sourceLineNo">705</span> // TODO: State.OPEN<a name="line.705"></a>
+<span class="sourceLineNo">706</span> final ServerName serverName = node.getRegionLocation();<a name="line.706"></a>
+<span class="sourceLineNo">707</span> if (serverName == null) continue;<a name="line.707"></a>
<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span> public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.709"></a>
-<span class="sourceLineNo">710</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.710"></a>
-<span class="sourceLineNo">711</span> if (region != null) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span> synchronized (region) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span> ServerName server = region.getRegionLocation();<a name="line.713"></a>
-<span class="sourceLineNo">714</span> return server != null ? server : region.getLastHost();<a name="line.714"></a>
-<span class="sourceLineNo">715</span> }<a name="line.715"></a>
+<span class="sourceLineNo">709</span> List<RegionInfo> serverRegions = result.get(serverName);<a name="line.709"></a>
+<span class="sourceLineNo">710</span> if (serverRegions == null) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span> serverRegions = new ArrayList<RegionInfo>();<a name="line.711"></a>
+<span class="sourceLineNo">712</span> result.put(serverName, serverRegions);<a name="line.712"></a>
+<span class="sourceLineNo">713</span> }<a name="line.713"></a>
+<span class="sourceLineNo">714</span><a name="line.714"></a>
+<span class="sourceLineNo">715</span> serverRegions.add(node.getRegionInfo());<a name="line.715"></a>
<span class="sourceLineNo">716</span> }<a name="line.716"></a>
-<span class="sourceLineNo">717</span> return null;<a name="line.717"></a>
+<span class="sourceLineNo">717</span> return result;<a name="line.717"></a>
<span class="sourceLineNo">718</span> }<a name="line.718"></a>
<span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span> /**<a name="line.720"></a>
-<span class="sourceLineNo">721</span> * This is an EXPENSIVE clone. Cloning though is the safest thing to do.<a name="line.721"></a>
-<span class="sourceLineNo">722</span> * Can't let out original since it can change and at least the load balancer<a name="line.722"></a>
-<span class="sourceLineNo">723</span> * wants to iterate this exported list. We need to synchronize on regions<a name="line.723"></a>
-<span class="sourceLineNo">724</span> * since all access to this.servers is under a lock on this.regions.<a name="line.724"></a>
-<span class="sourceLineNo">725</span> * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.725"></a>
-<span class="sourceLineNo">726</span> * @return A clone of current assignments by table.<a name="line.726"></a>
-<span class="sourceLineNo">727</span> */<a name="line.727"></a>
-<span class="sourceLineNo">728</span> public Map<TableName, Map<ServerName, List<RegionInfo>>> getAssignmentsByTable(<a name="line.728"></a>
-<span class="sourceLineNo">729</span> final boolean forceByCluster) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span> if (!forceByCluster) return getAssignmentsByTable();<a name="line.730"></a>
-<span class="sourceLineNo">731</span><a name="line.731"></a>
-<span class="sourceLineNo">732</span> final HashMap<ServerName, List<RegionInfo>> ensemble =<a name="line.732"></a>
-<span class="sourceLineNo">733</span> new HashMap<ServerName, List<RegionInfo>>(serverMap.size());<a name="line.733"></a>
-<span class="sourceLineNo">734</span> for (ServerStateNode serverNode: serverMap.values()) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span> ensemble.put(serverNode.getServerName(), serverNode.getRegionInfoList());<a name="line.735"></a>
-<span class="sourceLineNo">736</span> }<a name="line.736"></a>
-<span class="sourceLineNo">737</span><a name="line.737"></a>
-<span class="sourceLineNo">738</span> // TODO: can we use Collections.singletonMap(HConstants.ENSEMBLE_TABLE_NAME, ensemble)?<a name="line.738"></a>
-<span class="sourceLineNo">739</span> final Map<TableName, Map<ServerName, List<RegionInfo>>> result =<a name="line.739"></a>
-<span class="sourceLineNo">740</span> new HashMap<TableName, Map<ServerName, List<RegionInfo>>>(1);<a name="line.740"></a>
-<span class="sourceLineNo">741</span> result.put(HConstants.ENSEMBLE_TABLE_NAME, ensemble);<a name="line.741"></a>
-<span class="sourceLineNo">742</span> return result;<a name="line.742"></a>
-<span class="sourceLineNo">743</span> }<a name="line.743"></a>
-<span class="sourceLineNo">744</span><a name="line.744"></a>
-<span class="sourceLineNo">745</span> public Map<TableName, Map<ServerName, List<RegionInfo>>> getAssignmentsByTable() {<a name="line.745"></a>
-<span class="sourceLineNo">746</span> final Map<TableName, Map<ServerName, List<RegionInfo>>> result = new HashMap<>();<a name="line.746"></a>
-<span class="sourceLineNo">747</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span> Map<ServerName, List<RegionInfo>> tableResult = result.get(node.getTable());<a name="line.748"></a>
-<span class="sourceLineNo">749</span> if (tableResult == null) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span> tableResult = new HashMap<ServerName, List<RegionInfo>>();<a name="line.750"></a>
-<span class="sourceLineNo">751</span> result.put(node.getTable(), tableResult);<a name="line.751"></a>
-<span class="sourceLineNo">752</span> }<a name="line.752"></a>
-<span class="sourceLineNo">753</span><a name="line.753"></a>
-<span class="sourceLineNo">754</span> final ServerName serverName = node.getRegionLocation();<a name="line.754"></a>
-<span class="sourceLineNo">755</span> if (serverName == null) {<a name="line.755"></a>
-<span class="sourceLineNo">756</span> LOG.info("Skipping, no server for " + node);<a name="line.756"></a>
-<span class="sourceLineNo">757</span> continue;<a name="line.757"></a>
-<span class="sourceLineNo">758</span> }<a name="line.758"></a>
-<span class="sourceLineNo">759</span> List<RegionInfo> serverResult = tableResult.get(serverName);<a name="line.759"></a>
-<span class="sourceLineNo">760</span> if (serverResult == null) {<a name="line.760"></a>
-<span class="sourceLineNo">761</span> serverResult = new ArrayList<RegionInfo>();<a name="line.761"></a>
-<span class="sourceLineNo">762</span> tableResult.put(serverName, serverResult);<a name="line.762"></a>
-<span class="sourceLineNo">763</span> }<a name="line.763"></a>
-<span class="sourceLineNo">764</span><a name="line.764"></a>
-<span class="sourceLineNo">765</span> serverResult.add(node.getRegionInfo());<a name="line.765"></a>
-<span class="sourceLineNo">766</span> }<a name="line.766"></a>
-<span class="sourceLineNo">767</span> // Add online servers with no assignment for the table.<a name="line.767"></a>
-<span class="sourceLineNo">768</span> for (Map<ServerName, List<RegionInfo>> table: result.values()) {<a name="line.768"></a>
-<span class="sourceLineNo">769</span> for (ServerName svr : serverMap.keySet()) {<a name="line.769"></a>
-<span class="sourceLineNo">770</span> if (!table.containsKey(svr)) {<a name="line.770"></a>
-<span class="sourceLineNo">771</span> table.put(svr, new ArrayList<RegionInfo>());<a name="line.771"></a>
-<span class="sourceLineNo">772</span> }<a name="line.772"></a>
-<span class="sourceLineNo">773</span> }<a name="line.773"></a>
-<span class="sourceLineNo">774</span> }<a name="line.774"></a>
-<span class="sourceLineNo">775</span> return result;<a name="line.775"></a>
-<span class="sourceLineNo">776</span> }<a name="line.776"></a>
-<span class="sourceLineNo">777</span><a name="line.777"></a>
-<span class="sourceLineNo">778</span> // ==========================================================================<a name="line.778"></a>
-<span class="sourceLineNo">779</span> // Region in transition helpers<a name="line.779"></a>
-<span class="sourceLineNo">780</span> // ==========================================================================<a name="line.780"></a>
-<span class="sourceLineNo">781</span> protected boolean addRegionInTransition(final RegionStateNode regionNode,<a name="line.781"></a>
-<span class="sourceLineNo">782</span> final RegionTransitionProcedure procedure) {<a name="line.782"></a>
-<span class="sourceLineNo">783</span> if (procedure != null && !regionNode.setProcedure(procedure)) return false;<a name="line.783"></a>
-<span class="sourceLineNo">784</span><a name="line.784"></a>
-<span class="sourceLineNo">785</span> regionInTransition.put(regionNode.getRegionInfo(), regionNode);<a name="line.785"></a>
-<span class="sourceLineNo">786</span> return true;<a name="line.786"></a>
-<span class="sourceLineNo">787</span> }<a name="line.787"></a>
+<span class="sourceLineNo">720</span> public Map<RegionInfo, ServerName> getRegionAssignments() {<a name="line.720"></a>
+<span class="sourceLineNo">721</span> final HashMap<RegionInfo, ServerName> assignments = new HashMap<RegionInfo, ServerName>();<a name="line.721"></a>
+<span class="sourceLineNo">722</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span> assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.723"></a>
+<span class="sourceLineNo">724</span> }<a name="line.724"></a>
+<span class="sourceLineNo">725</span> return assignments;<a name="line.725"></a>
+<span class="sourceLineNo">726</span> }<a name="line.726"></a>
+<span class="sourceLineNo">727</span><a name="line.727"></a>
+<span class="sourceLineNo">728</span> public Map<RegionState.State, List<RegionInfo>> getRegionByStateOfTable(TableName tableName) {<a name="line.728"></a>
+<span class="sourceLineNo">729</span> final State[] states = State.values();<a name="line.729"></a>
+<span class="sourceLineNo">730</span> final Map<RegionState.State, List<RegionInfo>> tableRegions =<a name="line.730"></a>
+<span class="sourceLineNo">731</span> new HashMap<State, List<RegionInfo>>(states.length);<a name="line.731"></a>
+<span class="sourceLineNo">732</span> for (int i = 0; i < states.length; ++i) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span> tableRegions.put(states[i], new ArrayList<RegionInfo>());<a name="line.733"></a>
+<span class="sourceLineNo">734</span> }<a name="line.734"></a>
+<span class="sourceLineNo">735</span><a name="line.735"></a>
+<span class="sourceLineNo">736</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.736"></a>
+<span class="sourceLineNo">737</span> if (node.getTable().equals(tableName)) {<a name="line.737"></a>
+<span class="sourceLineNo">738</span> tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.738"></a>
+<span class="sourceLineNo">739</span> }<a name="line.739"></a>
+<span class="sourceLineNo">740</span> }<a name="line.740"></a>
+<span class="sourceLineNo">741</span> return tableRegions;<a name="line.741"></a>
+<span class="sourceLineNo">742</span> }<a name="line.742"></a>
+<span class="sourceLineNo">743</span><a name="line.743"></a>
+<span class="sourceLineNo">744</span> public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.744"></a>
+<span class="sourceLineNo">745</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.745"></a>
+<span class="sourceLineNo">746</span> if (region != null) {<a name="line.746"></a>
+<span class="sourceLineNo">747</span> synchronized (region) {<a name="line.747"></a>
+<span class="sourceLineNo">748</span> ServerName server = region.getRegionLocation();<a name="line.748"></a>
+<span class="sourceLineNo">749</span> return server != null ? server : region.getLastHost();<a name="line.749"></a>
+<span class="sourceLineNo">750</span> }<a name="line.750"></a>
+<span class="sourceLineNo">751</span> }<a name="line.751"></a>
+<span class="sourceLineNo">752</span> return null;<a name="line.752"></a>
+<span class="sourceLineNo">753</span> }<a name="line.753"></a>
+<span class="sourceLineNo">754</span><a name="line.754"></a>
+<span class="sourceLineNo">755</span> /**<a name="line.755"></a>
+<span class="sourceLineNo">756</span> * This is an EXPENSIVE clone. Cloning though is the safest thing to do.<a name="line.756"></a>
+<span class="sourceLineNo">757</span> * Can't let out original since it can change and at least the load balancer<a name="line.757"></a>
+<span class="sourceLineNo">758</span> * wants to iterate this exported list. We need to synchronize on regions<a name="line.758"></a>
+<span class="sourceLineNo">759</span> * since all access to this.servers is under a lock on this.regions.<a name="line.759"></a>
+<span class="sourceLineNo">760</span> * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.760"></a>
+<span class="sourceLineNo">761</span> * @return A clone of current assignments by table.<a name="line.761"></a>
+<span class="sourceLineNo">762</span> */<a name="line.762"></a>
+<span class="sourceLineNo">763</span> public Map<TableName, Map<ServerName, List<RegionInfo>>> getAssignmentsByTable(<a name="line.763"></a>
+<span class="sourceLineNo">764</span> final boolean forceByCluster) {<a name="line.764"></a>
+<span class
<TRUNCATED>
[31/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
index aa48364..9549aa5 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
@@ -2830,843 +2830,858 @@
<span class="sourceLineNo">2822</span> * @return true if master is in maintenanceMode<a name="line.2822"></a>
<span class="sourceLineNo">2823</span> */<a name="line.2823"></a>
<span class="sourceLineNo">2824</span> @Override<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span> public boolean isInMaintenanceMode() {<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span> return maintenanceModeTracker.isInMaintenanceMode();<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span> }<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span><a name="line.2828"></a>
-<span class="sourceLineNo">2829</span> @VisibleForTesting<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span> public void setInitialized(boolean isInitialized) {<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span> procedureExecutor.getEnvironment().setEventReady(initialized, isInitialized);<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span> }<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span><a name="line.2833"></a>
-<span class="sourceLineNo">2834</span> @Override<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span> public ProcedureEvent<?> getInitializedEvent() {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span> return initialized;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span> }<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span><a name="line.2838"></a>
-<span class="sourceLineNo">2839</span> /**<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span> * ServerCrashProcessingEnabled is set false before completing assignMeta to prevent processing<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span> * of crashed servers.<a name="line.2841"></a>
-<span class="sourceLineNo">2842</span> * @return true if assignMeta has completed;<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span> */<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span> @Override<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span> public boolean isServerCrashProcessingEnabled() {<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span> return serverCrashProcessingEnabled.isReady();<a name="line.2846"></a>
-<span class="sourceLineNo">2847</span> }<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span><a name="line.2848"></a>
-<span class="sourceLineNo">2849</span> @VisibleForTesting<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span> public void setServerCrashProcessingEnabled(final boolean b) {<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span> procedureExecutor.getEnvironment().setEventReady(serverCrashProcessingEnabled, b);<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span> }<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span><a name="line.2853"></a>
-<span class="sourceLineNo">2854</span> public ProcedureEvent<?> getServerCrashProcessingEnabledEvent() {<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span> return serverCrashProcessingEnabled;<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span> }<a name="line.2856"></a>
-<span class="sourceLineNo">2857</span><a name="line.2857"></a>
-<span class="sourceLineNo">2858</span> /**<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span> * Compute the average load across all region servers.<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span> * Currently, this uses a very naive computation - just uses the number of<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span> * regions being served, ignoring stats about number of requests.<a name="line.2861"></a>
-<span class="sourceLineNo">2862</span> * @return the average load<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span> */<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span> public double getAverageLoad() {<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span> if (this.assignmentManager == null) {<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span> return 0;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span> }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span> RegionStates regionStates = this.assignmentManager.getRegionStates();<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span> if (regionStates == null) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span> return 0;<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span> }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span> return regionStates.getAverageLoad();<a name="line.2873"></a>
-<span class="sourceLineNo">2874</span> }<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span><a name="line.2875"></a>
-<span class="sourceLineNo">2876</span> /*<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span> * @return the count of region split plans executed<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span> */<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span> public long getSplitPlanCount() {<a name="line.2879"></a>
-<span class="sourceLineNo">2880</span> return splitPlanCount;<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span> }<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span><a name="line.2882"></a>
-<span class="sourceLineNo">2883</span> /*<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span> * @return the count of region merge plans executed<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span> */<a name="line.2885"></a>
-<span class="sourceLineNo">2886</span> public long getMergePlanCount() {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span> return mergePlanCount;<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span> }<a name="line.2888"></a>
-<span class="sourceLineNo">2889</span><a name="line.2889"></a>
-<span class="sourceLineNo">2890</span> @Override<a name="line.2890"></a>
-<span class="sourceLineNo">2891</span> public boolean registerService(Service instance) {<a name="line.2891"></a>
-<span class="sourceLineNo">2892</span> /*<a name="line.2892"></a>
-<span class="sourceLineNo">2893</span> * No stacking of instances is allowed for a single service name<a name="line.2893"></a>
-<span class="sourceLineNo">2894</span> */<a name="line.2894"></a>
-<span class="sourceLineNo">2895</span> Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.2895"></a>
-<span class="sourceLineNo">2896</span> String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.2896"></a>
-<span class="sourceLineNo">2897</span> if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.2897"></a>
-<span class="sourceLineNo">2898</span> LOG.error("Coprocessor service "+serviceName+<a name="line.2898"></a>
-<span class="sourceLineNo">2899</span> " already registered, rejecting request from "+instance<a name="line.2899"></a>
-<span class="sourceLineNo">2900</span> );<a name="line.2900"></a>
-<span class="sourceLineNo">2901</span> return false;<a name="line.2901"></a>
-<span class="sourceLineNo">2902</span> }<a name="line.2902"></a>
-<span class="sourceLineNo">2903</span><a name="line.2903"></a>
-<span class="sourceLineNo">2904</span> coprocessorServiceHandlers.put(serviceName, instance);<a name="line.2904"></a>
-<span class="sourceLineNo">2905</span> if (LOG.isDebugEnabled()) {<a name="line.2905"></a>
-<span class="sourceLineNo">2906</span> LOG.debug("Registered master coprocessor service: service="+serviceName);<a name="line.2906"></a>
-<span class="sourceLineNo">2907</span> }<a name="line.2907"></a>
-<span class="sourceLineNo">2908</span> return true;<a name="line.2908"></a>
-<span class="sourceLineNo">2909</span> }<a name="line.2909"></a>
-<span class="sourceLineNo">2910</span><a name="line.2910"></a>
-<span class="sourceLineNo">2911</span> /**<a name="line.2911"></a>
-<span class="sourceLineNo">2912</span> * Utility for constructing an instance of the passed HMaster class.<a name="line.2912"></a>
-<span class="sourceLineNo">2913</span> * @param masterClass<a name="line.2913"></a>
-<span class="sourceLineNo">2914</span> * @return HMaster instance.<a name="line.2914"></a>
-<span class="sourceLineNo">2915</span> */<a name="line.2915"></a>
-<span class="sourceLineNo">2916</span> public static HMaster constructMaster(Class<? extends HMaster> masterClass,<a name="line.2916"></a>
-<span class="sourceLineNo">2917</span> final Configuration conf) {<a name="line.2917"></a>
-<span class="sourceLineNo">2918</span> try {<a name="line.2918"></a>
-<span class="sourceLineNo">2919</span> Constructor<? extends HMaster> c = masterClass.getConstructor(Configuration.class);<a name="line.2919"></a>
-<span class="sourceLineNo">2920</span> return c.newInstance(conf);<a name="line.2920"></a>
-<span class="sourceLineNo">2921</span> } catch(Exception e) {<a name="line.2921"></a>
-<span class="sourceLineNo">2922</span> Throwable error = e;<a name="line.2922"></a>
-<span class="sourceLineNo">2923</span> if (e instanceof InvocationTargetException &&<a name="line.2923"></a>
-<span class="sourceLineNo">2924</span> ((InvocationTargetException)e).getTargetException() != null) {<a name="line.2924"></a>
-<span class="sourceLineNo">2925</span> error = ((InvocationTargetException)e).getTargetException();<a name="line.2925"></a>
-<span class="sourceLineNo">2926</span> }<a name="line.2926"></a>
-<span class="sourceLineNo">2927</span> throw new RuntimeException("Failed construction of Master: " + masterClass.toString() + ". "<a name="line.2927"></a>
-<span class="sourceLineNo">2928</span> , error);<a name="line.2928"></a>
-<span class="sourceLineNo">2929</span> }<a name="line.2929"></a>
-<span class="sourceLineNo">2930</span> }<a name="line.2930"></a>
-<span class="sourceLineNo">2931</span><a name="line.2931"></a>
-<span class="sourceLineNo">2932</span> /**<a name="line.2932"></a>
-<span class="sourceLineNo">2933</span> * @see org.apache.hadoop.hbase.master.HMasterCommandLine<a name="line.2933"></a>
-<span class="sourceLineNo">2934</span> */<a name="line.2934"></a>
-<span class="sourceLineNo">2935</span> public static void main(String [] args) {<a name="line.2935"></a>
-<span class="sourceLineNo">2936</span> LOG.info("STARTING service " + HMaster.class.getSimpleName());<a name="line.2936"></a>
-<span class="sourceLineNo">2937</span> VersionInfo.logVersion();<a name="line.2937"></a>
-<span class="sourceLineNo">2938</span> new HMasterCommandLine(HMaster.class).doMain(args);<a name="line.2938"></a>
-<span class="sourceLineNo">2939</span> }<a name="line.2939"></a>
-<span class="sourceLineNo">2940</span><a name="line.2940"></a>
-<span class="sourceLineNo">2941</span> public HFileCleaner getHFileCleaner() {<a name="line.2941"></a>
-<span class="sourceLineNo">2942</span> return this.hfileCleaner;<a name="line.2942"></a>
-<span class="sourceLineNo">2943</span> }<a name="line.2943"></a>
-<span class="sourceLineNo">2944</span><a name="line.2944"></a>
-<span class="sourceLineNo">2945</span> public LogCleaner getLogCleaner() {<a name="line.2945"></a>
-<span class="sourceLineNo">2946</span> return this.logCleaner;<a name="line.2946"></a>
-<span class="sourceLineNo">2947</span> }<a name="line.2947"></a>
-<span class="sourceLineNo">2948</span><a name="line.2948"></a>
-<span class="sourceLineNo">2949</span> /**<a name="line.2949"></a>
-<span class="sourceLineNo">2950</span> * @return the underlying snapshot manager<a name="line.2950"></a>
-<span class="sourceLineNo">2951</span> */<a name="line.2951"></a>
-<span class="sourceLineNo">2952</span> @Override<a name="line.2952"></a>
-<span class="sourceLineNo">2953</span> public SnapshotManager getSnapshotManager() {<a name="line.2953"></a>
-<span class="sourceLineNo">2954</span> return this.snapshotManager;<a name="line.2954"></a>
-<span class="sourceLineNo">2955</span> }<a name="line.2955"></a>
-<span class="sourceLineNo">2956</span><a name="line.2956"></a>
-<span class="sourceLineNo">2957</span> /**<a name="line.2957"></a>
-<span class="sourceLineNo">2958</span> * @return the underlying MasterProcedureManagerHost<a name="line.2958"></a>
-<span class="sourceLineNo">2959</span> */<a name="line.2959"></a>
-<span class="sourceLineNo">2960</span> @Override<a name="line.2960"></a>
-<span class="sourceLineNo">2961</span> public MasterProcedureManagerHost getMasterProcedureManagerHost() {<a name="line.2961"></a>
-<span class="sourceLineNo">2962</span> return mpmHost;<a name="line.2962"></a>
-<span class="sourceLineNo">2963</span> }<a name="line.2963"></a>
-<span class="sourceLineNo">2964</span><a name="line.2964"></a>
-<span class="sourceLineNo">2965</span> @Override<a name="line.2965"></a>
-<span class="sourceLineNo">2966</span> public ClusterSchema getClusterSchema() {<a name="line.2966"></a>
-<span class="sourceLineNo">2967</span> return this.clusterSchemaService;<a name="line.2967"></a>
-<span class="sourceLineNo">2968</span> }<a name="line.2968"></a>
-<span class="sourceLineNo">2969</span><a name="line.2969"></a>
-<span class="sourceLineNo">2970</span> /**<a name="line.2970"></a>
-<span class="sourceLineNo">2971</span> * Create a new Namespace.<a name="line.2971"></a>
-<span class="sourceLineNo">2972</span> * @param namespaceDescriptor descriptor for new Namespace<a name="line.2972"></a>
-<span class="sourceLineNo">2973</span> * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.2973"></a>
-<span class="sourceLineNo">2974</span> * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.2974"></a>
-<span class="sourceLineNo">2975</span> * <code>nonceGroup</code> (the source must ensure each operation gets a unique id).<a name="line.2975"></a>
-<span class="sourceLineNo">2976</span> * @return procedure id<a name="line.2976"></a>
-<span class="sourceLineNo">2977</span> */<a name="line.2977"></a>
-<span class="sourceLineNo">2978</span> long createNamespace(final NamespaceDescriptor namespaceDescriptor, final long nonceGroup,<a name="line.2978"></a>
-<span class="sourceLineNo">2979</span> final long nonce) throws IOException {<a name="line.2979"></a>
-<span class="sourceLineNo">2980</span> checkInitialized();<a name="line.2980"></a>
-<span class="sourceLineNo">2981</span><a name="line.2981"></a>
-<span class="sourceLineNo">2982</span> TableName.isLegalNamespaceName(Bytes.toBytes(namespaceDescriptor.getName()));<a name="line.2982"></a>
-<span class="sourceLineNo">2983</span><a name="line.2983"></a>
-<span class="sourceLineNo">2984</span> return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.2984"></a>
-<span class="sourceLineNo">2985</span> nonceGroup, nonce) {<a name="line.2985"></a>
-<span class="sourceLineNo">2986</span> @Override<a name="line.2986"></a>
-<span class="sourceLineNo">2987</span> protected void run() throws IOException {<a name="line.2987"></a>
-<span class="sourceLineNo">2988</span> getMaster().getMasterCoprocessorHost().preCreateNamespace(namespaceDescriptor);<a name="line.2988"></a>
-<span class="sourceLineNo">2989</span> // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.2989"></a>
-<span class="sourceLineNo">2990</span> // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.2990"></a>
-<span class="sourceLineNo">2991</span> ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.2991"></a>
-<span class="sourceLineNo">2992</span> LOG.info(getClientIdAuditPrefix() + " creating " + namespaceDescriptor);<a name="line.2992"></a>
-<span class="sourceLineNo">2993</span> // Execute the operation synchronously - wait for the operation to complete before<a name="line.2993"></a>
-<span class="sourceLineNo">2994</span> // continuing.<a name="line.2994"></a>
-<span class="sourceLineNo">2995</span> setProcId(getClusterSchema().createNamespace(namespaceDescriptor, getNonceKey(), latch));<a name="line.2995"></a>
-<span class="sourceLineNo">2996</span> latch.await();<a name="line.2996"></a>
-<span class="sourceLineNo">2997</span> getMaster().getMasterCoprocessorHost().postCreateNamespace(namespaceDescriptor);<a name="line.2997"></a>
-<span class="sourceLineNo">2998</span> }<a name="line.2998"></a>
-<span class="sourceLineNo">2999</span><a name="line.2999"></a>
-<span class="sourceLineNo">3000</span> @Override<a name="line.3000"></a>
-<span class="sourceLineNo">3001</span> protected String getDescription() {<a name="line.3001"></a>
-<span class="sourceLineNo">3002</span> return "CreateNamespaceProcedure";<a name="line.3002"></a>
-<span class="sourceLineNo">3003</span> }<a name="line.3003"></a>
-<span class="sourceLineNo">3004</span> });<a name="line.3004"></a>
-<span class="sourceLineNo">3005</span> }<a name="line.3005"></a>
-<span class="sourceLineNo">3006</span><a name="line.3006"></a>
-<span class="sourceLineNo">3007</span> /**<a name="line.3007"></a>
-<span class="sourceLineNo">3008</span> * Modify an existing Namespace.<a name="line.3008"></a>
-<span class="sourceLineNo">3009</span> * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.3009"></a>
-<span class="sourceLineNo">3010</span> * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.3010"></a>
-<span class="sourceLineNo">3011</span> * <code>nonceGroup</code> (the source must ensure each operation gets a unique id).<a name="line.3011"></a>
-<span class="sourceLineNo">3012</span> * @return procedure id<a name="line.3012"></a>
-<span class="sourceLineNo">3013</span> */<a name="line.3013"></a>
-<span class="sourceLineNo">3014</span> long modifyNamespace(final NamespaceDescriptor newNsDescriptor, final long nonceGroup,<a name="line.3014"></a>
-<span class="sourceLineNo">3015</span> final long nonce) throws IOException {<a name="line.3015"></a>
-<span class="sourceLineNo">3016</span> checkInitialized();<a name="line.3016"></a>
-<span class="sourceLineNo">3017</span><a name="line.3017"></a>
-<span class="sourceLineNo">3018</span> TableName.isLegalNamespaceName(Bytes.toBytes(newNsDescriptor.getName()));<a name="line.3018"></a>
-<span class="sourceLineNo">3019</span><a name="line.3019"></a>
-<span class="sourceLineNo">3020</span> return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.3020"></a>
-<span class="sourceLineNo">3021</span> nonceGroup, nonce) {<a name="line.3021"></a>
-<span class="sourceLineNo">3022</span> @Override<a name="line.3022"></a>
-<span class="sourceLineNo">3023</span> protected void run() throws IOException {<a name="line.3023"></a>
-<span class="sourceLineNo">3024</span> NamespaceDescriptor oldNsDescriptor = getNamespace(newNsDescriptor.getName());<a name="line.3024"></a>
-<span class="sourceLineNo">3025</span> getMaster().getMasterCoprocessorHost().preModifyNamespace(oldNsDescriptor, newNsDescriptor);<a name="line.3025"></a>
-<span class="sourceLineNo">3026</span> // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.3026"></a>
-<span class="sourceLineNo">3027</span> // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.3027"></a>
-<span class="sourceLineNo">3028</span> ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.3028"></a>
-<span class="sourceLineNo">3029</span> LOG.info(getClientIdAuditPrefix() + " modify " + newNsDescriptor);<a name="line.3029"></a>
-<span class="sourceLineNo">3030</span> // Execute the operation synchronously - wait for the operation to complete before<a name="line.3030"></a>
-<span class="sourceLineNo">3031</span> // continuing.<a name="line.3031"></a>
-<span class="sourceLineNo">3032</span> setProcId(getClusterSchema().modifyNamespace(newNsDescriptor, getNonceKey(), latch));<a name="line.3032"></a>
-<span class="sourceLineNo">3033</span> latch.await();<a name="line.3033"></a>
-<span class="sourceLineNo">3034</span> getMaster().getMasterCoprocessorHost().postModifyNamespace(oldNsDescriptor,<a name="line.3034"></a>
-<span class="sourceLineNo">3035</span> newNsDescriptor);<a name="line.3035"></a>
-<span class="sourceLineNo">3036</span> }<a name="line.3036"></a>
-<span class="sourceLineNo">3037</span><a name="line.3037"></a>
-<span class="sourceLineNo">3038</span> @Override<a name="line.3038"></a>
-<span class="sourceLineNo">3039</span> protected String getDescription() {<a name="line.3039"></a>
-<span class="sourceLineNo">3040</span> return "ModifyNamespaceProcedure";<a name="line.3040"></a>
-<span class="sourceLineNo">3041</span> }<a name="line.3041"></a>
-<span class="sourceLineNo">3042</span> });<a name="line.3042"></a>
-<span class="sourceLineNo">3043</span> }<a name="line.3043"></a>
-<span class="sourceLineNo">3044</span><a name="line.3044"></a>
-<span class="sourceLineNo">3045</span> /**<a name="line.3045"></a>
-<span class="sourceLineNo">3046</span> * Delete an existing Namespace. Only empty Namespaces (no tables) can be removed.<a name="line.3046"></a>
-<span class="sourceLineNo">3047</span> * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.3047"></a>
-<span class="sourceLineNo">3048</span> * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.3048"></a>
-<span class="sourceLineNo">3049</span> * <code>nonceGroup</code> (the source must ensure each operation gets a unique id).<a name="line.3049"></a>
-<span class="sourceLineNo">3050</span> * @return procedure id<a name="line.3050"></a>
-<span class="sourceLineNo">3051</span> */<a name="line.3051"></a>
-<span class="sourceLineNo">3052</span> long deleteNamespace(final String name, final long nonceGroup, final long nonce)<a name="line.3052"></a>
-<span class="sourceLineNo">3053</span> throws IOException {<a name="line.3053"></a>
-<span class="sourceLineNo">3054</span> checkInitialized();<a name="line.3054"></a>
-<span class="sourceLineNo">3055</span><a name="line.3055"></a>
-<span class="sourceLineNo">3056</span> return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.3056"></a>
-<span class="sourceLineNo">3057</span> nonceGroup, nonce) {<a name="line.3057"></a>
-<span class="sourceLineNo">3058</span> @Override<a name="line.3058"></a>
-<span class="sourceLineNo">3059</span> protected void run() throws IOException {<a name="line.3059"></a>
-<span class="sourceLineNo">3060</span> getMaster().getMasterCoprocessorHost().preDeleteNamespace(name);<a name="line.3060"></a>
-<span class="sourceLineNo">3061</span> LOG.info(getClientIdAuditPrefix() + " delete " + name);<a name="line.3061"></a>
-<span class="sourceLineNo">3062</span> // Execute the operation synchronously - wait for the operation to complete before<a name="line.3062"></a>
-<span class="sourceLineNo">3063</span> // continuing.<a name="line.3063"></a>
-<span class="sourceLineNo">3064</span> //<a name="line.3064"></a>
-<span class="sourceLineNo">3065</span> // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.3065"></a>
-<span class="sourceLineNo">3066</span> // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.3066"></a>
-<span class="sourceLineNo">3067</span> ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.3067"></a>
-<span class="sourceLineNo">3068</span> setProcId(submitProcedure(<a name="line.3068"></a>
-<span class="sourceLineNo">3069</span> new DeleteNamespaceProcedure(procedureExecutor.getEnvironment(), name, latch)));<a name="line.3069"></a>
-<span class="sourceLineNo">3070</span> latch.await();<a name="line.3070"></a>
-<span class="sourceLineNo">3071</span> // Will not be invoked in the face of Exception thrown by the Procedure's execution<a name="line.3071"></a>
-<span class="sourceLineNo">3072</span> getMaster().getMasterCoprocessorHost().postDeleteNamespace(name);<a name="line.3072"></a>
-<span class="sourceLineNo">3073</span> }<a name="line.3073"></a>
-<span class="sourceLineNo">3074</span><a name="line.3074"></a>
-<span class="sourceLineNo">3075</span> @Override<a name="line.3075"></a>
-<span class="sourceLineNo">3076</span> protected String getDescription() {<a name="line.3076"></a>
-<span class="sourceLineNo">3077</span> return "DeleteNamespaceProcedure";<a name="line.3077"></a>
-<span class="sourceLineNo">3078</span> }<a name="line.3078"></a>
-<span class="sourceLineNo">3079</span> });<a name="line.3079"></a>
-<span class="sourceLineNo">3080</span> }<a name="line.3080"></a>
-<span class="sourceLineNo">3081</span><a name="line.3081"></a>
-<span class="sourceLineNo">3082</span> /**<a name="line.3082"></a>
-<span class="sourceLineNo">3083</span> * Get a Namespace<a name="line.3083"></a>
-<span class="sourceLineNo">3084</span> * @param name Name of the Namespace<a name="line.3084"></a>
-<span class="sourceLineNo">3085</span> * @return Namespace descriptor for <code>name</code><a name="line.3085"></a>
-<span class="sourceLineNo">3086</span> */<a name="line.3086"></a>
-<span class="sourceLineNo">3087</span> NamespaceDescriptor getNamespace(String name) throws IOException {<a name="line.3087"></a>
-<span class="sourceLineNo">3088</span> checkInitialized();<a name="line.3088"></a>
-<span class="sourceLineNo">3089</span> if (this.cpHost != null) this.cpHost.preGetNamespaceDescriptor(name);<a name="line.3089"></a>
-<span class="sourceLineNo">3090</span> NamespaceDescriptor nsd = this.clusterSchemaService.getNamespace(name);<a name="line.3090"></a>
-<span class="sourceLineNo">3091</span> if (this.cpHost != null) this.cpHost.postGetNamespaceDescriptor(nsd);<a name="line.3091"></a>
-<span class="sourceLineNo">3092</span> return nsd;<a name="line.3092"></a>
-<span class="sourceLineNo">3093</span> }<a name="line.3093"></a>
-<span class="sourceLineNo">3094</span><a name="line.3094"></a>
-<span class="sourceLineNo">3095</span> /**<a name="line.3095"></a>
-<span class="sourceLineNo">3096</span> * Get all Namespaces<a name="line.3096"></a>
-<span class="sourceLineNo">3097</span> * @return All Namespace descriptors<a name="line.3097"></a>
-<span class="sourceLineNo">3098</span> */<a name="line.3098"></a>
-<span class="sourceLineNo">3099</span> List<NamespaceDescriptor> getNamespaces() throws IOException {<a name="line.3099"></a>
-<span class="sourceLineNo">3100</span> checkInitialized();<a name="line.3100"></a>
-<span class="sourceLineNo">3101</span> final List<NamespaceDescriptor> nsds = new ArrayList<>();<a name="line.3101"></a>
-<span class="sourceLineNo">3102</span> if (cpHost != null) {<a name="line.3102"></a>
-<span class="sourceLineNo">3103</span> cpHost.preListNamespaceDescriptors(nsds);<a name="line.3103"></a>
-<span class="sourceLineNo">3104</span> }<a name="line.3104"></a>
-<span class="sourceLineNo">3105</span> nsds.addAll(this.clusterSchemaService.getNamespaces());<a name="line.3105"></a>
-<span class="sourceLineNo">3106</span> if (this.cpHost != null) {<a name="line.3106"></a>
-<span class="sourceLineNo">3107</span> this.cpHost.postListNamespaceDescriptors(nsds);<a name="line.3107"></a>
-<span class="sourceLineNo">3108</span> }<a name="line.3108"></a>
-<span class="sourceLineNo">3109</span> return nsds;<a name="line.3109"></a>
-<span class="sourceLineNo">3110</span> }<a name="line.3110"></a>
-<span class="sourceLineNo">3111</span><a name="line.3111"></a>
-<span class="sourceLineNo">3112</span> @Override<a name="line.3112"></a>
-<span class="sourceLineNo">3113</span> public List<TableName> listTableNamesByNamespace(String name) throws IOException {<a name="line.3113"></a>
-<span class="sourceLineNo">3114</span> checkInitialized();<a name="line.3114"></a>
-<span class="sourceLineNo">3115</span> return listTableNames(name, null, true);<a name="line.3115"></a>
-<span class="sourceLineNo">3116</span> }<a name="line.3116"></a>
-<span class="sourceLineNo">3117</span><a name="line.3117"></a>
-<span class="sourceLineNo">3118</span> @Override<a name="line.3118"></a>
-<span class="sourceLineNo">3119</span> public List<TableDescriptor> listTableDescriptorsByNamespace(String name) throws IOException {<a name="line.3119"></a>
-<span class="sourceLineNo">3120</span> checkInitialized();<a name="line.3120"></a>
-<span class="sourceLineNo">3121</span> return listTableDescriptors(name, null, null, true);<a name="line.3121"></a>
-<span class="sourceLineNo">3122</span> }<a name="line.3122"></a>
-<span class="sourceLineNo">3123</span><a name="line.3123"></a>
-<span class="sourceLineNo">3124</span> @Override<a name="line.3124"></a>
-<span class="sourceLineNo">3125</span> public boolean abortProcedure(final long procId, final boolean mayInterruptIfRunning)<a name="line.3125"></a>
-<span class="sourceLineNo">3126</span> throws IOException {<a name="line.3126"></a>
-<span class="sourceLineNo">3127</span> if (cpHost != null) {<a name="line.3127"></a>
-<span class="sourceLineNo">3128</span> cpHost.preAbortProcedure(this.procedureExecutor, procId);<a name="line.3128"></a>
-<span class="sourceLineNo">3129</span> }<a name="line.3129"></a>
-<span class="sourceLineNo">3130</span><a name="line.3130"></a>
-<span class="sourceLineNo">3131</span> final boolean result = this.procedureExecutor.abort(procId, mayInterruptIfRunning);<a name="line.3131"></a>
-<span class="sourceLineNo">3132</span><a name="line.3132"></a>
-<span class="sourceLineNo">3133</span> if (cpHost != null) {<a name="line.3133"></a>
-<span class="sourceLineNo">3134</span> cpHost.postAbortProcedure();<a name="line.3134"></a>
-<span class="sourceLineNo">3135</span> }<a name="line.3135"></a>
-<span class="sourceLineNo">3136</span><a name="line.3136"></a>
-<span class="sourceLineNo">3137</span> return result;<a name="line.3137"></a>
-<span class="sourceLineNo">3138</span> }<a name="line.3138"></a>
+<span class="sourceLineNo">2825</span> public boolean isInMaintenanceMode() throws IOException {<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span> if (!isInitialized()) {<a name="line.2826"></a>
+<span class="sourceLineNo">2827</span> throw new PleaseHoldException("Master is initializing");<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span> }<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span> return maintenanceModeTracker.isInMaintenanceMode();<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span> }<a name="line.2830"></a>
+<span class="sourceLineNo">2831</span><a name="line.2831"></a>
+<span class="sourceLineNo">2832</span> @VisibleForTesting<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span> public void setInitialized(boolean isInitialized) {<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span> procedureExecutor.getEnvironment().setEventReady(initialized, isInitialized);<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span> }<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span><a name="line.2836"></a>
+<span class="sourceLineNo">2837</span> @Override<a name="line.2837"></a>
+<span class="sourceLineNo">2838</span> public ProcedureEvent<?> getInitializedEvent() {<a name="line.2838"></a>
+<span class="sourceLineNo">2839</span> return initialized;<a name="line.2839"></a>
+<span class="sourceLineNo">2840</span> }<a name="line.2840"></a>
+<span class="sourceLineNo">2841</span><a name="line.2841"></a>
+<span class="sourceLineNo">2842</span> /**<a name="line.2842"></a>
+<span class="sourceLineNo">2843</span> * ServerCrashProcessingEnabled is set false before completing assignMeta to prevent processing<a name="line.2843"></a>
+<span class="sourceLineNo">2844</span> * of crashed servers.<a name="line.2844"></a>
+<span class="sourceLineNo">2845</span> * @return true if assignMeta has completed;<a name="line.2845"></a>
+<span class="sourceLineNo">2846</span> */<a name="line.2846"></a>
+<span class="sourceLineNo">2847</span> @Override<a name="line.2847"></a>
+<span class="sourceLineNo">2848</span> public boolean isServerCrashProcessingEnabled() {<a name="line.2848"></a>
+<span class="sourceLineNo">2849</span> return serverCrashProcessingEnabled.isReady();<a name="line.2849"></a>
+<span class="sourceLineNo">2850</span> }<a name="line.2850"></a>
+<span class="sourceLineNo">2851</span><a name="line.2851"></a>
+<span class="sourceLineNo">2852</span> @VisibleForTesting<a name="line.2852"></a>
+<span class="sourceLineNo">2853</span> public void setServerCrashProcessingEnabled(final boolean b) {<a name="line.2853"></a>
+<span class="sourceLineNo">2854</span> procedureExecutor.getEnvironment().setEventReady(serverCrashProcessingEnabled, b);<a name="line.2854"></a>
+<span class="sourceLineNo">2855</span> }<a name="line.2855"></a>
+<span class="sourceLineNo">2856</span><a name="line.2856"></a>
+<span class="sourceLineNo">2857</span> public ProcedureEvent<?> getServerCrashProcessingEnabledEvent() {<a name="line.2857"></a>
+<span class="sourceLineNo">2858</span> return serverCrashProcessingEnabled;<a name="line.2858"></a>
+<span class="sourceLineNo">2859</span> }<a name="line.2859"></a>
+<span class="sourceLineNo">2860</span><a name="line.2860"></a>
+<span class="sourceLineNo">2861</span> /**<a name="line.2861"></a>
+<span class="sourceLineNo">2862</span> * Compute the average load across all region servers.<a name="line.2862"></a>
+<span class="sourceLineNo">2863</span> * Currently, this uses a very naive computation - just uses the number of<a name="line.2863"></a>
+<span class="sourceLineNo">2864</span> * regions being served, ignoring stats about number of requests.<a name="line.2864"></a>
+<span class="sourceLineNo">2865</span> * @return the average load<a name="line.2865"></a>
+<span class="sourceLineNo">2866</span> */<a name="line.2866"></a>
+<span class="sourceLineNo">2867</span> public double getAverageLoad() {<a name="line.2867"></a>
+<span class="sourceLineNo">2868</span> if (this.assignmentManager == null) {<a name="line.2868"></a>
+<span class="sourceLineNo">2869</span> return 0;<a name="line.2869"></a>
+<span class="sourceLineNo">2870</span> }<a name="line.2870"></a>
+<span class="sourceLineNo">2871</span><a name="line.2871"></a>
+<span class="sourceLineNo">2872</span> RegionStates regionStates = this.assignmentManager.getRegionStates();<a name="line.2872"></a>
+<span class="sourceLineNo">2873</span> if (regionStates == null) {<a name="line.2873"></a>
+<span class="sourceLineNo">2874</span> return 0;<a name="line.2874"></a>
+<span class="sourceLineNo">2875</span> }<a name="line.2875"></a>
+<span class="sourceLineNo">2876</span> return regionStates.getAverageLoad();<a name="line.2876"></a>
+<span class="sourceLineNo">2877</span> }<a name="line.2877"></a>
+<span class="sourceLineNo">2878</span><a name="line.2878"></a>
+<span class="sourceLineNo">2879</span> /*<a name="line.2879"></a>
+<span class="sourceLineNo">2880</span> * @return the count of region split plans executed<a name="line.2880"></a>
+<span class="sourceLineNo">2881</span> */<a name="line.2881"></a>
+<span class="sourceLineNo">2882</span> public long getSplitPlanCount() {<a name="line.2882"></a>
+<span class="sourceLineNo">2883</span> return splitPlanCount;<a name="line.2883"></a>
+<span class="sourceLineNo">2884</span> }<a name="line.2884"></a>
+<span class="sourceLineNo">2885</span><a name="line.2885"></a>
+<span class="sourceLineNo">2886</span> /*<a name="line.2886"></a>
+<span class="sourceLineNo">2887</span> * @return the count of region merge plans executed<a name="line.2887"></a>
+<span class="sourceLineNo">2888</span> */<a name="line.2888"></a>
+<span class="sourceLineNo">2889</span> public long getMergePlanCount() {<a name="line.2889"></a>
+<span class="sourceLineNo">2890</span> return mergePlanCount;<a name="line.2890"></a>
+<span class="sourceLineNo">2891</span> }<a name="line.2891"></a>
+<span class="sourceLineNo">2892</span><a name="line.2892"></a>
+<span class="sourceLineNo">2893</span> @Override<a name="line.2893"></a>
+<span class="sourceLineNo">2894</span> public boolean registerService(Service instance) {<a name="line.2894"></a>
+<span class="sourceLineNo">2895</span> /*<a name="line.2895"></a>
+<span class="sourceLineNo">2896</span> * No stacking of instances is allowed for a single service name<a name="line.2896"></a>
+<span class="sourceLineNo">2897</span> */<a name="line.2897"></a>
+<span class="sourceLineNo">2898</span> Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.2898"></a>
+<span class="sourceLineNo">2899</span> String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.2899"></a>
+<span class="sourceLineNo">2900</span> if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.2900"></a>
+<span class="sourceLineNo">2901</span> LOG.error("Coprocessor service "+serviceName+<a name="line.2901"></a>
+<span class="sourceLineNo">2902</span> " already registered, rejecting request from "+instance<a name="line.2902"></a>
+<span class="sourceLineNo">2903</span> );<a name="line.2903"></a>
+<span class="sourceLineNo">2904</span> return false;<a name="line.2904"></a>
+<span class="sourceLineNo">2905</span> }<a name="line.2905"></a>
+<span class="sourceLineNo">2906</span><a name="line.2906"></a>
+<span class="sourceLineNo">2907</span> coprocessorServiceHandlers.put(serviceName, instance);<a name="line.2907"></a>
+<span class="sourceLineNo">2908</span> if (LOG.isDebugEnabled()) {<a name="line.2908"></a>
+<span class="sourceLineNo">2909</span> LOG.debug("Registered master coprocessor service: service="+serviceName);<a name="line.2909"></a>
+<span class="sourceLineNo">2910</span> }<a name="line.2910"></a>
+<span class="sourceLineNo">2911</span> return true;<a name="line.2911"></a>
+<span class="sourceLineNo">2912</span> }<a name="line.2912"></a>
+<span class="sourceLineNo">2913</span><a name="line.2913"></a>
+<span class="sourceLineNo">2914</span> /**<a name="line.2914"></a>
+<span class="sourceLineNo">2915</span> * Utility for constructing an instance of the passed HMaster class.<a name="line.2915"></a>
+<span class="sourceLineNo">2916</span> * @param masterClass<a name="line.2916"></a>
+<span class="sourceLineNo">2917</span> * @return HMaster instance.<a name="line.2917"></a>
+<span class="sourceLineNo">2918</span> */<a name="line.2918"></a>
+<span class="sourceLineNo">2919</span> public static HMaster constructMaster(Class<? extends HMaster> masterClass,<a name="line.2919"></a>
+<span class="sourceLineNo">2920</span> final Configuration conf) {<a name="line.2920"></a>
+<span class="sourceLineNo">2921</span> try {<a name="line.2921"></a>
+<span class="sourceLineNo">2922</span> Constructor<? extends HMaster> c = masterClass.getConstructor(Configuration.class);<a name="line.2922"></a>
+<span class="sourceLineNo">2923</span> return c.newInstance(conf);<a name="line.2923"></a>
+<span class="sourceLineNo">2924</span> } catch(Exception e) {<a name="line.2924"></a>
+<span class="sourceLineNo">2925</span> Throwable error = e;<a name="line.2925"></a>
+<span class="sourceLineNo">2926</span> if (e instanceof InvocationTargetException &&<a name="line.2926"></a>
+<span class="sourceLineNo">2927</span> ((InvocationTargetException)e).getTargetException() != null) {<a name="line.2927"></a>
+<span class="sourceLineNo">2928</span> error = ((InvocationTargetException)e).getTargetException();<a name="line.2928"></a>
+<span class="sourceLineNo">2929</span> }<a name="line.2929"></a>
+<span class="sourceLineNo">2930</span> throw new RuntimeException("Failed construction of Master: " + masterClass.toString() + ". "<a name="line.2930"></a>
+<span class="sourceLineNo">2931</span> , error);<a name="line.2931"></a>
+<span class="sourceLineNo">2932</span> }<a name="line.2932"></a>
+<span class="sourceLineNo">2933</span> }<a name="line.2933"></a>
+<span class="sourceLineNo">2934</span><a name="line.2934"></a>
+<span class="sourceLineNo">2935</span> /**<a name="line.2935"></a>
+<span class="sourceLineNo">2936</span> * @see org.apache.hadoop.hbase.master.HMasterCommandLine<a name="line.2936"></a>
+<span class="sourceLineNo">2937</span> */<a name="line.2937"></a>
+<span class="sourceLineNo">2938</span> public static void main(String [] args) {<a name="line.2938"></a>
+<span class="sourceLineNo">2939</span> LOG.info("STARTING service " + HMaster.class.getSimpleName());<a name="line.2939"></a>
+<span class="sourceLineNo">2940</span> VersionInfo.logVersion();<a name="line.2940"></a>
+<span class="sourceLineNo">2941</span> new HMasterCommandLine(HMaster.class).doMain(args);<a name="line.2941"></a>
+<span class="sourceLineNo">2942</span> }<a name="line.2942"></a>
+<span class="sourceLineNo">2943</span><a name="line.2943"></a>
+<span class="sourceLineNo">2944</span> public HFileCleaner getHFileCleaner() {<a name="line.2944"></a>
+<span class="sourceLineNo">2945</span> return this.hfileCleaner;<a name="line.2945"></a>
+<span class="sourceLineNo">2946</span> }<a name="line.2946"></a>
+<span class="sourceLineNo">2947</span><a name="line.2947"></a>
+<span class="sourceLineNo">2948</span> public LogCleaner getLogCleaner() {<a name="line.2948"></a>
+<span class="sourceLineNo">2949</span> return this.logCleaner;<a name="line.2949"></a>
+<span class="sourceLineNo">2950</span> }<a name="line.2950"></a>
+<span class="sourceLineNo">2951</span><a name="line.2951"></a>
+<span class="sourceLineNo">2952</span> /**<a name="line.2952"></a>
+<span class="sourceLineNo">2953</span> * @return the underlying snapshot manager<a name="line.2953"></a>
+<span class="sourceLineNo">2954</span> */<a name="line.2954"></a>
+<span class="sourceLineNo">2955</span> @Override<a name="line.2955"></a>
+<span class="sourceLineNo">2956</span> public SnapshotManager getSnapshotManager() {<a name="line.2956"></a>
+<span class="sourceLineNo">2957</span> return this.snapshotManager;<a name="line.2957"></a>
+<span class="sourceLineNo">2958</span> }<a name="line.2958"></a>
+<span class="sourceLineNo">2959</span><a name="line.2959"></a>
+<span class="sourceLineNo">2960</span> /**<a name="line.2960"></a>
+<span class="sourceLineNo">2961</span> * @return the underlying MasterProcedureManagerHost<a name="line.2961"></a>
+<span class="sourceLineNo">2962</span> */<a name="line.2962"></a>
+<span class="sourceLineNo">2963</span> @Override<a name="line.2963"></a>
+<span class="sourceLineNo">2964</span> public MasterProcedureManagerHost getMasterProcedureManagerHost() {<a name="line.2964"></a>
+<span class="sourceLineNo">2965</span> return mpmHost;<a name="line.2965"></a>
+<span class="sourceLineNo">2966</span> }<a name="line.2966"></a>
+<span class="sourceLineNo">2967</span><a name="line.2967"></a>
+<span class="sourceLineNo">2968</span> @Override<a name="line.2968"></a>
+<span class="sourceLineNo">2969</span> public ClusterSchema getClusterSchema() {<a name="line.2969"></a>
+<span class="sourceLineNo">2970</span> return this.clusterSchemaService;<a name="line.2970"></a>
+<span class="sourceLineNo">2971</span> }<a name="line.2971"></a>
+<span class="sourceLineNo">2972</span><a name="line.2972"></a>
+<span class="sourceLineNo">2973</span> /**<a name="line.2973"></a>
+<span class="sourceLineNo">2974</span> * Create a new Namespace.<a name="line.2974"></a>
+<span class="sourceLineNo">2975</span> * @param namespaceDescriptor descriptor for new Namespace<a name="line.2975"></a>
+<span class="sourceLineNo">2976</span> * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.2976"></a>
+<span class="sourceLineNo">2977</span> * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.2977"></a>
+<span class="sourceLineNo">2978</span> * <code>nonceGroup</code> (the source must ensure each operation gets a unique id).<a name="line.2978"></a>
+<span class="sourceLineNo">2979</span> * @return procedure id<a name="line.2979"></a>
+<span class="sourceLineNo">2980</span> */<a name="line.2980"></a>
+<span class="sourceLineNo">2981</span> long createNamespace(final NamespaceDescriptor namespaceDescriptor, final long nonceGroup,<a name="line.2981"></a>
+<span class="sourceLineNo">2982</span> final long nonce) throws IOException {<a name="line.2982"></a>
+<span class="sourceLineNo">2983</span> checkInitialized();<a name="line.2983"></a>
+<span class="sourceLineNo">2984</span><a name="line.2984"></a>
+<span class="sourceLineNo">2985</span> TableName.isLegalNamespaceName(Bytes.toBytes(namespaceDescriptor.getName()));<a name="line.2985"></a>
+<span class="sourceLineNo">2986</span><a name="line.2986"></a>
+<span class="sourceLineNo">2987</span> return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.2987"></a>
+<span class="sourceLineNo">2988</span> nonceGroup, nonce) {<a name="line.2988"></a>
+<span class="sourceLineNo">2989</span> @Override<a name="line.2989"></a>
+<span class="sourceLineNo">2990</span> protected void run() throws IOException {<a name="line.2990"></a>
+<span class="sourceLineNo">2991</span> getMaster().getMasterCoprocessorHost().preCreateNamespace(namespaceDescriptor);<a name="line.2991"></a>
+<span class="sourceLineNo">2992</span> // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.2992"></a>
+<span class="sourceLineNo">2993</span> // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.2993"></a>
+<span class="sourceLineNo">2994</span> ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.2994"></a>
+<span class="sourceLineNo">2995</span> LOG.info(getClientIdAuditPrefix() + " creating " + namespaceDescriptor);<a name="line.2995"></a>
+<span class="sourceLineNo">2996</span> // Execute the operation synchronously - wait for the operation to complete before<a name="line.2996"></a>
+<span class="sourceLineNo">2997</span> // continuing.<a name="line.2997"></a>
+<span class="sourceLineNo">2998</span> setProcId(getClusterSchema().createNamespace(namespaceDescriptor, getNonceKey(), latch));<a name="line.2998"></a>
+<span class="sourceLineNo">2999</span> latch.await();<a name="line.2999"></a>
+<span class="sourceLineNo">3000</span> getMaster().getMasterCoprocessorHost().postCreateNamespace(namespaceDescriptor);<a name="line.3000"></a>
+<span class="sourceLineNo">3001</span> }<a name="line.3001"></a>
+<span class="sourceLineNo">3002</span><a name="line.3002"></a>
+<span class="sourceLineNo">3003</span> @Override<a name="line.3003"></a>
+<span class="sourceLineNo">3004</span> protected String getDescription() {<a name="line.3004"></a>
+<span class="sourceLineNo">3005</span> return "CreateNamespaceProcedure";<a name="line.3005"></a>
+<span class="sourceLineNo">3006</span> }<a name="line.3006"></a>
+<span class="sourceLineNo">3007</span> });<a name="line.3007"></a>
+<span class="sourceLineNo">3008</span> }<a name="line.3008"></a>
+<span class="sourceLineNo">3009</span><a name="line.3009"></a>
+<span class="sourceLineNo">3010</span> /**<a name="line.3010"></a>
+<span class="sourceLineNo">3011</span> * Modify an existing Namespace.<a name="line.3011"></a>
+<span class="sourceLineNo">3012</span> * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.3012"></a>
+<span class="sourceLineNo">3013</span> * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.3013"></a>
+<span class="sourceLineNo">3014</span> * <code>nonceGroup</code> (the source must ensure each operation gets a unique id).<a name="line.3014"></a>
+<span class="sourceLineNo">3015</span> * @return procedure id<a name="line.3015"></a>
+<span class="sourceLineNo">3016</span> */<a name="line.3016"></a>
+<span class="sourceLineNo">3017</span> long modifyNamespace(final NamespaceDescriptor newNsDescriptor, final long nonceGroup,<a name="line.3017"></a>
+<span class="sourceLineNo">3018</span> final long nonce) throws IOException {<a name="line.3018"></a>
+<span class="sourceLineNo">3019</span> checkInitialized();<a name="line.3019"></a>
+<span class="sourceLineNo">3020</span><a name="line.3020"></a>
+<span class="sourceLineNo">3021</span> TableName.isLegalNamespaceName(Bytes.toBytes(newNsDescriptor.getName()));<a name="line.3021"></a>
+<span class="sourceLineNo">3022</span><a name="line.3022"></a>
+<span class="sourceLineNo">3023</span> return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.3023"></a>
+<span class="sourceLineNo">3024</span> nonceGroup, nonce) {<a name="line.3024"></a>
+<span class="sourceLineNo">3025</span> @Override<a name="line.3025"></a>
+<span class="sourceLineNo">3026</span> protected void run() throws IOException {<a name="line.3026"></a>
+<span class="sourceLineNo">3027</span> NamespaceDescriptor oldNsDescriptor = getNamespace(newNsDescriptor.getName());<a name="line.3027"></a>
+<span class="sourceLineNo">3028</span> getMaster().getMasterCoprocessorHost().preModifyNamespace(oldNsDescriptor, newNsDescriptor);<a name="line.3028"></a>
+<span class="sourceLineNo">3029</span> // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.3029"></a>
+<span class="sourceLineNo">3030</span> // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.3030"></a>
+<span class="sourceLineNo">3031</span> ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.3031"></a>
+<span class="sourceLineNo">3032</span> LOG.info(getClientIdAuditPrefix() + " modify " + newNsDescriptor);<a name="line.3032"></a>
+<span class="sourceLineNo">3033</span> // Execute the operation synchronously - wait for the operation to complete before<a name="line.3033"></a>
+<span class="sourceLineNo">3034</span> // continuing.<a name="line.3034"></a>
+<span class="sourceLineNo">3035</span> setProcId(getClusterSchema().modifyNamespace(newNsDescriptor, getNonceKey(), latch));<a name="line.3035"></a>
+<span class="sourceLineNo">3036</span> latch.await();<a name="line.3036"></a>
+<span class="sourceLineNo">3037</span> getMaster().getMasterCoprocessorHost().postModifyNamespace(oldNsDescriptor,<a name="line.3037"></a>
+<span class="sourceLineNo">3038</span> newNsDescriptor);<a name="line.3038"></a>
+<span class="sourceLineNo">3039</span> }<a name="line.3039"></a>
+<span class="sourceLineNo">3040</span><a name="line.3040"></a>
+<span class="sourceLineNo">3041</span> @Override<a name="line.3041"></a>
+<span class="sourceLineNo">3042</span> protected String getDescription() {<a name="line.3042"></a>
+<span class="sourceLineNo">3043</span> return "ModifyNamespaceProcedure";<a name="line.3043"></a>
+<span class="sourceLineNo">3044</span> }<a name="line.3044"></a>
+<span class="sourceLineNo">3045</span> });<a name="line.3045"></a>
+<span class="sourceLineNo">3046</span> }<a name="line.3046"></a>
+<span class="sourceLineNo">3047</span><a name="line.3047"></a>
+<span class="sourceLineNo">3048</span> /**<a name="line.3048"></a>
+<span class="sourceLineNo">3049</span> * Delete an existing Namespace. Only empty Namespaces (no tables) can be removed.<a name="line.3049"></a>
+<span class="sourceLineNo">3050</span> * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.3050"></a>
+<span class="sourceLineNo">3051</span> * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.3051"></a>
+<span class="sourceLineNo">3052</span> * <code>nonceGroup</code> (the source must ensure each operation gets a unique id).<a name="line.3052"></a>
+<span class="sourceLineNo">3053</span> * @return procedure id<a name="line.3053"></a>
+<span class="sourceLineNo">3054</span> */<a name="line.3054"></a>
+<span class="sourceLineNo">3055</span> long deleteNamespace(final String name, final long nonceGroup, final long nonce)<a name="line.3055"></a>
+<span class="sourceLineNo">3056</span> throws IOException {<a name="line.3056"></a>
+<span class="sourceLineNo">3057</span> checkInitialized();<a name="line.3057"></a>
+<span class="sourceLineNo">3058</span><a name="line.3058"></a>
+<span class="sourceLineNo">3059</span> return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.3059"></a>
+<span class="sourceLineNo">3060</span> nonceGroup, nonce) {<a name="line.3060"></a>
+<span class="sourceLineNo">3061</span> @Override<a name="line.3061"></a>
+<span class="sourceLineNo">3062</span> protected void run() throws IOException {<a name="line.3062"></a>
+<span class="sourceLineNo">3063</span> getMaster().getMasterCoprocessorHost().preDeleteNamespace(name);<a name="line.3063"></a>
+<span class="sourceLineNo">3064</span> LOG.info(getClientIdAuditPrefix() + " delete " + name);<a name="line.3064"></a>
+<span class="sourceLineNo">3065</span> // Execute the operation synchronously - wait for the operation to complete before<a name="line.3065"></a>
+<span class="sourceLineNo">3066</span> // continuing.<a name="line.3066"></a>
+<span class="sourceLineNo">3067</span> //<a name="line.3067"></a>
+<span class="sourceLineNo">3068</span> // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.3068"></a>
+<span class="sourceLineNo">3069</span> // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.3069"></a>
+<span class="sourceLineNo">3070</span> ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.3070"></a>
+<span class="sourceLineNo">3071</span> setProcId(submitProcedure(<a name="line.3071"></a>
+<span class="sourceLineNo">3072</span> new DeleteNamespaceProcedure(procedureExecutor.getEnvironment(), name, latch)));<a name="line.3072"></a>
+<span class="sourceLineNo">3073</span> latch.await();<a name="line.3073"></a>
+<span class="sourceLineNo">3074</span> // Will not be invoked in the face of Exception thrown by the Procedure's execution<a name="line.3074"></a>
+<span class="sourceLineNo">3075</span> getMaster().getMasterCoprocessorHost().postDeleteNamespace(name);<a name="line.3075"></a>
+<span class="sourceLineNo">3076</span> }<a name="line.3076"></a>
+<span class="sourceLineNo">3077</span><a name="line.3077"></a>
+<span class="sourceLineNo">3078</span> @Override<a name="line.3078"></a>
+<span class="sourceLineNo">3079</span> protected String getDescription() {<a name="line.3079"></a>
+<span class="sourceLineNo">3080</span> return "DeleteNamespaceProcedure";<a name="line.3080"></a>
+<span class="sourceLineNo">3081</span> }<a name="line.3081"></a>
+<span class="sourceLineNo">3082</span> });<a name="line.3082"></a>
+<span class="sourceLineNo">3083</span> }<a name="line.3083"></a>
+<span class="sourceLineNo">3084</span><a name="line.3084"></a>
+<span class="sourceLineNo">3085</span> /**<a name="line.3085"></a>
+<span class="sourceLineNo">3086</span> * Get a Namespace<a name="line.3086"></a>
+<span class="sourceLineNo">3087</span> * @param name Name of the Namespace<a name="line.3087"></a>
+<span class="sourceLineNo">3088</span> * @return Namespace descriptor for <code>name</code><a name="line.3088"></a>
+<span class="sourceLineNo">3089</span> */<a name="line.3089"></a>
+<span class="sourceLineNo">3090</span> NamespaceDescriptor getNamespace(String name) throws IOException {<a name="line.3090"></a>
+<span class="sourceLineNo">3091</span> checkInitialized();<a name="line.3091"></a>
+<span class="sourceLineNo">3092</span> if (this.cpHost != null) this.cpHost.preGetNamespaceDescriptor(name);<a name="line.3092"></a>
+<span class="sourceLineNo">3093</span> NamespaceDescriptor nsd = this.clusterSchemaService.getNamespace(name);<a name="line.3093"></a>
+<span class="sourceLineNo">3094</span> if (this.cpHost != null) this.cpHost.postGetNamespaceDescriptor(nsd);<a name="line.3094"></a>
+<span class="sourceLineNo">3095</span> return nsd;<a name="line.3095"></a>
+<span class="sourceLineNo">3096</span> }<a name="line.3096"></a>
+<span class="sourceLineNo">3097</span><a name="line.3097"></a>
+<span class="sourceLineNo">3098</span> /**<a name="line.3098"></a>
+<span class="sourceLineNo">3099</span> * Get all Namespaces<a name="line.3099"></a>
+<span class="sourceLineNo">3100</span> * @return All Namespace descriptors<a name="line.3100"></a>
+<span class="sourceLineNo">3101</span> */<a name="line.3101"></a>
+<span class="sourceLineNo">3102</span> List<NamespaceDescriptor> getNamespaces() throws IOException {<a name="line.3102"></a>
+<span class="sourceLineNo">3103</span> checkInitialized();<a name="line.3103"></a>
+<span class="sourceLineNo">3104</span> final List<NamespaceDescriptor> nsds = new ArrayList<>();<a name="line.3104"></a>
+<span class="sourceLineNo">3105</span> if (cpHost != null) {<a name="line.3105"></a>
+<span class="sourceLineNo">3106</span> cpHost.preListNamespaceDescriptors(nsds);<a name="line.3106"></a>
+<span class="sourceLineNo">3107</span> }<a name="line.3107"></a>
+<span class="sourceLineNo">3108</span> nsds.addAll(this.clusterSchemaService.getNamespaces());<a name="line.3108"></a>
+<span class="sourceLineNo">3109</span> if (this.cpHost != null) {<a name="line.3109"></a>
+<span class="sourceLineNo">3110</span> this.cpHost.postListNamespaceDescriptors(nsds);<a name="line.3110"></a>
+<span class="sourceLineNo">3111</span> }<a name="line.3111"></a>
+<span class="sourceLineNo">3112</span> return nsds;<a name="line.3112"></a>
+<span class="sourceLineNo">3113</span> }<a name="line.3113"></a>
+<span class="sourceLineNo">3114</span><a name="line.3114"></a>
+<span class="sourceLineNo">3115</span> @Override<a name="line.3115"></a>
+<span class="sourceLineNo">3116</span> public List<TableName> listTableNamesByNamespace(String name) throws IOException {<a name="line.3116"></a>
+<span class="sourceLineNo">3117</span> checkInitialized();<a name="line.3117"></a>
+<span class="sourceLineNo">3118</span> return listTableNames(name, null, true);<a name="line.3118"></a>
+<span class="sourceLineNo">3119</span> }<a name="line.3119"></a>
+<span class="sourceLineNo">3120</span><a name="line.3120"></a>
+<span class="sourceLineNo">3121</span> @Override<a name="line.3121"></a>
+<span class="sourceLineNo">3122</span> public List<TableDescriptor> listTableDescriptorsByNamespace(String name) throws IOException {<a name="line.3122"></a>
+<span class="sourceLineNo">3123</span> checkInitialized();<a name="line.3123"></a>
+<span class="sourceLineNo">3124</span> return listTableDescriptors(name, null, null, true);<a name="line.3124"></a>
+<span class="sourceLineNo">3125</span> }<a name="line.3125"></a>
+<span class="sourceLineNo">3126</span><a name="line.3126"></a>
+<span class="sourceLineNo">3127</span> @Override<a name="line.3127"></a>
+<span class="sourceLineNo">3128</span> public boolean abortProcedure(final long procId, final boolean mayInterruptIfRunning)<a name="line.3128"></a>
+<span class="sourceLineNo">3129</span> throws IOException {<a name="line.3129"></a>
+<span class="sourceLineNo">3130</span> if (cpHost != null) {<a name="line.3130"></a>
+<span class="sourceLineNo">3131</span> cpHost.preAbortProcedure(this.procedureExecutor, procId);<a name="line.3131"></a>
+<span class="sourceLineNo">3132</span> }<a name="line.3132"></a>
+<span class="sourceLineNo">3133</span><a name="line.3133"></a>
+<span class="sourceLineNo">3134</span> final boolean result = this.procedureExecutor.abort(procId, mayInterruptIfRunning);<a name="line.3134"></a>
+<span class="sourceLineNo">3135</span><a name="line.3135"></a>
+<span class="sourceLineNo">3136</span> if (cpHost != null) {<a name="line.3136"></a>
+<span class="sourceLineNo">3137</span> cpHost.postAbortProcedure();<a name="line.3137"></a>
+<span class="sourceLineNo">3138</span> }<a name="line.3138"></a>
<span class="sourceLineNo">3139</span><a name="line.3139"></a>
-<span class="sourceLineNo">3140</span> @Override<a name="line.3140"></a>
-<span class="sourceLineNo">3141</span> public List<Procedure<?>> getProcedures() throws IOException {<a name="line.3141"></a>
-<span class="sourceLineNo">3142</span> if (cpHost != null) {<a name="line.3142"></a>
-<span class="sourceLineNo">3143</span> cpHost.preGetProcedures();<a name="line.3143"></a>
-<span class="sourceLineNo">3144</span> }<a name="line.3144"></a>
-<span class="sourceLineNo">3145</span><a name="line.3145"></a>
-<span class="sourceLineNo">3146</span> final List<Procedure<?>> procList = this.procedureExecutor.getProcedures();<a name="line.3146"></a>
-<span class="sourceLineNo">3147</span><a name="line.3147"></a>
-<span class="sourceLineNo">3148</span> if (cpHost != null) {<a name="line.3148"></a>
-<span class="sourceLineNo">3149</span> cpHost.postGetProcedures(procList);<a name="line.3149"></a>
-<span class="sourceLineNo">3150</span> }<a name="line.3150"></a>
-<span class="sourceLineNo">3151</span><a name="line.3151"></a>
-<span class="sourceLineNo">3152</span> return procList;<a name="line.3152"></a>
-<span class="sourceLineNo">3153</span> }<a name="line.3153"></a>
+<span class="sourceLineNo">3140</span> return result;<a name="line.3140"></a>
+<span class="sourceLineNo">3141</span> }<a name="line.3141"></a>
+<span class="sourceLineNo">3142</span><a name="line.3142"></a>
+<span class="sourceLineNo">3143</span> @Override<a name="line.3143"></a>
+<span class="sourceLineNo">3144</span> public List<Procedure<?>> getProcedures() throws IOException {<a name="line.3144"></a>
+<span class="sourceLineNo">3145</span> if (cpHost != null) {<a name="line.3145"></a>
+<span class="sourceLineNo">3146</span> cpHost.preGetProcedures();<a name="line.3146"></a>
+<span class="sourceLineNo">3147</span> }<a name="line.3147"></a>
+<span class="sourceLineNo">3148</span><a name="line.3148"></a>
+<span class="sourceLineNo">3149</span> final List<Procedure<?>> procList = this.procedureExecutor.getProcedures();<a name="line.3149"></a>
+<span class="sourceLineNo">3150</span><a name="line.3150"></a>
+<span class="sourceLineNo">3151</span> if (cpHost != null) {<a name="line.3151"></a>
+<span class="sourceLineNo">3152</span> cpHost.postGetProcedures(procList);<a name="line.3152"></a>
+<span class="sourceLineNo">3153</span> }<a name="line.3153"></a>
<span class="sourceLineNo">3154</span><a name="line.3154"></a>
-<span class="sourceLineNo">3155</span> @Override<a name="line.3155"></a>
-<span class="sourceLineNo">3156</span> public List<LockedResource> getLocks() throws IOException {<a name="line.3156"></a>
-<span class="sourceLineNo">3157</span> if (cpHost != null) {<a name="line.3157"></a>
-<span class="sourceLineNo">3158</span> cpHost.preGetLocks();<a name="line.3158"></a>
-<span class="sourceLineNo">3159</span> }<a name="line.3159"></a>
-<span class="sourceLineNo">3160</span><a name="line.3160"></a>
-<span class="sourceLineNo">3161</span> MasterProcedureScheduler procedureScheduler = procedureExecutor.getEnvironment().getProcedureScheduler();<a name="line.3161"></a>
-<span class="sourceLineNo">3162</span><a name="line.3162"></a>
-<span class="sourceLineNo">3163</span> final List<LockedResource> lockedResources = procedureScheduler.getLocks();<a name="line.3163"></a>
-<span class="sourceLineNo">3164</span><a name="line.3164"></a>
-<span class="sourceLineNo">3165</span> if (cpHost != null) {<a name="line.3165"></a>
-<span class="sourceLineNo">3166</span> cpHost.postGetLocks(lockedResources);<a name="line.3166"></a>
-<span class="sourceLineNo">3167</span> }<a name="line.3167"></a>
-<span class="sourceLineNo">3168</span><a name="line.3168"></a>
-<span class="sourceLineNo">3169</span> return lockedResources;<a name="line.3169"></a>
-<span class="sourceLineNo">3170</span> }<a name="line.3170"></a>
+<span class="sourceLineNo">3155</span> return procList;<a name="line.3155"></a>
+<span class="sourceLineNo">3156</span> }<a name="line.3156"></a>
+<span class="sourceLineNo">3157</span><a name="line.3157"></a>
+<span class="sourceLineNo">3158</span> @Override<a name="line.3158"></a>
+<span class="sourceLineNo">3159</span> public List<LockedResource> getLocks() throws IOException {<a name="line.3159"></a>
+<span class="sourceLineNo">3160</span> if (cpHost != null) {<a name="line.3160"></a>
+<span class="sourceLineNo">3161</span> cpHost.preGetLocks();<a name="line.3161"></a>
+<span class="sourceLineNo">3162</span> }<a name="line.3162"></a>
+<span class="sourceLineNo">3163</span><a name="line.3163"></a>
+<span class="sourceLineNo">3164</span> MasterProcedureScheduler procedureScheduler = procedureExecutor.getEnvironment().getProcedureScheduler();<a name="line.3164"></a>
+<span class="sourceLineNo">3165</span><a name="line.3165"></a>
+<span class="sourceLineNo">3166</span> final List<LockedResource> lockedResources = procedureScheduler.getLocks();<a name="line.3166"></a>
+<span class="sourceLineNo">3167</span><a name="line.3167"></a>
+<span class="sourceLineNo">3168</span> if (cpHost != null) {<a name="line.3168"></a>
+<span class="sourceLineNo">3169</span> cpHost.postGetLocks(lockedResources);<a name="line.3169"></a>
+<span class="sourceLineNo">3170</span> }<a name="line.3170"></a>
<span class="sourceLineNo">3171</span><a name="line.3171"></a>
-<span class="sourceLineNo">3172</span> /**<a name="line.3172"></a>
-<span class="sourceLineNo">3173</span> * Returns the list of table descriptors that match the specified request<a name="line.3173"></a>
-<span class="sourceLineNo">3174</span> * @param namespace the namespace to query, or null if querying for all<a name="line.3174"></a>
-<span class="sourceLineNo">3175</span> * @param regex The regular expression to match against, or null if querying for all<a name="line.3175"></a>
-<span class="sourceLineNo">3176</span> * @param tableNameList the list of table names, or null if querying for all<a name="line.3176"></a>
-<span class="sourceLineNo">3177</span> * @param includeSysTables False to match only against userspace tables<a name="line.3177"></a>
-<span class="sourceLineNo">3178</span> * @return the list of table descriptors<a name="line.3178"></a>
-<span class="sourceLineNo">3179</span> */<a name="line.3179"></a>
-<span class="sourceLineNo">3180</span> public List<TableDescriptor> listTableDescriptors(final String namespace, final String regex,<a name="line.3180"></a>
-<span class="sourceLineNo">3181</span> final List<TableName> tableNameList, final boolean includeSysTables)<a name="line.3181"></a>
-<span class="sourceLineNo">3182</span> throws IOException {<a name="line.3182"></a>
-<span class="sourceLineNo">3183</span> List<TableDescriptor> htds = new ArrayList<>();<a name="line.3183"></a>
-<span class="sourceLineNo">3184</span> if (cpHost != null) {<a name="line.3184"></a>
-<span class="sourceLineNo">3185</span> cpHost.preGetTableDescriptors(tableNameList, htds, regex);<a name="line.3185"></a>
-<span class="sourceLineNo">3186</span> }<a name="line.3186"></a>
-<span class="sourceLineNo">3187</span> htds = getTableDescriptors(htds, namespace, regex, tableNameList, includeSysTables);<a name="line.3187"></a>
-<span class="sourceLineNo">3188</span> if (cpHost != null) {<a name="line.3188"></a>
-<span class="sourceLineNo">3189</span> cpHost.postGetTableDescriptors(tableNameList, htds, regex);<a name="line.3189"></a>
-<span class="sourceLineNo">3190</span> }<a name="line.3190"></a>
-<span class="sourceLineNo">3191</span> return htds;<a name="line.3191"></a>
-<span class="sourceLineNo">3192</span> }<a name="line.3192"></a>
-<span class="sourceLineNo">3193</span><a name="line.3193"></a>
-<span class="sourceLineNo">3194</span> /**<a name="line.3194"></a>
-<span class="sourceLineNo">3195</span> * Returns the list of table names that match the specified request<a name="line.3195"></a>
-<span class="sourceLineNo">3196</span> * @param regex The regular expression to match against, or null if querying for all<a name="line.3196"></a>
-<span class="sourceLineNo">3197</span> * @param namespace the namespace to query, or null if querying for all<a name="line.3197"></a>
-<span class="sourceLineNo">3198</span> * @param includeSysTables False to match only against userspace tables<a name="line.3198"></a>
-<span class="sourceLineNo">3199</span> * @return the list of table names<a name="line.3199"></a>
-<span class="sourceLineNo">3200</span> */<a name="line.3200"></a>
-<span class="sourceLineNo">3201</span> public List<TableName> listTableNames(final String namespace, final String regex,<a name="line.3201"></a>
-<span class="sourceLineNo">3202</span> final boolean includeSysTables) throws IOException {<a name="line.3202"></a>
-<span class="sourceLineNo">3203</span> List<TableDescriptor> htds = new ArrayList<>();<a name="line.3203"></a>
-<span class="sourceLineNo">3204</span> if (cpHost != null) {<a name="line.3204"></a>
-<span class="sourceLineNo">3205</span> cpHost.preGetTableNames(htds, regex);<a name="line.3205"></a>
-<span class="sourceLineNo">3206</span> }<a name="line.3206"></a>
-<span class="sourceLineNo">3207</span> htds = getTableDescriptors(htds, namespace, regex, null, includeSysTables);<a name="line.3207"></a>
-<span class="sourceLineNo">3208</span> if (cpHost != null) {<a name="line.3208"></a>
-<span class="sourceLineNo">3209</span> cpHost.postGetTableNames(htds, regex);<a name="line.3209"></a>
-<span class="sourceLineNo">3210</span> }<a name="line.3210"></a>
-<span class="sourceLineNo">3211</span> List<TableName> result = new ArrayList<>(htds.size());<a name="line.3211"></a>
-<span class="sourceLineNo">3212</span> for (TableDescriptor htd: htds) result.add(htd.getTableName());<a name="line.3212"></a>
-<span class="sourceLineNo">3213</span> return result;<a name="line.3213"></a>
-<span class="sourceLineNo">3214</span> }<a name="line.3214"></a>
-<span class="sourceLineNo">3215</span><a name="line.3215"></a>
-<span class="sourceLineNo">3216</span> /**<a name="line.3216"></a>
-<span class="sourceLineNo">3217</span> * @return list of table table descriptors after filtering by regex and whether to include system<a name="line.3217"></a>
-<span class="sourceLineNo">3218</span> * tables, etc.<a name="line.3218"></a>
-<span class="sourceLineNo">3219</span> * @throws IOException<a name="line.3219"></a>
-<span class="sourceLineNo">3220</span> */<a name="line.3220"></a>
-<span class="sourceLineNo">3221</span> private List<TableDescriptor> getTableDescriptors(final List<TableDescriptor> htds,<a name="line.3221"></a>
-<span class="sourceLineNo">3222</span> final String namespace, final String regex, final List<TableName> tableNameList,<a name="line.3222"></a>
-<span class="sourceLineNo">3223</span> final boolean includeSysTables)<a name="line.3223"></a>
-<span class="sourceLineNo">3224</span> throws IOException {<a name="line.3224"></a>
-<span class="sourceLineNo">3225</span> if (tableNameList == null || tableNameList.isEmpty()) {<a name="line.3225"></a>
-<span class="sourceLineNo">3226</span> // request for all TableDescriptors<a name="line.3226"></a>
-<span class="sourceLineNo">3227</span> Collection<TableDescriptor> allHtds;<a name="line.3227"></a>
-<span class="sourceLineNo">3228</span> if (namespace != null && namespace.length() > 0) {<a name="line.3228"></a>
-<span class="sourceLineNo">3229</span> // Do a check on the namespace existence. Will fail if does not exist.<a name="line.3229"></a>
-<span class="sourceLineNo">3230</span> this.clusterSchemaService.getNamespace(namespace);<a name="line.3230"></a>
-<span class="sourceLineNo">3231</span> allHtds = tableDescriptors.getByNamespace(namespace).values();<a name="line.3231"></a>
-<span class="sourceLineNo">3232</span> } else {<a name="line.3232"></a>
-<span class="sourceLineNo">3233</span> allHtds = tableDescriptors.getAll().values();<a name="line.3233"></a>
-<span class="sourceLineNo">3234</span> }<a name="line.3234"></a>
-<span class="sourceLineNo">3235</span> for (TableDescriptor desc: allHtds) {<a name="line.3235"></a>
-<span class="sourceLineNo">3236</span> if (tableStateManager.isTablePresent(desc.getTableName())<a name="line.3236"></a>
-<span class="sourceLineNo">3237</span> && (includeSysTables || !desc.getTableName().isSystemTable())) {<a name="line.3237"></a>
-<span class="sourceLineNo">3238</span> htds.add(desc);<a name="line.3238"></a>
-<span class="sourceLineNo">3239</span> }<a name="line.3239"></a>
-<span class="sourceLineNo">3240</span> }<a name="line.3240"></a>
-<span class="sourceLineNo">3241</span> } else {<a name="line.3241"></a>
-<span class="sourceLineNo">3242</span> for (TableName s: tableNameList) {<a name="line.3242"></a>
-<span class="sourceLineNo">3243</span> if (tableStateManager.isTablePresent(s)) {<a name="line.3243"></a>
-<span class="sourceLineNo">3244</span> TableDescriptor desc = tableDescriptors.get(s);<a name="line.3244"></a>
-<span class="sourceLineNo">3245</span> if (desc != null) {<a name="line.3245"></a>
-<span class="sourceLineNo">3246</span> htds.add(desc);<a name="line.3246"></a>
-<span class="sourceLineNo">3247</span> }<a name="line.3247"></a>
-<span class="sourceLineNo">3248</span> }<a name="line.3248"></a>
-<span class="sourceLineNo">3249</span> }<a name="line.3249"></a>
-<span class="sourceLineNo">3250</span> }<a name="line.3250"></a>
-<span class="sourceLineNo">3251</span><a name="line.3251"></a>
-<span class="sourceLineNo">3252</span> // Retains only those matched by regular expression.<a name="line.3252"></a>
-<span class="sourceLineNo">3253</span> if (regex != null) filterTablesByRegex(htds, Pattern.compile(regex));<a name="line.3253"></a>
-<span class="sourceLineNo">3254</span> return htds;<a name="line.3254"></a>
-<span class="sourceLineNo">3255</span> }<a name="line.3255"></a>
-<span class="sourceLineNo">3256</span><a name="line.3256"></a>
-<span class="sourceLineNo">3257</span> /**<a name="line.3257"></a>
-<span class="sourceLineNo">3258</span> * Removes the table descriptors that don't match the pattern.<a name="line.3258"></a>
-<span class="sourceLineNo">3259</span> * @param descriptors list of table descriptors to filter<a name="line.3259"></a>
-<span class="sourceLineNo">3260</span> * @param pattern the regex to use<a name="line.3260"></a>
-<span class="sourceLineNo">3261</span> */<a name="line.3261"></a>
-<span class="sourceLineNo">3262</span> private static void filterTablesByRegex(final Collection<TableDescriptor> descriptors,<a name="line.3262"></a>
-<span class="sourceLineNo">3263</span> final Pattern pattern) {<a name="line.3263"></a>
-<span class="sourceLineNo">3264</span> final String defaultNS = NamespaceDescriptor.DEFAULT_NAMESPACE_NAME_STR;<a name="line.3264"></a>
-<span class="sourceLineNo">3265</span> Iterator<TableDescriptor> itr = descriptors.iterator();<a name="line.3265"></a>
-<span class="sourceLineNo">3266</span> while (itr.hasNext()) {<a name="line.3266"></a>
-<span class="sourceLineNo">3267</span> TableDescriptor htd = itr.next();<a name="line.3267"></a>
-<span class="sourceLineNo">3268</span> String tableName = htd.getTableName().getNameAsString();<a name="line.3268"></a>
-<span class="sourceLineNo">3269</span> boolean matched = pattern.matcher(tableName).matches();<a name="line.3269"></a>
-<span class="sourceLineNo">3270</span> if (!matched && htd.getTableName().getNamespaceAsString().equals(defaultNS)) {<a name="line.3270"></a>
-<span class="sourceLineNo">3271</span> matched = pattern.matcher(defaultNS + TableName.NAMESPACE_DELIM + tableName).matches();<a name="line.3271"></a>
-<span class="sourceLineNo">3272</span> }<a name="line.3272"></a>
-<span class="sourceLineNo">3273</span> if (!matched) {<a name="line.3273"></a>
-<span class="sourceLineNo">3274</span> itr.remove();<a name="line.3274"></a>
+<span class="sourceLineNo">3172</span> return lockedResources;<a name="line.3172"></a>
+<span class="sourceLineNo">3173</span> }<a name="line.3173"></a>
+<span class="sourceLineNo">3174</span><a name="line.3174"></a>
+<span class="sourceLineNo">3175</span> /**<a name="line.3175"></a>
+<span class="sourceLineNo">3176</span> * Returns the list of table descriptors that match the specified request<a name="line.3176"></a>
+<span class="sourceLineNo">3177</span> * @param namespace the namespace to query, or null if querying for all<a name="line.3177"></a>
+<span class="sourceLineNo">3178</span> * @param regex The regular expression to match against, or null if querying for all<a name="line.3178"></a>
+<span class="sourceLineNo">3179</span> * @param tableNameList the list of table names, or null if querying for all<a name="line.3179"></a>
+<span class="sourceLineNo">3180</span> * @param includeSysTables False to match only against userspace tables<a name="line.3180"></a>
+<span class="sourceLineNo">3181</span> * @return the list of table descriptors<a name="line.3181"></a>
+<span class="sourceLineNo">3182</span> */<a name="line.3182"></a>
+<span class="sourceLineNo">3183</span> public List<TableDescriptor> listTableDescriptors(final String namespace, final String regex,<a name="line.3183"></a>
+<span class="sourceLineNo">3184</span> final List<TableName> tableNameList, final boolean includeSysTables)<a name="line.3184"></a>
+<span class="sourceLineNo">3185</span> throws IOException {<a name="line.3185"></a>
+<span class="sourceLineNo">3186</span> List<TableDescriptor> htds = new ArrayList<>();<a name="line.3186"></a>
+<span class="sourceLineNo">3187</span> if (cpHost != null) {<a name="line.3187"></a>
+<span class="sourceLineNo">3188</span> cpHost.preGetTableDescriptors(tableNameList, htds, regex);<a name="line.3188"></a>
+<span class="sourceLineNo">3189</span> }<a name="line.3189"></a>
+<span class="sourceLineNo">3190</span> htds = getTableDescriptors(htds, namespace, regex, tableNameList, includeSysTables);<a name="line.3190"></a>
+<span class="sourceLineNo">3191</span> if (cpHost != null) {<a name="line.3191"></a>
+<span class="sourceLineNo">3192</span> cpHost.postGetTableDescriptors(tableNameList, htds, regex);<a name="line.3192"></a>
+<span class="sourceLineNo">3193</span> }<a name="line.3193"></a>
+<span class="sourceLineNo">3194</span> return htds;<a name="line.3194"></a>
+<span class="sourceLineNo">3195</span> }<a name="line.3195"></a>
+<span class="sourceLineNo">3196</span><a name="line.3196"></a>
+<span class="sourceLineNo">3197</span> /**<a name="line.3197"></a>
+<span class="sourceLineNo">3198</span> * Returns the list of table names that match the specified request<a name="line.3198"></a>
+<span class="sourceLineNo">3199</span> * @param regex The regular expression to match against, or null if querying for all<a name="line.3199"></a>
+<span class="sourceLineNo">3200</span> * @param namespace the namespace to query, or null if querying for all<a name="line.3200"></a>
+<span class="sourceLineNo">3201</span> * @param includeSysTables False to match only against userspace tables<a name="line.3201"></a>
+<span class="sourceLineNo">3202</span> * @return the list of table names<a name="line.3202"></a>
+<span class="sourceLineNo">3203</span> */<a name="line.3203"></a>
+<span class="sourceLineNo">3204</span> public List<TableName> listTableNames(final String namespace, final String regex,<a name="line.3204"></a>
+<span class="sourceLineNo">3205</span> final boolean includeSysTables) throws IOException {<a name="line.3205"></a>
+<span class="sourceLineNo">3206</span> List<TableDescriptor> htds = new ArrayList<>();<a name="line.3206"></a>
+<span class="sourceLineNo">3207</span> if (cpHost != null) {<a name="line.3207"></a>
+<span class="sourceLineNo">3208</span> cpHost.preGetTableNames(htds, regex);<a name="line.3208"></a>
+<span class="sourceLineNo">3209</span> }<a name="line.3209"></a>
+<span class="sourceLineNo">3210</span> htds = getTableDescriptors(htds, namespace, regex, null, includeSysTables);<a name="line.3210"></a>
+<span class="sourceLineNo">3211</span> if (cpHost != null) {<a name="line.3211"></a>
+<span class="sourceLineNo">3212</span> cpHost.postGetTableNames(htds, regex);<a name="line.3212"></a>
+<span class="sourceLineNo">3213</span> }<a name="line.3213"></a>
+<span class="sourceLineNo">3214</span> List<TableName> result = new ArrayList<>(htds.size());<a name="line.3214"></a>
+<span class="sourceLineNo">3215</span> for (TableDescriptor htd: htds) result.add(htd.getTableName());<a name="line.3215"></a>
+<span class="sourceLineNo">3216</span> return result;<a name="line.3216"></a>
+<span class="sourceLineNo">3217</span> }<a name="line.3217"></a>
+<span class="sourceLineNo">3218</span><a name="line.3218"></a>
+<span class="sourceLineNo">3219</span> /**<a name="line.3219"></a>
+<span class="sourceLineNo">3220</span> * @return list of table table descriptors after filtering by regex and whether to include system<a name="line.3220"></a>
+<span class="sourceLineNo">3221</span> * tables, etc.<a name="line.3221"></a>
+<span class="sourceLineNo">3222</span> * @throws IOException<a name="line.3222"></a>
+<span class="sourceLineNo">3223</span> */<a name="line.3223"></a>
+<span class="sourceLineNo">3224</span> private List<TableDescriptor> getTableDescriptors(final List<TableDescriptor> htds,<a name="line.3224"></a>
+<span class="sourceLineNo">3225</span> final String namespace, final String regex, final List<TableName> tableNameList,<a name="line.3225"></a>
+<span class="sourceLineNo">3226</span> final boolean includeSysTables)<a name="line.3226"></a>
+<span class="sourceLineNo">3227</span> throws IOException {<a name="line.3227"></a>
+<span class="sourceLineNo">3228</span> if (tableNameList == null || tableNameList.isEmpty()) {<a name="line.3228"></a>
+<span class="sourceLineNo">3229</span> // request for all TableDescriptors<a name="line.3229"></a>
+<span class="sourceLineNo">3230</span> Collection<TableDescriptor> allHtds;<a name="line.3230"></a>
+<span class="sourceLineNo">3231</span> if (namespace != null && namespace.length() > 0) {<a name="line.3231"></a>
+<span class="sourceLineNo">3232</span> // Do a check on the namespace existence. Will fail if does not exist.<a name="line.3232"></a>
+<span class="sourceLineNo">3233</span> this.clusterSchemaService.getNamespace(namespace);<a name="line.3233"></a>
+<span class="sourceLineNo">3234</span> allHtds = tableDescriptors.getByNamespace(namespace).values();<a name="line.3234"></a>
+<span class="sourceLineNo">3235</span> } else {<a name="line.3235"></a>
+<span class="sourceLineNo">3236</span> allHtds = tableDescriptors.getAll().values();<a name="line.3236"></a>
+<span class="sourceLineNo">3237</span> }<a name="line.3237"></a>
+<span class="sourceLineNo">3238</span> for (TableDescriptor desc: allHtds) {<a name="line.3238"></a>
+<span class="sourceLineNo">3239</span> if (tableStateManager.isTablePresent(desc.getTableName())<a name="line.3239"></a>
+<span class="sourceLineNo">3240</span> && (includeSysTables || !desc.getTableName().isSystemTable())) {<a name="line.3240"></a>
+<span class="sourceLineNo">3241</span> htds.add(desc);<a name="line.3241"></a>
+<span class="sourceLineNo">3242</span> }<a name="line.3242"></a>
+<span class="sourceLineNo">3243</span> }<a name="line.3243"></a>
+<span class="sourceLineNo">3244</span> } else {<a name="line.3244"></a>
+<span class="sourceLineNo">3245</span> for (TableName s: tableNameList) {<a name="line.3245"></a>
+<span class="sourceLineNo">3246</span> if (tableStateManager.isTablePresent(s)) {<a name="line.3246"></a>
+<span class="sourceLineNo">3247</span> TableDescriptor desc = tableDescriptors.get(s);<a name="line.3247"></a>
+<span class="sourceLineNo">3248</span> if (desc != null) {<a name="line.3248"></a>
+<span class="sourceLineNo">3249</span> htds.add(desc);<a name="line.3249"></a>
+<span class="sourceLineNo">3250</span> }<a name="line.3250"></a>
+<span class="sourceLineNo">3251</span> }<a name="line.3251"></a>
+<span class="sourceLineNo">3252</span> }<a name="line.3252"></a>
+<span class="sourceLineNo">3253</span> }<a name="line.3253"></a>
+<span class="sourceLineNo">3254</span><a name="line.3254"></a>
+<span class="sourceLineNo">3255</span> // Retains only those matched by regular expression.<a name="line.3255"></a>
+<span class="sourceLineNo">3256</span> if (regex != null) filterTablesByRegex(htds, Pattern.compile(regex));<a name="line.3256"></a>
+<span class="sourceLineNo">3257</span> return htds;<a name="line.3257"></a>
+<span class="sourceLineNo">3258</span> }<a name="line.3258"></a>
+<span class="sourceLineNo">3259</span><a name="line.3259"></a>
+<span class="sourceLineNo">3260</span> /**<a name="line.3260"></a>
+<span class="sourceLineNo">3261</span> * Removes the table descriptors that don't match the pattern.<a name="line.3261"></a>
+<span class="sourceLineNo">3262</span> * @param descriptors list of table descriptors to filter<a name="line.3262"></a>
+<span class="sourceLineNo">3263</span> * @param pattern the regex to use<a name="line.3263"></a>
+<span class="sourceLineNo">3264</span> */<a name="line.3264"></a>
+<span class="sourceLineNo">3265</span> private static void filterTablesByRegex(final Collection<TableDescriptor> descriptors,<a name="line.3265"></a>
+<span class="sourceLineNo">3266</span> final Pattern pattern) {<a name="line.3266"></a>
+<span class="sourceLineNo">3267</span> final String defaultNS = NamespaceDescriptor.DEFAULT_NAMESPACE_NAME_STR;<a name="line.3267"></a>
+<span class="sourceLineNo">3268</span> Iterator<TableDescriptor> itr = descriptors.iterator();<a name="line.3268"></a>
+<span class="sourceLineNo">3269</span> while (itr.hasNext()) {<a name="line.3269"></a>
+<span class="sourceLineNo">3270</sp
<TRUNCATED>
[17/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html
index 5420d82..6ea3672 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html
@@ -316,687 +316,728 @@
<span class="sourceLineNo">308</span> }<a name="line.308"></a>
<span class="sourceLineNo">309</span> }<a name="line.309"></a>
<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span> public enum ServerState { ONLINE, SPLITTING, OFFLINE }<a name="line.311"></a>
-<span class="sourceLineNo">312</span> public static class ServerStateNode implements Comparable<ServerStateNode> {<a name="line.312"></a>
-<span class="sourceLineNo">313</span> private final ServerReportEvent reportEvent;<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> private final Set<RegionStateNode> regions;<a name="line.315"></a>
-<span class="sourceLineNo">316</span> private final ServerName serverName;<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span> private volatile ServerState state = ServerState.ONLINE;<a name="line.318"></a>
-<span class="sourceLineNo">319</span> private volatile int versionNumber = 0;<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span> public ServerStateNode(final ServerName serverName) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span> this.serverName = serverName;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> this.regions = ConcurrentHashMap.newKeySet();<a name="line.323"></a>
-<span class="sourceLineNo">324</span> this.reportEvent = new ServerReportEvent(serverName);<a name="line.324"></a>
-<span class="sourceLineNo">325</span> }<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> public ServerName getServerName() {<a name="line.327"></a>
-<span class="sourceLineNo">328</span> return serverName;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> }<a name="line.329"></a>
+<span class="sourceLineNo">311</span> /**<a name="line.311"></a>
+<span class="sourceLineNo">312</span> * Server State.<a name="line.312"></a>
+<span class="sourceLineNo">313</span> */<a name="line.313"></a>
+<span class="sourceLineNo">314</span> public enum ServerState {<a name="line.314"></a>
+<span class="sourceLineNo">315</span> /**<a name="line.315"></a>
+<span class="sourceLineNo">316</span> * Initial state. Available.<a name="line.316"></a>
+<span class="sourceLineNo">317</span> */<a name="line.317"></a>
+<span class="sourceLineNo">318</span> ONLINE,<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span> /**<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * Server expired/crashed. Currently undergoing WAL splitting.<a name="line.321"></a>
+<span class="sourceLineNo">322</span> */<a name="line.322"></a>
+<span class="sourceLineNo">323</span> SPLITTING,<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span> /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * WAL splitting done.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> */<a name="line.327"></a>
+<span class="sourceLineNo">328</span> OFFLINE<a name="line.328"></a>
+<span class="sourceLineNo">329</span> }<a name="line.329"></a>
<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> public ServerState getState() {<a name="line.331"></a>
-<span class="sourceLineNo">332</span> return state;<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> public int getVersionNumber() {<a name="line.335"></a>
-<span class="sourceLineNo">336</span> return versionNumber;<a name="line.336"></a>
-<span class="sourceLineNo">337</span> }<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span> public ProcedureEvent<?> getReportEvent() {<a name="line.339"></a>
-<span class="sourceLineNo">340</span> return reportEvent;<a name="line.340"></a>
-<span class="sourceLineNo">341</span> }<a name="line.341"></a>
+<span class="sourceLineNo">331</span> /**<a name="line.331"></a>
+<span class="sourceLineNo">332</span> * State of Server; list of hosted regions, etc.<a name="line.332"></a>
+<span class="sourceLineNo">333</span> */<a name="line.333"></a>
+<span class="sourceLineNo">334</span> public static class ServerStateNode implements Comparable<ServerStateNode> {<a name="line.334"></a>
+<span class="sourceLineNo">335</span> private final ServerReportEvent reportEvent;<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> private final Set<RegionStateNode> regions;<a name="line.337"></a>
+<span class="sourceLineNo">338</span> private final ServerName serverName;<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span> private volatile ServerState state = ServerState.ONLINE;<a name="line.340"></a>
+<span class="sourceLineNo">341</span> private volatile int versionNumber = 0;<a name="line.341"></a>
<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span> public boolean isInState(final ServerState... expected) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span> boolean expectedState = false;<a name="line.344"></a>
-<span class="sourceLineNo">345</span> if (expected != null) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span> for (int i = 0; i < expected.length; ++i) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> expectedState |= (state == expected[i]);<a name="line.347"></a>
-<span class="sourceLineNo">348</span> }<a name="line.348"></a>
-<span class="sourceLineNo">349</span> }<a name="line.349"></a>
-<span class="sourceLineNo">350</span> return expectedState;<a name="line.350"></a>
+<span class="sourceLineNo">343</span> public ServerStateNode(final ServerName serverName) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span> this.serverName = serverName;<a name="line.344"></a>
+<span class="sourceLineNo">345</span> this.regions = ConcurrentHashMap.newKeySet();<a name="line.345"></a>
+<span class="sourceLineNo">346</span> this.reportEvent = new ServerReportEvent(serverName);<a name="line.346"></a>
+<span class="sourceLineNo">347</span> }<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span> public ServerName getServerName() {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> return serverName;<a name="line.350"></a>
<span class="sourceLineNo">351</span> }<a name="line.351"></a>
<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span> public void setState(final ServerState state) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span> this.state = state;<a name="line.354"></a>
+<span class="sourceLineNo">353</span> public ServerState getState() {<a name="line.353"></a>
+<span class="sourceLineNo">354</span> return state;<a name="line.354"></a>
<span class="sourceLineNo">355</span> }<a name="line.355"></a>
<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span> public void setVersionNumber(final int versionNumber) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> this.versionNumber = versionNumber;<a name="line.358"></a>
+<span class="sourceLineNo">357</span> public int getVersionNumber() {<a name="line.357"></a>
+<span class="sourceLineNo">358</span> return versionNumber;<a name="line.358"></a>
<span class="sourceLineNo">359</span> }<a name="line.359"></a>
<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span> public Set<RegionStateNode> getRegions() {<a name="line.361"></a>
-<span class="sourceLineNo">362</span> return regions;<a name="line.362"></a>
+<span class="sourceLineNo">361</span> public ProcedureEvent<?> getReportEvent() {<a name="line.361"></a>
+<span class="sourceLineNo">362</span> return reportEvent;<a name="line.362"></a>
<span class="sourceLineNo">363</span> }<a name="line.363"></a>
<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span> public int getRegionCount() {<a name="line.365"></a>
-<span class="sourceLineNo">366</span> return regions.size();<a name="line.366"></a>
+<span class="sourceLineNo">365</span> public boolean isOffline() {<a name="line.365"></a>
+<span class="sourceLineNo">366</span> return this.state.equals(ServerState.OFFLINE);<a name="line.366"></a>
<span class="sourceLineNo">367</span> }<a name="line.367"></a>
<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span> public ArrayList<RegionInfo> getRegionInfoList() {<a name="line.369"></a>
-<span class="sourceLineNo">370</span> ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(regions.size());<a name="line.370"></a>
-<span class="sourceLineNo">371</span> for (RegionStateNode region: regions) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span> hris.add(region.getRegionInfo());<a name="line.372"></a>
-<span class="sourceLineNo">373</span> }<a name="line.373"></a>
-<span class="sourceLineNo">374</span> return hris;<a name="line.374"></a>
-<span class="sourceLineNo">375</span> }<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span> public void addRegion(final RegionStateNode regionNode) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span> this.regions.add(regionNode);<a name="line.378"></a>
-<span class="sourceLineNo">379</span> }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span> public void removeRegion(final RegionStateNode regionNode) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span> this.regions.remove(regionNode);<a name="line.382"></a>
-<span class="sourceLineNo">383</span> }<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public int compareTo(final ServerStateNode other) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> return getServerName().compareTo(other.getServerName());<a name="line.387"></a>
-<span class="sourceLineNo">388</span> }<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span> @Override<a name="line.390"></a>
-<span class="sourceLineNo">391</span> public int hashCode() {<a name="line.391"></a>
-<span class="sourceLineNo">392</span> return getServerName().hashCode();<a name="line.392"></a>
+<span class="sourceLineNo">369</span> public boolean isInState(final ServerState... expected) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span> boolean expectedState = false;<a name="line.370"></a>
+<span class="sourceLineNo">371</span> if (expected != null) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span> for (int i = 0; i < expected.length; ++i) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> expectedState |= (state == expected[i]);<a name="line.373"></a>
+<span class="sourceLineNo">374</span> }<a name="line.374"></a>
+<span class="sourceLineNo">375</span> }<a name="line.375"></a>
+<span class="sourceLineNo">376</span> return expectedState;<a name="line.376"></a>
+<span class="sourceLineNo">377</span> }<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span> public void setState(final ServerState state) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span> this.state = state;<a name="line.380"></a>
+<span class="sourceLineNo">381</span> }<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span> public void setVersionNumber(final int versionNumber) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span> this.versionNumber = versionNumber;<a name="line.384"></a>
+<span class="sourceLineNo">385</span> }<a name="line.385"></a>
+<span class="sourceLineNo">386</span><a name="line.386"></a>
+<span class="sourceLineNo">387</span> public Set<RegionStateNode> getRegions() {<a name="line.387"></a>
+<span class="sourceLineNo">388</span> return regions;<a name="line.388"></a>
+<span class="sourceLineNo">389</span> }<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span> public int getRegionCount() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span> return regions.size();<a name="line.392"></a>
<span class="sourceLineNo">393</span> }<a name="line.393"></a>
<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
-<span class="sourceLineNo">396</span> public boolean equals(final Object other) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span> if (this == other) return true;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> if (!(other instanceof ServerStateNode)) return false;<a name="line.398"></a>
-<span class="sourceLineNo">399</span> return compareTo((ServerStateNode)other) == 0;<a name="line.399"></a>
-<span class="sourceLineNo">400</span> }<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span> @Override<a name="line.402"></a>
-<span class="sourceLineNo">403</span> public String toString() {<a name="line.403"></a>
-<span class="sourceLineNo">404</span> return String.format("ServerStateNode(%s)", getServerName());<a name="line.404"></a>
+<span class="sourceLineNo">395</span> public ArrayList<RegionInfo> getRegionInfoList() {<a name="line.395"></a>
+<span class="sourceLineNo">396</span> ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(regions.size());<a name="line.396"></a>
+<span class="sourceLineNo">397</span> for (RegionStateNode region: regions) {<a name="line.397"></a>
+<span class="sourceLineNo">398</span> hris.add(region.getRegionInfo());<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span> return hris;<a name="line.400"></a>
+<span class="sourceLineNo">401</span> }<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span> public void addRegion(final RegionStateNode regionNode) {<a name="line.403"></a>
+<span class="sourceLineNo">404</span> this.regions.add(regionNode);<a name="line.404"></a>
<span class="sourceLineNo">405</span> }<a name="line.405"></a>
-<span class="sourceLineNo">406</span> }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span> public final static RegionStateStampComparator REGION_STATE_STAMP_COMPARATOR =<a name="line.408"></a>
-<span class="sourceLineNo">409</span> new RegionStateStampComparator();<a name="line.409"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span> public void removeRegion(final RegionStateNode regionNode) {<a name="line.407"></a>
+<span class="sourceLineNo">408</span> this.regions.remove(regionNode);<a name="line.408"></a>
+<span class="sourceLineNo">409</span> }<a name="line.409"></a>
<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span> // TODO: Replace the ConcurrentSkipListMaps<a name="line.411"></a>
-<span class="sourceLineNo">412</span> /**<a name="line.412"></a>
-<span class="sourceLineNo">413</span> * RegionName -- i.e. RegionInfo.getRegionName() -- as bytes to {@link RegionStateNode}<a name="line.413"></a>
-<span class="sourceLineNo">414</span> */<a name="line.414"></a>
-<span class="sourceLineNo">415</span> private final ConcurrentSkipListMap<byte[], RegionStateNode> regionsMap =<a name="line.415"></a>
-<span class="sourceLineNo">416</span> new ConcurrentSkipListMap<byte[], RegionStateNode>(Bytes.BYTES_COMPARATOR);<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionInTransition =<a name="line.418"></a>
-<span class="sourceLineNo">419</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>(RegionInfo.COMPARATOR);<a name="line.419"></a>
+<span class="sourceLineNo">411</span> @Override<a name="line.411"></a>
+<span class="sourceLineNo">412</span> public int compareTo(final ServerStateNode other) {<a name="line.412"></a>
+<span class="sourceLineNo">413</span> return getServerName().compareTo(other.getServerName());<a name="line.413"></a>
+<span class="sourceLineNo">414</span> }<a name="line.414"></a>
+<span class="sourceLineNo">415</span><a name="line.415"></a>
+<span class="sourceLineNo">416</span> @Override<a name="line.416"></a>
+<span class="sourceLineNo">417</span> public int hashCode() {<a name="line.417"></a>
+<span class="sourceLineNo">418</span> return getServerName().hashCode();<a name="line.418"></a>
+<span class="sourceLineNo">419</span> }<a name="line.419"></a>
<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span> /**<a name="line.421"></a>
-<span class="sourceLineNo">422</span> * Regions marked as offline on a read of hbase:meta. Unused or at least, once<a name="line.422"></a>
-<span class="sourceLineNo">423</span> * offlined, regions have no means of coming on line again. TODO.<a name="line.423"></a>
-<span class="sourceLineNo">424</span> */<a name="line.424"></a>
-<span class="sourceLineNo">425</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionOffline =<a name="line.425"></a>
-<span class="sourceLineNo">426</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>();<a name="line.426"></a>
+<span class="sourceLineNo">421</span> @Override<a name="line.421"></a>
+<span class="sourceLineNo">422</span> public boolean equals(final Object other) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span> if (this == other) return true;<a name="line.423"></a>
+<span class="sourceLineNo">424</span> if (!(other instanceof ServerStateNode)) return false;<a name="line.424"></a>
+<span class="sourceLineNo">425</span> return compareTo((ServerStateNode)other) == 0;<a name="line.425"></a>
+<span class="sourceLineNo">426</span> }<a name="line.426"></a>
<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span> private final ConcurrentSkipListMap<byte[], RegionFailedOpen> regionFailedOpen =<a name="line.428"></a>
-<span class="sourceLineNo">429</span> new ConcurrentSkipListMap<byte[], RegionFailedOpen>(Bytes.BYTES_COMPARATOR);<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span> private final ConcurrentHashMap<ServerName, ServerStateNode> serverMap =<a name="line.431"></a>
-<span class="sourceLineNo">432</span> new ConcurrentHashMap<ServerName, ServerStateNode>();<a name="line.432"></a>
+<span class="sourceLineNo">428</span> @Override<a name="line.428"></a>
+<span class="sourceLineNo">429</span> public String toString() {<a name="line.429"></a>
+<span class="sourceLineNo">430</span> return String.format("ServerStateNode(%s)", getServerName());<a name="line.430"></a>
+<span class="sourceLineNo">431</span> }<a name="line.431"></a>
+<span class="sourceLineNo">432</span> }<a name="line.432"></a>
<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span> public RegionStates() { }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> public void clear() {<a name="line.436"></a>
-<span class="sourceLineNo">437</span> regionsMap.clear();<a name="line.437"></a>
-<span class="sourceLineNo">438</span> regionInTransition.clear();<a name="line.438"></a>
-<span class="sourceLineNo">439</span> regionOffline.clear();<a name="line.439"></a>
-<span class="sourceLineNo">440</span> serverMap.clear();<a name="line.440"></a>
-<span class="sourceLineNo">441</span> }<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span> @VisibleForTesting<a name="line.443"></a>
-<span class="sourceLineNo">444</span> public boolean isRegionInRegionStates(final RegionInfo hri) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span> return (regionsMap.containsKey(hri.getRegionName()) || regionInTransition.containsKey(hri)<a name="line.445"></a>
-<span class="sourceLineNo">446</span> || regionOffline.containsKey(hri));<a name="line.446"></a>
-<span class="sourceLineNo">447</span> }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span> // ==========================================================================<a name="line.449"></a>
-<span class="sourceLineNo">450</span> // RegionStateNode helpers<a name="line.450"></a>
-<span class="sourceLineNo">451</span> // ==========================================================================<a name="line.451"></a>
-<span class="sourceLineNo">452</span> protected RegionStateNode createRegionStateNode(final RegionInfo regionInfo) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> RegionStateNode newNode = new RegionStateNode(regionInfo);<a name="line.453"></a>
-<span class="sourceLineNo">454</span> RegionStateNode oldNode = regionsMap.putIfAbsent(regionInfo.getRegionName(), newNode);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> return oldNode != null ? oldNode : newNode;<a name="line.455"></a>
-<span class="sourceLineNo">456</span> }<a name="line.456"></a>
-<span class="sourceLineNo">457</span><a name="line.457"></a>
-<span class="sourceLineNo">458</span> protected RegionStateNode getOrCreateRegionStateNode(final RegionInfo regionInfo) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> RegionStateNode node = regionsMap.get(regionInfo.getRegionName());<a name="line.459"></a>
-<span class="sourceLineNo">460</span> return node != null ? node : createRegionStateNode(regionInfo);<a name="line.460"></a>
-<span class="sourceLineNo">461</span> }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span> RegionStateNode getRegionStateNodeFromName(final byte[] regionName) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span> return regionsMap.get(regionName);<a name="line.464"></a>
-<span class="sourceLineNo">465</span> }<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span> protected RegionStateNode getRegionStateNode(final RegionInfo regionInfo) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span> return getRegionStateNodeFromName(regionInfo.getRegionName());<a name="line.468"></a>
-<span class="sourceLineNo">469</span> }<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span> public void deleteRegion(final RegionInfo regionInfo) {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> regionsMap.remove(regionInfo.getRegionName());<a name="line.472"></a>
-<span class="sourceLineNo">473</span> // Remove from the offline regions map too if there.<a name="line.473"></a>
-<span class="sourceLineNo">474</span> if (this.regionOffline.containsKey(regionInfo)) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span> if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> this.regionOffline.remove(regionInfo);<a name="line.476"></a>
-<span class="sourceLineNo">477</span> }<a name="line.477"></a>
-<span class="sourceLineNo">478</span> }<a name="line.478"></a>
-<span class="sourceLineNo">479</span><a name="line.479"></a>
-<span class="sourceLineNo">480</span> ArrayList<RegionStateNode> getTableRegionStateNodes(final TableName tableName) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span> final ArrayList<RegionStateNode> regions = new ArrayList<RegionStateNode>();<a name="line.481"></a>
-<span class="sourceLineNo">482</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span> if (!node.getTable().equals(tableName)) break;<a name="line.483"></a>
-<span class="sourceLineNo">484</span> regions.add(node);<a name="line.484"></a>
-<span class="sourceLineNo">485</span> }<a name="line.485"></a>
-<span class="sourceLineNo">486</span> return regions;<a name="line.486"></a>
+<span class="sourceLineNo">434</span> public final static RegionStateStampComparator REGION_STATE_STAMP_COMPARATOR =<a name="line.434"></a>
+<span class="sourceLineNo">435</span> new RegionStateStampComparator();<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span> // TODO: Replace the ConcurrentSkipListMaps<a name="line.437"></a>
+<span class="sourceLineNo">438</span> /**<a name="line.438"></a>
+<span class="sourceLineNo">439</span> * RegionName -- i.e. RegionInfo.getRegionName() -- as bytes to {@link RegionStateNode}<a name="line.439"></a>
+<span class="sourceLineNo">440</span> */<a name="line.440"></a>
+<span class="sourceLineNo">441</span> private final ConcurrentSkipListMap<byte[], RegionStateNode> regionsMap =<a name="line.441"></a>
+<span class="sourceLineNo">442</span> new ConcurrentSkipListMap<byte[], RegionStateNode>(Bytes.BYTES_COMPARATOR);<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionInTransition =<a name="line.444"></a>
+<span class="sourceLineNo">445</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>(RegionInfo.COMPARATOR);<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span> /**<a name="line.447"></a>
+<span class="sourceLineNo">448</span> * Regions marked as offline on a read of hbase:meta. Unused or at least, once<a name="line.448"></a>
+<span class="sourceLineNo">449</span> * offlined, regions have no means of coming on line again. TODO.<a name="line.449"></a>
+<span class="sourceLineNo">450</span> */<a name="line.450"></a>
+<span class="sourceLineNo">451</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionOffline =<a name="line.451"></a>
+<span class="sourceLineNo">452</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>();<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span> private final ConcurrentSkipListMap<byte[], RegionFailedOpen> regionFailedOpen =<a name="line.454"></a>
+<span class="sourceLineNo">455</span> new ConcurrentSkipListMap<byte[], RegionFailedOpen>(Bytes.BYTES_COMPARATOR);<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span> private final ConcurrentHashMap<ServerName, ServerStateNode> serverMap =<a name="line.457"></a>
+<span class="sourceLineNo">458</span> new ConcurrentHashMap<ServerName, ServerStateNode>();<a name="line.458"></a>
+<span class="sourceLineNo">459</span><a name="line.459"></a>
+<span class="sourceLineNo">460</span> public RegionStates() { }<a name="line.460"></a>
+<span class="sourceLineNo">461</span><a name="line.461"></a>
+<span class="sourceLineNo">462</span> public void clear() {<a name="line.462"></a>
+<span class="sourceLineNo">463</span> regionsMap.clear();<a name="line.463"></a>
+<span class="sourceLineNo">464</span> regionInTransition.clear();<a name="line.464"></a>
+<span class="sourceLineNo">465</span> regionOffline.clear();<a name="line.465"></a>
+<span class="sourceLineNo">466</span> serverMap.clear();<a name="line.466"></a>
+<span class="sourceLineNo">467</span> }<a name="line.467"></a>
+<span class="sourceLineNo">468</span><a name="line.468"></a>
+<span class="sourceLineNo">469</span> @VisibleForTesting<a name="line.469"></a>
+<span class="sourceLineNo">470</span> public boolean isRegionInRegionStates(final RegionInfo hri) {<a name="line.470"></a>
+<span class="sourceLineNo">471</span> return (regionsMap.containsKey(hri.getRegionName()) || regionInTransition.containsKey(hri)<a name="line.471"></a>
+<span class="sourceLineNo">472</span> || regionOffline.containsKey(hri));<a name="line.472"></a>
+<span class="sourceLineNo">473</span> }<a name="line.473"></a>
+<span class="sourceLineNo">474</span><a name="line.474"></a>
+<span class="sourceLineNo">475</span> // ==========================================================================<a name="line.475"></a>
+<span class="sourceLineNo">476</span> // RegionStateNode helpers<a name="line.476"></a>
+<span class="sourceLineNo">477</span> // ==========================================================================<a name="line.477"></a>
+<span class="sourceLineNo">478</span> protected RegionStateNode createRegionStateNode(final RegionInfo regionInfo) {<a name="line.478"></a>
+<span class="sourceLineNo">479</span> RegionStateNode newNode = new RegionStateNode(regionInfo);<a name="line.479"></a>
+<span class="sourceLineNo">480</span> RegionStateNode oldNode = regionsMap.putIfAbsent(regionInfo.getRegionName(), newNode);<a name="line.480"></a>
+<span class="sourceLineNo">481</span> return oldNode != null ? oldNode : newNode;<a name="line.481"></a>
+<span class="sourceLineNo">482</span> }<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span> protected RegionStateNode getOrCreateRegionStateNode(final RegionInfo regionInfo) {<a name="line.484"></a>
+<span class="sourceLineNo">485</span> RegionStateNode node = regionsMap.get(regionInfo.getRegionName());<a name="line.485"></a>
+<span class="sourceLineNo">486</span> return node != null ? node : createRegionStateNode(regionInfo);<a name="line.486"></a>
<span class="sourceLineNo">487</span> }<a name="line.487"></a>
<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span> ArrayList<RegionState> getTableRegionStates(final TableName tableName) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>();<a name="line.490"></a>
-<span class="sourceLineNo">491</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span> if (!node.getTable().equals(tableName)) break;<a name="line.492"></a>
-<span class="sourceLineNo">493</span> regions.add(node.toRegionState());<a name="line.493"></a>
-<span class="sourceLineNo">494</span> }<a name="line.494"></a>
-<span class="sourceLineNo">495</span> return regions;<a name="line.495"></a>
-<span class="sourceLineNo">496</span> }<a name="line.496"></a>
-<span class="sourceLineNo">497</span><a name="line.497"></a>
-<span class="sourceLineNo">498</span> ArrayList<RegionInfo> getTableRegionsInfo(final TableName tableName) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span> final ArrayList<RegionInfo> regions = new ArrayList<RegionInfo>();<a name="line.499"></a>
-<span class="sourceLineNo">500</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span> if (!node.getTable().equals(tableName)) break;<a name="line.501"></a>
-<span class="sourceLineNo">502</span> regions.add(node.getRegionInfo());<a name="line.502"></a>
+<span class="sourceLineNo">489</span> RegionStateNode getRegionStateNodeFromName(final byte[] regionName) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span> return regionsMap.get(regionName);<a name="line.490"></a>
+<span class="sourceLineNo">491</span> }<a name="line.491"></a>
+<span class="sourceLineNo">492</span><a name="line.492"></a>
+<span class="sourceLineNo">493</span> protected RegionStateNode getRegionStateNode(final RegionInfo regionInfo) {<a name="line.493"></a>
+<span class="sourceLineNo">494</span> return getRegionStateNodeFromName(regionInfo.getRegionName());<a name="line.494"></a>
+<span class="sourceLineNo">495</span> }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span> public void deleteRegion(final RegionInfo regionInfo) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span> regionsMap.remove(regionInfo.getRegionName());<a name="line.498"></a>
+<span class="sourceLineNo">499</span> // Remove from the offline regions map too if there.<a name="line.499"></a>
+<span class="sourceLineNo">500</span> if (this.regionOffline.containsKey(regionInfo)) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span> if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.501"></a>
+<span class="sourceLineNo">502</span> this.regionOffline.remove(regionInfo);<a name="line.502"></a>
<span class="sourceLineNo">503</span> }<a name="line.503"></a>
-<span class="sourceLineNo">504</span> return regions;<a name="line.504"></a>
-<span class="sourceLineNo">505</span> }<a name="line.505"></a>
-<span class="sourceLineNo">506</span><a name="line.506"></a>
-<span class="sourceLineNo">507</span> Collection<RegionStateNode> getRegionStateNodes() {<a name="line.507"></a>
-<span class="sourceLineNo">508</span> return regionsMap.values();<a name="line.508"></a>
-<span class="sourceLineNo">509</span> }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span> public ArrayList<RegionState> getRegionStates() {<a name="line.511"></a>
-<span class="sourceLineNo">512</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>(regionsMap.size());<a name="line.512"></a>
-<span class="sourceLineNo">513</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span> regions.add(node.toRegionState());<a name="line.514"></a>
-<span class="sourceLineNo">515</span> }<a name="line.515"></a>
-<span class="sourceLineNo">516</span> return regions;<a name="line.516"></a>
-<span class="sourceLineNo">517</span> }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span> // ==========================================================================<a name="line.519"></a>
-<span class="sourceLineNo">520</span> // RegionState helpers<a name="line.520"></a>
-<span class="sourceLineNo">521</span> // ==========================================================================<a name="line.521"></a>
-<span class="sourceLineNo">522</span> public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span> RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.523"></a>
-<span class="sourceLineNo">524</span> return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.524"></a>
-<span class="sourceLineNo">525</span> }<a name="line.525"></a>
-<span class="sourceLineNo">526</span><a name="line.526"></a>
-<span class="sourceLineNo">527</span> public RegionState getRegionState(final String encodedRegionName) {<a name="line.527"></a>
-<span class="sourceLineNo">528</span> // TODO: Need a map <encodedName, ...> but it is just dispatch merge...<a name="line.528"></a>
-<span class="sourceLineNo">529</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.529"></a>
-<span class="sourceLineNo">530</span> if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span> return node.toRegionState();<a name="line.531"></a>
-<span class="sourceLineNo">532</span> }<a name="line.532"></a>
-<span class="sourceLineNo">533</span> }<a name="line.533"></a>
-<span class="sourceLineNo">534</span> return null;<a name="line.534"></a>
+<span class="sourceLineNo">504</span> }<a name="line.504"></a>
+<span class="sourceLineNo">505</span><a name="line.505"></a>
+<span class="sourceLineNo">506</span> ArrayList<RegionStateNode> getTableRegionStateNodes(final TableName tableName) {<a name="line.506"></a>
+<span class="sourceLineNo">507</span> final ArrayList<RegionStateNode> regions = new ArrayList<RegionStateNode>();<a name="line.507"></a>
+<span class="sourceLineNo">508</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.508"></a>
+<span class="sourceLineNo">509</span> if (!node.getTable().equals(tableName)) break;<a name="line.509"></a>
+<span class="sourceLineNo">510</span> regions.add(node);<a name="line.510"></a>
+<span class="sourceLineNo">511</span> }<a name="line.511"></a>
+<span class="sourceLineNo">512</span> return regions;<a name="line.512"></a>
+<span class="sourceLineNo">513</span> }<a name="line.513"></a>
+<span class="sourceLineNo">514</span><a name="line.514"></a>
+<span class="sourceLineNo">515</span> ArrayList<RegionState> getTableRegionStates(final TableName tableName) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>();<a name="line.516"></a>
+<span class="sourceLineNo">517</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.517"></a>
+<span class="sourceLineNo">518</span> if (!node.getTable().equals(tableName)) break;<a name="line.518"></a>
+<span class="sourceLineNo">519</span> regions.add(node.toRegionState());<a name="line.519"></a>
+<span class="sourceLineNo">520</span> }<a name="line.520"></a>
+<span class="sourceLineNo">521</span> return regions;<a name="line.521"></a>
+<span class="sourceLineNo">522</span> }<a name="line.522"></a>
+<span class="sourceLineNo">523</span><a name="line.523"></a>
+<span class="sourceLineNo">524</span> ArrayList<RegionInfo> getTableRegionsInfo(final TableName tableName) {<a name="line.524"></a>
+<span class="sourceLineNo">525</span> final ArrayList<RegionInfo> regions = new ArrayList<RegionInfo>();<a name="line.525"></a>
+<span class="sourceLineNo">526</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span> if (!node.getTable().equals(tableName)) break;<a name="line.527"></a>
+<span class="sourceLineNo">528</span> regions.add(node.getRegionInfo());<a name="line.528"></a>
+<span class="sourceLineNo">529</span> }<a name="line.529"></a>
+<span class="sourceLineNo">530</span> return regions;<a name="line.530"></a>
+<span class="sourceLineNo">531</span> }<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span> Collection<RegionStateNode> getRegionStateNodes() {<a name="line.533"></a>
+<span class="sourceLineNo">534</span> return regionsMap.values();<a name="line.534"></a>
<span class="sourceLineNo">535</span> }<a name="line.535"></a>
<span class="sourceLineNo">536</span><a name="line.536"></a>
-<span class="sourceLineNo">537</span> // ============================================================================================<a name="line.537"></a>
-<span class="sourceLineNo">538</span> // TODO: helpers<a name="line.538"></a>
-<span class="sourceLineNo">539</span> // ============================================================================================<a name="line.539"></a>
-<span class="sourceLineNo">540</span> public boolean hasTableRegionStates(final TableName tableName) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span> // TODO<a name="line.541"></a>
-<span class="sourceLineNo">542</span> return !getTableRegionStates(tableName).isEmpty();<a name="line.542"></a>
+<span class="sourceLineNo">537</span> public ArrayList<RegionState> getRegionStates() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>(regionsMap.size());<a name="line.538"></a>
+<span class="sourceLineNo">539</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span> regions.add(node.toRegionState());<a name="line.540"></a>
+<span class="sourceLineNo">541</span> }<a name="line.541"></a>
+<span class="sourceLineNo">542</span> return regions;<a name="line.542"></a>
<span class="sourceLineNo">543</span> }<a name="line.543"></a>
<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span> /**<a name="line.545"></a>
-<span class="sourceLineNo">546</span> * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.546"></a>
-<span class="sourceLineNo">547</span> */<a name="line.547"></a>
-<span class="sourceLineNo">548</span> public List<RegionInfo> getRegionsOfTable(final TableName table) {<a name="line.548"></a>
-<span class="sourceLineNo">549</span> return getRegionsOfTable(table, false);<a name="line.549"></a>
-<span class="sourceLineNo">550</span> }<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span> /**<a name="line.552"></a>
-<span class="sourceLineNo">553</span> * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.553"></a>
-<span class="sourceLineNo">554</span> * <code>offline</code> to true. Does not include regions that are in the<a name="line.554"></a>
-<span class="sourceLineNo">555</span> * {@link State#SPLIT} state.<a name="line.555"></a>
-<span class="sourceLineNo">556</span> */<a name="line.556"></a>
-<span class="sourceLineNo">557</span> public List<RegionInfo> getRegionsOfTable(final TableName table, final boolean offline) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span> final ArrayList<RegionStateNode> nodes = getTableRegionStateNodes(table);<a name="line.558"></a>
-<span class="sourceLineNo">559</span> final ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(nodes.size());<a name="line.559"></a>
-<span class="sourceLineNo">560</span> for (RegionStateNode node: nodes) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span> if (include(node, offline)) hris.add(node.getRegionInfo());<a name="line.561"></a>
-<span class="sourceLineNo">562</span> }<a name="line.562"></a>
-<span class="sourceLineNo">563</span> return hris;<a name="line.563"></a>
-<span class="sourceLineNo">564</span> }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span> /**<a name="line.566"></a>
-<span class="sourceLineNo">567</span> * Utility. Whether to include region in list of regions. Default is to<a name="line.567"></a>
-<span class="sourceLineNo">568</span> * weed out split and offline regions.<a name="line.568"></a>
-<span class="sourceLineNo">569</span> * @return True if we should include the <code>node</code> (do not include<a name="line.569"></a>
-<span class="sourceLineNo">570</span> * if split or offline unless <code>offline</code> is set to true.<a name="line.570"></a>
-<span class="sourceLineNo">571</span> */<a name="line.571"></a>
-<span class="sourceLineNo">572</span> boolean include(final RegionStateNode node, final boolean offline) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span> if (LOG.isTraceEnabled()) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span> LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.574"></a>
-<span class="sourceLineNo">575</span> }<a name="line.575"></a>
-<span class="sourceLineNo">576</span> if (node.isInState(State.SPLIT)) return false;<a name="line.576"></a>
-<span class="sourceLineNo">577</span> if (node.isInState(State.OFFLINE) && !offline) return false;<a name="line.577"></a>
-<span class="sourceLineNo">578</span> final RegionInfo hri = node.getRegionInfo();<a name="line.578"></a>
-<span class="sourceLineNo">579</span> return (!hri.isOffline() && !hri.isSplit()) ||<a name="line.579"></a>
-<span class="sourceLineNo">580</span> ((hri.isOffline() || hri.isSplit()) && offline);<a name="line.580"></a>
-<span class="sourceLineNo">581</span> }<a name="line.581"></a>
-<span class="sourceLineNo">582</span><a name="line.582"></a>
-<span class="sourceLineNo">583</span> /**<a name="line.583"></a>
-<span class="sourceLineNo">584</span> * Returns the set of regions hosted by the specified server<a name="line.584"></a>
-<span class="sourceLineNo">585</span> * @param serverName the server we are interested in<a name="line.585"></a>
-<span class="sourceLineNo">586</span> * @return set of RegionInfo hosted by the specified server<a name="line.586"></a>
-<span class="sourceLineNo">587</span> */<a name="line.587"></a>
-<span class="sourceLineNo">588</span> public List<RegionInfo> getServerRegionInfoSet(final ServerName serverName) {<a name="line.588"></a>
-<span class="sourceLineNo">589</span> final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.589"></a>
-<span class="sourceLineNo">590</span> if (serverInfo == null) return Collections.emptyList();<a name="line.590"></a>
+<span class="sourceLineNo">545</span> // ==========================================================================<a name="line.545"></a>
+<span class="sourceLineNo">546</span> // RegionState helpers<a name="line.546"></a>
+<span class="sourceLineNo">547</span> // ==========================================================================<a name="line.547"></a>
+<span class="sourceLineNo">548</span> public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.548"></a>
+<span class="sourceLineNo">549</span> RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.549"></a>
+<span class="sourceLineNo">550</span> return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.550"></a>
+<span class="sourceLineNo">551</span> }<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span> public RegionState getRegionState(final String encodedRegionName) {<a name="line.553"></a>
+<span class="sourceLineNo">554</span> // TODO: Need a map <encodedName, ...> but it is just dispatch merge...<a name="line.554"></a>
+<span class="sourceLineNo">555</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.555"></a>
+<span class="sourceLineNo">556</span> if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span> return node.toRegionState();<a name="line.557"></a>
+<span class="sourceLineNo">558</span> }<a name="line.558"></a>
+<span class="sourceLineNo">559</span> }<a name="line.559"></a>
+<span class="sourceLineNo">560</span> return null;<a name="line.560"></a>
+<span class="sourceLineNo">561</span> }<a name="line.561"></a>
+<span class="sourceLineNo">562</span><a name="line.562"></a>
+<span class="sourceLineNo">563</span> // ============================================================================================<a name="line.563"></a>
+<span class="sourceLineNo">564</span> // TODO: helpers<a name="line.564"></a>
+<span class="sourceLineNo">565</span> // ============================================================================================<a name="line.565"></a>
+<span class="sourceLineNo">566</span> public boolean hasTableRegionStates(final TableName tableName) {<a name="line.566"></a>
+<span class="sourceLineNo">567</span> // TODO<a name="line.567"></a>
+<span class="sourceLineNo">568</span> return !getTableRegionStates(tableName).isEmpty();<a name="line.568"></a>
+<span class="sourceLineNo">569</span> }<a name="line.569"></a>
+<span class="sourceLineNo">570</span><a name="line.570"></a>
+<span class="sourceLineNo">571</span> /**<a name="line.571"></a>
+<span class="sourceLineNo">572</span> * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.572"></a>
+<span class="sourceLineNo">573</span> */<a name="line.573"></a>
+<span class="sourceLineNo">574</span> public List<RegionInfo> getRegionsOfTable(final TableName table) {<a name="line.574"></a>
+<span class="sourceLineNo">575</span> return getRegionsOfTable(table, false);<a name="line.575"></a>
+<span class="sourceLineNo">576</span> }<a name="line.576"></a>
+<span class="sourceLineNo">577</span><a name="line.577"></a>
+<span class="sourceLineNo">578</span> /**<a name="line.578"></a>
+<span class="sourceLineNo">579</span> * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.579"></a>
+<span class="sourceLineNo">580</span> * <code>offline</code> to true. Does not include regions that are in the<a name="line.580"></a>
+<span class="sourceLineNo">581</span> * {@link State#SPLIT} state.<a name="line.581"></a>
+<span class="sourceLineNo">582</span> */<a name="line.582"></a>
+<span class="sourceLineNo">583</span> public List<RegionInfo> getRegionsOfTable(final TableName table, final boolean offline) {<a name="line.583"></a>
+<span class="sourceLineNo">584</span> final ArrayList<RegionStateNode> nodes = getTableRegionStateNodes(table);<a name="line.584"></a>
+<span class="sourceLineNo">585</span> final ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(nodes.size());<a name="line.585"></a>
+<span class="sourceLineNo">586</span> for (RegionStateNode node: nodes) {<a name="line.586"></a>
+<span class="sourceLineNo">587</span> if (include(node, offline)) hris.add(node.getRegionInfo());<a name="line.587"></a>
+<span class="sourceLineNo">588</span> }<a name="line.588"></a>
+<span class="sourceLineNo">589</span> return hris;<a name="line.589"></a>
+<span class="sourceLineNo">590</span> }<a name="line.590"></a>
<span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span> synchronized (serverInfo) {<a name="line.592"></a>
-<span class="sourceLineNo">593</span> return serverInfo.getRegionInfoList();<a name="line.593"></a>
-<span class="sourceLineNo">594</span> }<a name="line.594"></a>
-<span class="sourceLineNo">595</span> }<a name="line.595"></a>
-<span class="sourceLineNo">596</span><a name="line.596"></a>
-<span class="sourceLineNo">597</span> // ============================================================================================<a name="line.597"></a>
-<span class="sourceLineNo">598</span> // TODO: split helpers<a name="line.598"></a>
-<span class="sourceLineNo">599</span> // ============================================================================================<a name="line.599"></a>
-<span class="sourceLineNo">600</span> public void logSplit(final ServerName serverName) {<a name="line.600"></a>
-<span class="sourceLineNo">601</span> final ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.601"></a>
-<span class="sourceLineNo">602</span> synchronized (serverNode) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span> serverNode.setState(ServerState.SPLITTING);<a name="line.603"></a>
-<span class="sourceLineNo">604</span> /* THIS HAS TO BE WRONG. THIS IS SPLITTING OF REGION, NOT SPLITTING WALs.<a name="line.604"></a>
-<span class="sourceLineNo">605</span> for (RegionStateNode regionNode: serverNode.getRegions()) {<a name="line.605"></a>
-<span class="sourceLineNo">606</span> synchronized (regionNode) {<a name="line.606"></a>
-<span class="sourceLineNo">607</span> // TODO: Abort procedure if present<a name="line.607"></a>
-<span class="sourceLineNo">608</span> regionNode.setState(State.SPLITTING);<a name="line.608"></a>
-<span class="sourceLineNo">609</span> }<a name="line.609"></a>
-<span class="sourceLineNo">610</span> }*/<a name="line.610"></a>
-<span class="sourceLineNo">611</span> }<a name="line.611"></a>
-<span class="sourceLineNo">612</span> }<a name="line.612"></a>
-<span class="sourceLineNo">613</span><a name="line.613"></a>
-<span class="sourceLineNo">614</span> public void logSplit(final RegionInfo regionInfo) {<a name="line.614"></a>
-<span class="sourceLineNo">615</span> final RegionStateNode regionNode = getRegionStateNode(regionInfo);<a name="line.615"></a>
-<span class="sourceLineNo">616</span> synchronized (regionNode) {<a name="line.616"></a>
-<span class="sourceLineNo">617</span> regionNode.setState(State.SPLIT);<a name="line.617"></a>
-<span class="sourceLineNo">618</span> }<a name="line.618"></a>
-<span class="sourceLineNo">619</span> }<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span> @VisibleForTesting<a name="line.621"></a>
-<span class="sourceLineNo">622</span> public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span> final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.623"></a>
-<span class="sourceLineNo">624</span> synchronized (regionNode) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span> regionNode.setState(state);<a name="line.625"></a>
-<span class="sourceLineNo">626</span> }<a name="line.626"></a>
-<span class="sourceLineNo">627</span> }<a name="line.627"></a>
-<span class="sourceLineNo">628</span><a name="line.628"></a>
-<span class="sourceLineNo">629</span> // ============================================================================================<a name="line.629"></a>
-<span class="sourceLineNo">630</span> // TODO:<a name="line.630"></a>
-<span class="sourceLineNo">631</span> // ============================================================================================<a name="line.631"></a>
-<span class="sourceLineNo">632</span> public List<RegionInfo> getAssignedRegions() {<a name="line.632"></a>
-<span class="sourceLineNo">633</span> final List<RegionInfo> result = new ArrayList<RegionInfo>();<a name="line.633"></a>
-<span class="sourceLineNo">634</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span> if (!node.isInTransition()) {<a name="line.635"></a>
-<span class="sourceLineNo">636</span> result.add(node.getRegionInfo());<a name="line.636"></a>
-<span class="sourceLineNo">637</span> }<a name="line.637"></a>
-<span class="sourceLineNo">638</span> }<a name="line.638"></a>
-<span class="sourceLineNo">639</span> return result;<a name="line.639"></a>
-<span class="sourceLineNo">640</span> }<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span> public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.643"></a>
-<span class="sourceLineNo">644</span> if (region != null) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span> synchronized (region) {<a name="line.645"></a>
-<span class="sourceLineNo">646</span> return region.isInState(state);<a name="line.646"></a>
-<span class="sourceLineNo">647</span> }<a name="line.647"></a>
-<span class="sourceLineNo">648</span> }<a name="line.648"></a>
-<span class="sourceLineNo">649</span> return false;<a name="line.649"></a>
-<span class="sourceLineNo">650</span> }<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span> public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span> return isRegionInState(regionInfo, State.OPEN);<a name="line.653"></a>
+<span class="sourceLineNo">592</span> /**<a name="line.592"></a>
+<span class="sourceLineNo">593</span> * Utility. Whether to include region in list of regions. Default is to<a name="line.593"></a>
+<span class="sourceLineNo">594</span> * weed out split and offline regions.<a name="line.594"></a>
+<span class="sourceLineNo">595</span> * @return True if we should include the <code>node</code> (do not include<a name="line.595"></a>
+<span class="sourceLineNo">596</span> * if split or offline unless <code>offline</code> is set to true.<a name="line.596"></a>
+<span class="sourceLineNo">597</span> */<a name="line.597"></a>
+<span class="sourceLineNo">598</span> boolean include(final RegionStateNode node, final boolean offline) {<a name="line.598"></a>
+<span class="sourceLineNo">599</span> if (LOG.isTraceEnabled()) {<a name="line.599"></a>
+<span class="sourceLineNo">600</span> LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.600"></a>
+<span class="sourceLineNo">601</span> }<a name="line.601"></a>
+<span class="sourceLineNo">602</span> if (node.isInState(State.SPLIT)) return false;<a name="line.602"></a>
+<span class="sourceLineNo">603</span> if (node.isInState(State.OFFLINE) && !offline) return false;<a name="line.603"></a>
+<span class="sourceLineNo">604</span> final RegionInfo hri = node.getRegionInfo();<a name="line.604"></a>
+<span class="sourceLineNo">605</span> return (!hri.isOffline() && !hri.isSplit()) ||<a name="line.605"></a>
+<span class="sourceLineNo">606</span> ((hri.isOffline() || hri.isSplit()) && offline);<a name="line.606"></a>
+<span class="sourceLineNo">607</span> }<a name="line.607"></a>
+<span class="sourceLineNo">608</span><a name="line.608"></a>
+<span class="sourceLineNo">609</span> /**<a name="line.609"></a>
+<span class="sourceLineNo">610</span> * Returns the set of regions hosted by the specified server<a name="line.610"></a>
+<span class="sourceLineNo">611</span> * @param serverName the server we are interested in<a name="line.611"></a>
+<span class="sourceLineNo">612</span> * @return set of RegionInfo hosted by the specified server<a name="line.612"></a>
+<span class="sourceLineNo">613</span> */<a name="line.613"></a>
+<span class="sourceLineNo">614</span> public List<RegionInfo> getServerRegionInfoSet(final ServerName serverName) {<a name="line.614"></a>
+<span class="sourceLineNo">615</span> final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.615"></a>
+<span class="sourceLineNo">616</span> if (serverInfo == null) return Collections.emptyList();<a name="line.616"></a>
+<span class="sourceLineNo">617</span><a name="line.617"></a>
+<span class="sourceLineNo">618</span> synchronized (serverInfo) {<a name="line.618"></a>
+<span class="sourceLineNo">619</span> return serverInfo.getRegionInfoList();<a name="line.619"></a>
+<span class="sourceLineNo">620</span> }<a name="line.620"></a>
+<span class="sourceLineNo">621</span> }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span> // ============================================================================================<a name="line.623"></a>
+<span class="sourceLineNo">624</span> // TODO: split helpers<a name="line.624"></a>
+<span class="sourceLineNo">625</span> // ============================================================================================<a name="line.625"></a>
+<span class="sourceLineNo">626</span><a name="line.626"></a>
+<span class="sourceLineNo">627</span> /**<a name="line.627"></a>
+<span class="sourceLineNo">628</span> * Call this when we start log splitting a crashed Server.<a name="line.628"></a>
+<span class="sourceLineNo">629</span> * @see #logSplit(ServerName)<a name="line.629"></a>
+<span class="sourceLineNo">630</span> */<a name="line.630"></a>
+<span class="sourceLineNo">631</span> public void logSplitting(final ServerName serverName) {<a name="line.631"></a>
+<span class="sourceLineNo">632</span> final ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.632"></a>
+<span class="sourceLineNo">633</span> synchronized (serverNode) {<a name="line.633"></a>
+<span class="sourceLineNo">634</span> serverNode.setState(ServerState.SPLITTING);<a name="line.634"></a>
+<span class="sourceLineNo">635</span> }<a name="line.635"></a>
+<span class="sourceLineNo">636</span> }<a name="line.636"></a>
+<span class="sourceLineNo">637</span><a name="line.637"></a>
+<span class="sourceLineNo">638</span> /**<a name="line.638"></a>
+<span class="sourceLineNo">639</span> * Called after we've split all logs on a crashed Server.<a name="line.639"></a>
+<span class="sourceLineNo">640</span> * @see #logSplitting(ServerName)<a name="line.640"></a>
+<span class="sourceLineNo">641</span> */<a name="line.641"></a>
+<span class="sourceLineNo">642</span> public void logSplit(final ServerName serverName) {<a name="line.642"></a>
+<span class="sourceLineNo">643</span> final ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.643"></a>
+<span class="sourceLineNo">644</span> synchronized (serverNode) {<a name="line.644"></a>
+<span class="sourceLineNo">645</span> serverNode.setState(ServerState.OFFLINE);<a name="line.645"></a>
+<span class="sourceLineNo">646</span> }<a name="line.646"></a>
+<span class="sourceLineNo">647</span> }<a name="line.647"></a>
+<span class="sourceLineNo">648</span><a name="line.648"></a>
+<span class="sourceLineNo">649</span> public void logSplit(final RegionInfo regionInfo) {<a name="line.649"></a>
+<span class="sourceLineNo">650</span> final RegionStateNode regionNode = getRegionStateNode(regionInfo);<a name="line.650"></a>
+<span class="sourceLineNo">651</span> synchronized (regionNode) {<a name="line.651"></a>
+<span class="sourceLineNo">652</span> regionNode.setState(State.SPLIT);<a name="line.652"></a>
+<span class="sourceLineNo">653</span> }<a name="line.653"></a>
<span class="sourceLineNo">654</span> }<a name="line.654"></a>
<span class="sourceLineNo">655</span><a name="line.655"></a>
-<span class="sourceLineNo">656</span> /**<a name="line.656"></a>
-<span class="sourceLineNo">657</span> * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.657"></a>
-<span class="sourceLineNo">658</span> */<a name="line.658"></a>
-<span class="sourceLineNo">659</span> public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.659"></a>
-<span class="sourceLineNo">660</span> return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.660"></a>
-<span class="sourceLineNo">661</span> }<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span> public Map<ServerName, List<RegionInfo>> getSnapShotOfAssignment(<a name="line.663"></a>
-<span class="sourceLineNo">664</span> final Collection<RegionInfo> regions) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span> final Map<ServerName, List<RegionInfo>> result = new HashMap<ServerName, List<RegionInfo>>();<a name="line.665"></a>
-<span class="sourceLineNo">666</span> for (RegionInfo hri: regions) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span> final RegionStateNode node = getRegionStateNode(hri);<a name="line.667"></a>
-<span class="sourceLineNo">668</span> if (node == null) continue;<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span> // TODO: State.OPEN<a name="line.670"></a>
-<span class="sourceLineNo">671</span> final ServerName serverName = node.getRegionLocation();<a name="line.671"></a>
-<span class="sourceLineNo">672</span> if (serverName == null) continue;<a name="line.672"></a>
-<span class="sourceLineNo">673</span><a name="line.673"></a>
-<span class="sourceLineNo">674</span> List<RegionInfo> serverRegions = result.get(serverName);<a name="line.674"></a>
-<span class="sourceLineNo">675</span> if (serverRegions == null) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span> serverRegions = new ArrayList<RegionInfo>();<a name="line.676"></a>
-<span class="sourceLineNo">677</span> result.put(serverName, serverRegions);<a name="line.677"></a>
-<span class="sourceLineNo">678</span> }<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span> serverRegions.add(node.getRegionInfo());<a name="line.680"></a>
-<span class="sourceLineNo">681</span> }<a name="line.681"></a>
-<span class="sourceLineNo">682</span> return result;<a name="line.682"></a>
-<span class="sourceLineNo">683</span> }<a name="line.683"></a>
-<span class="sourceLineNo">684</span><a name="line.684"></a>
-<span class="sourceLineNo">685</span> public Map<RegionInfo, ServerName> getRegionAssignments() {<a name="line.685"></a>
-<span class="sourceLineNo">686</span> final HashMap<RegionInfo, ServerName> assignments = new HashMap<RegionInfo, ServerName>();<a name="line.686"></a>
-<span class="sourceLineNo">687</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.687"></a>
-<span class="sourceLineNo">688</span> assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.688"></a>
-<span class="sourceLineNo">689</span> }<a name="line.689"></a>
-<span class="sourceLineNo">690</span> return assignments;<a name="line.690"></a>
-<span class="sourceLineNo">691</span> }<a name="line.691"></a>
-<span class="sourceLineNo">692</span><a name="line.692"></a>
-<span class="sourceLineNo">693</span> public Map<RegionState.State, List<RegionInfo>> getRegionByStateOfTable(TableName tableName) {<a name="line.693"></a>
-<span class="sourceLineNo">694</span> final State[] states = State.values();<a name="line.694"></a>
-<span class="sourceLineNo">695</span> final Map<RegionState.State, List<RegionInfo>> tableRegions =<a name="line.695"></a>
-<span class="sourceLineNo">696</span> new HashMap<State, List<RegionInfo>>(states.length);<a name="line.696"></a>
-<span class="sourceLineNo">697</span> for (int i = 0; i < states.length; ++i) {<a name="line.697"></a>
-<span class="sourceLineNo">698</span> tableRegions.put(states[i], new ArrayList<RegionInfo>());<a name="line.698"></a>
-<span class="sourceLineNo">699</span> }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span> if (node.getTable().equals(tableName)) {<a name="line.702"></a>
-<span class="sourceLineNo">703</span> tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.703"></a>
-<span class="sourceLineNo">704</span> }<a name="line.704"></a>
-<span class="sourceLineNo">705</span> }<a name="line.705"></a>
-<span class="sourceLineNo">706</span> return tableRegions;<a name="line.706"></a>
-<span class="sourceLineNo">707</span> }<a name="line.707"></a>
+<span class="sourceLineNo">656</span> @VisibleForTesting<a name="line.656"></a>
+<span class="sourceLineNo">657</span> public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.657"></a>
+<span class="sourceLineNo">658</span> final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.658"></a>
+<span class="sourceLineNo">659</span> synchronized (regionNode) {<a name="line.659"></a>
+<span class="sourceLineNo">660</span> regionNode.setState(state);<a name="line.660"></a>
+<span class="sourceLineNo">661</span> }<a name="line.661"></a>
+<span class="sourceLineNo">662</span> }<a name="line.662"></a>
+<span class="sourceLineNo">663</span><a name="line.663"></a>
+<span class="sourceLineNo">664</span> // ============================================================================================<a name="line.664"></a>
+<span class="sourceLineNo">665</span> // TODO:<a name="line.665"></a>
+<span class="sourceLineNo">666</span> // ============================================================================================<a name="line.666"></a>
+<span class="sourceLineNo">667</span> public List<RegionInfo> getAssignedRegions() {<a name="line.667"></a>
+<span class="sourceLineNo">668</span> final List<RegionInfo> result = new ArrayList<RegionInfo>();<a name="line.668"></a>
+<span class="sourceLineNo">669</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.669"></a>
+<span class="sourceLineNo">670</span> if (!node.isInTransition()) {<a name="line.670"></a>
+<span class="sourceLineNo">671</span> result.add(node.getRegionInfo());<a name="line.671"></a>
+<span class="sourceLineNo">672</span> }<a name="line.672"></a>
+<span class="sourceLineNo">673</span> }<a name="line.673"></a>
+<span class="sourceLineNo">674</span> return result;<a name="line.674"></a>
+<span class="sourceLineNo">675</span> }<a name="line.675"></a>
+<span class="sourceLineNo">676</span><a name="line.676"></a>
+<span class="sourceLineNo">677</span> public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.677"></a>
+<span class="sourceLineNo">678</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.678"></a>
+<span class="sourceLineNo">679</span> if (region != null) {<a name="line.679"></a>
+<span class="sourceLineNo">680</span> synchronized (region) {<a name="line.680"></a>
+<span class="sourceLineNo">681</span> return region.isInState(state);<a name="line.681"></a>
+<span class="sourceLineNo">682</span> }<a name="line.682"></a>
+<span class="sourceLineNo">683</span> }<a name="line.683"></a>
+<span class="sourceLineNo">684</span> return false;<a name="line.684"></a>
+<span class="sourceLineNo">685</span> }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span> public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.687"></a>
+<span class="sourceLineNo">688</span> return isRegionInState(regionInfo, State.OPEN);<a name="line.688"></a>
+<span class="sourceLineNo">689</span> }<a name="line.689"></a>
+<span class="sourceLineNo">690</span><a name="line.690"></a>
+<span class="sourceLineNo">691</span> /**<a name="line.691"></a>
+<span class="sourceLineNo">692</span> * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.692"></a>
+<span class="sourceLineNo">693</span> */<a name="line.693"></a>
+<span class="sourceLineNo">694</span> public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.694"></a>
+<span class="sourceLineNo">695</span> return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.695"></a>
+<span class="sourceLineNo">696</span> }<a name="line.696"></a>
+<span class="sourceLineNo">697</span><a name="line.697"></a>
+<span class="sourceLineNo">698</span> public Map<ServerName, List<RegionInfo>> getSnapShotOfAssignment(<a name="line.698"></a>
+<span class="sourceLineNo">699</span> final Collection<RegionInfo> regions) {<a name="line.699"></a>
+<span class="sourceLineNo">700</span> final Map<ServerName, List<RegionInfo>> result = new HashMap<ServerName, List<RegionInfo>>();<a name="line.700"></a>
+<span class="sourceLineNo">701</span> for (RegionInfo hri: regions) {<a name="line.701"></a>
+<span class="sourceLineNo">702</span> final RegionStateNode node = getRegionStateNode(hri);<a name="line.702"></a>
+<span class="sourceLineNo">703</span> if (node == null) continue;<a name="line.703"></a>
+<span class="sourceLineNo">704</span><a name="line.704"></a>
+<span class="sourceLineNo">705</span> // TODO: State.OPEN<a name="line.705"></a>
+<span class="sourceLineNo">706</span> final ServerName serverName = node.getRegionLocation();<a name="line.706"></a>
+<span class="sourceLineNo">707</span> if (serverName == null) continue;<a name="line.707"></a>
<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span> public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.709"></a>
-<span class="sourceLineNo">710</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.710"></a>
-<span class="sourceLineNo">711</span> if (region != null) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span> synchronized (region) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span> ServerName server = region.getRegionLocation();<a name="line.713"></a>
-<span class="sourceLineNo">714</span> return server != null ? server : region.getLastHost();<a name="line.714"></a>
-<span class="sourceLineNo">715</span> }<a name="line.715"></a>
+<span class="sourceLineNo">709</span> List<RegionInfo> serverRegions = result.get(serverName);<a name="line.709"></a>
+<span class="sourceLineNo">710</span> if (serverRegions == null) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span> serverRegions = new ArrayList<RegionInfo>();<a name="line.711"></a>
+<span class="sourceLineNo">712</span> result.put(serverName, serverRegions);<a name="line.712"></a>
+<span class="sourceLineNo">713</span> }<a name="line.713"></a>
+<span class="sourceLineNo">714</span><a name="line.714"></a>
+<span class="sourceLineNo">715</span> serverRegions.add(node.getRegionInfo());<a name="line.715"></a>
<span class="sourceLineNo">716</span> }<a name="line.716"></a>
-<span class="sourceLineNo">717</span> return null;<a name="line.717"></a>
+<span class="sourceLineNo">717</span> return result;<a name="line.717"></a>
<span class="sourceLineNo">718</span> }<a name="line.718"></a>
<span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span> /**<a name="line.720"></a>
-<span class="sourceLineNo">721</span> * This is an EXPENSIVE clone. Cloning though is the safest thing to do.<a name="line.721"></a>
-<span class="sourceLineNo">722</span> * Can't let out original since it can change and at least the load balancer<a name="line.722"></a>
-<span class="sourceLineNo">723</span> * wants to iterate this exported list. We need to synchronize on regions<a name="line.723"></a>
-<span class="sourceLineNo">724</span> * since all access to this.servers is under a lock on this.regions.<a name="line.724"></a>
-<span class="sourceLineNo">725</span> * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.725"></a>
-<span class="sourceLineNo">726</span> * @return A clone of current assignments by table.<a name="line.726"></a>
-<span class="sourceLineNo">727</span> */<a name="line.727"></a>
-<span class="sourceLineNo">728</span> public Map<TableName, Map<ServerName, List<RegionInfo>>> getAssignmentsByTable(<a name="line.728"></a>
-<span class="sourceLineNo">729</span> final boolean forceByCluster) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span> if (!forceByCluster) return getAssignmentsByTable();<a name="line.730"></a>
-<span class="sourceLineNo">731</span><a name="line.731"></a>
-<span class="sourceLineNo">732</span> final HashMap<ServerName, List<RegionInfo>> ensemble =<a name="line.732"></a>
-<span class="sourceLineNo">733</span> new HashMap<ServerName, List<RegionInfo>>(serverMap.size());<a name="line.733"></a>
-<span class="sourceLineNo">734</span> for (ServerStateNode serverNode: serverMap.values()) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span> ensemble.put(serverNode.getServerName(), serverNode.getRegionInfoList());<a name="line.735"></a>
-<span class="sourceLineNo">736</span> }<a name="line.736"></a>
-<span class="sourceLineNo">737</span><a name="line.737"></a>
-<span class="sourceLineNo">738</span> // TODO: can we use Collections.singletonMap(HConstants.ENSEMBLE_TABLE_NAME, ensemble)?<a name="line.738"></a>
-<span class="sourceLineNo">739</span> final Map<TableName, Map<ServerName, List<RegionInfo>>> result =<a name="line.739"></a>
-<span class="sourceLineNo">740</span> new HashMap<TableName, Map<ServerName, List<RegionInfo>>>(1);<a name="line.740"></a>
-<span class="sourceLineNo">741</span> result.put(HConstants.ENSEMBLE_TABLE_NAME, ensemble);<a name="line.741"></a>
-<span class="sourceLineNo">742</span> return result;<a name="line.742"></a>
-<span class="sourceLineNo">743</span> }<a name="line.743"></a>
-<span class="sourceLineNo">744</span><a name="line.744"></a>
-<span class="sourceLineNo">745</span> public Map<TableName, Map<ServerName, List<RegionInfo>>> getAssignmentsByTable() {<a name="line.745"></a>
-<span class="sourceLineNo">746</span> final Map<TableName, Map<ServerName, List<RegionInfo>>> result = new HashMap<>();<a name="line.746"></a>
-<span class="sourceLineNo">747</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span> Map<ServerName, List<RegionInfo>> tableResult = result.get(node.getTable());<a name="line.748"></a>
-<span class="sourceLineNo">749</span> if (tableResult == null) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span> tableResult = new HashMap<ServerName, List<RegionInfo>>();<a name="line.750"></a>
-<span class="sourceLineNo">751</span> result.put(node.getTable(), tableResult);<a name="line.751"></a>
-<span class="sourceLineNo">752</span> }<a name="line.752"></a>
-<span class="sourceLineNo">753</span><a name="line.753"></a>
-<span class="sourceLineNo">754</span> final ServerName serverName = node.getRegionLocation();<a name="line.754"></a>
-<span class="sourceLineNo">755</span> if (serverName == null) {<a name="line.755"></a>
-<span class="sourceLineNo">756</span> LOG.info("Skipping, no server for " + node);<a name="line.756"></a>
-<span class="sourceLineNo">757</span> continue;<a name="line.757"></a>
-<span class="sourceLineNo">758</span> }<a name="line.758"></a>
-<span class="sourceLineNo">759</span> List<RegionInfo> serverResult = tableResult.get(serverName);<a name="line.759"></a>
-<span class="sourceLineNo">760</span> if (serverResult == null) {<a name="line.760"></a>
-<span class="sourceLineNo">761</span> serverResult = new ArrayList<RegionInfo>();<a name="line.761"></a>
-<span class="sourceLineNo">762</span> tableResult.put(serverName, serverResult);<a name="line.762"></a>
-<span class="sourceLineNo">763</span> }<a name="line.763"></a>
-<span class="sourceLineNo">764</span><a name="line.764"></a>
-<span class="sourceLineNo">765</span> serverResult.add(node.getRegionInfo());<a name="line.765"></a>
-<span class="sourceLineNo">766</span> }<a name="line.766"></a>
-<span class="sourceLineNo">767</span> // Add online servers with no assignment for the table.<a name="line.767"></a>
-<span class="sourceLineNo">768</span> for (Map<ServerName, List<RegionInfo>> table: result.values()) {<a name="line.768"></a>
-<span class="sourceLineNo">769</span> for (ServerName svr : serverMap.keySet()) {<a name="line.769"></a>
-<span class="sourceLineNo">770</span> if (!table.containsKey(svr)) {<a name="line.770"></a>
-<span class="sourceLineNo">771</span> table.put(svr, new ArrayList<RegionInfo>());<a name="line.771"></a>
-<span class="sourceLineNo">772</span> }<a name="line.772"></a>
-<span class="sourceLineNo">773</span> }<a name="line.773"></a>
-<span class="sourceLineNo">774</span> }<a name="line.774"></a>
-<span class="sourceLineNo">775</span> return result;<a name="line.775"></a>
-<span class="sourceLineNo">776</span> }<a name="line.776"></a>
-<span class="sourceLineNo">777</span><a name="line.777"></a>
-<span class="sourceLineNo">778</span> // ==========================================================================<a name="line.778"></a>
-<span class="sourceLineNo">779</span> // Region in transition helpers<a name="line.779"></a>
-<span class="sourceLineNo">780</span> // ==========================================================================<a name="line.780"></a>
-<span class="sourceLineNo">781</span> protected boolean addRegionInTransition(final RegionStateNode regionNode,<a name="line.781"></a>
-<span class="sourceLineNo">782</span> final RegionTransitionProcedure procedure) {<a name="line.782"></a>
-<span class="sourceLineNo">783</span> if (procedure != null && !regionNode.setProcedure(procedure)) return false;<a name="line.783"></a>
-<span class="sourceLineNo">784</span><a name="line.784"></a>
-<span class="sourceLineNo">785</span> regionInTransition.put(regionNode.getRegionInfo(), regionNode);<a name="line.785"></a>
-<span class="sourceLineNo">786</span> return true;<a name="line.786"></a>
-<span class="sourceLineNo">787</span> }<a name="line.787"></a>
+<span class="sourceLineNo">720</span> public Map<RegionInfo, ServerName> getRegionAssignments() {<a name="line.720"></a>
+<span class="sourceLineNo">721</span> final HashMap<RegionInfo, ServerName> assignments = new HashMap<RegionInfo, ServerName>();<a name="line.721"></a>
+<span class="sourceLineNo">722</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span> assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.723"></a>
+<span class="sourceLineNo">724</span> }<a name="line.724"></a>
+<span class="sourceLineNo">725</span> return assignments;<a name="line.725"></a>
+<span class="sourceLineNo">726</span> }<a name="line.726"></a>
+<span class="sourceLineNo">727</span><a name="line.727"></a>
+<span class="sourceLineNo">728</span> public Map<RegionState.State, List<RegionInfo>> getRegionByStateOfTable(TableName tableName) {<a name="line.728"></a>
+<span class="sourceLineNo">729</span> final State[] states = State.values();<a name="line.729"></a>
+<span class="sourceLineNo">730</span> final Map<RegionState.State, List<RegionInfo>> tableRegions =<a name="line.730"></a>
+<span class="sourceLineNo">731</span> new HashMap<State, List<RegionInfo>>(states.length);<a name="line.731"></a>
+<span class="sourceLineNo">732</span> for (int i = 0; i < states.length; ++i) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span> tableRegions.put(states[i], new ArrayList<RegionInfo>());<a name="line.733"></a>
+<span class="sourceLineNo">734</span> }<a name="line.734"></a>
+<span class="sourceLineNo">735</span><a name="line.735"></a>
+<span class="sourceLineNo">736</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.736"></a>
+<span class="sourceLineNo">737</span> if (node.getTable().equals(tableName)) {<a name="line.737"></a>
+<span class="sourceLineNo">738</span> tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.738"></a>
+<span class="sourceLineNo">739</span> }<a name="line.739"></a>
+<span class="sourceLineNo">740</span> }<a name="line.740"></a>
+<span class="sourceLineNo">741</span> return tableRegions;<a name="line.741"></a>
+<span class="sourceLineNo">742</span> }<a name="line.742"></a>
+<span class="sourceLineNo">743</span><a name="line.743"></a>
+<span class="sourceLineNo">744</span> public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.744"></a>
+<span class="sourceLineNo">745</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.745"></a>
+<span class="sourceLineNo">746</span> if (region != null) {<a name="line.746"></a>
+<span class="sourceLineNo">747</span> synchronized (region) {<a name="line.747"></a>
+<span class="sourceLineNo">748</span> ServerName server = region.getRegionLocation();<a name="line.748"></a>
+<span class="sourceLineNo">749</span> return server != null ? server : region.getLastHost();<a name="line.749"></a>
+<span class="sourceLineNo">750</span> }<a name="line.750"></a>
+<span class="sourceLineNo">751</span> }<a name="line.751"></a>
+<span class="sourceLineNo">752</span> return null;<a name="line.752"></a>
+<span class="sourceLineNo">753</span> }<a name="line.753"></a>
+<span class="sourceLineNo">754</span><a name="line.754"></a>
+<span class="sourceLineNo">755</span> /**<a name="line.755"></a>
+<span class="sourceLineNo">756</span> * This is an EXPENSIVE clone. Cloning though is the safest thing to do.<a name="line.756"></a>
+<span class="sourceLineNo">757</span> * Can't let out original since it can change and at least the load balancer<a name="line.757"></a>
+<span class="sourceLineNo">758</span> * wants to iterate this exported list. We need to synchronize on regions<a name="line.758"></a>
+<span class="sourceLineNo">759</span> * since all access to this.servers is under a lock on this.regions.<a name="line.759"></a>
+<span class="sourceLineNo">760</span> * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.760"></a>
+<span class="sourceLineNo">761</span> * @return A clone of current assignments by table.<a name="line.761"></a>
+<span class="sourceLineNo">762</span> */<a name="line.762"></a>
+<span class="sourceLineNo">763</span> public Map<TableName, Map<ServerName, List<RegionInfo>>> getAssignmentsByTable(<a name="line.763"></a>
+<span class="sourceLineNo">764</span> final boolean forceByCluster) {<a name="line.764"></a>
+<span class="sourceLi
<TRUNCATED>
[26/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html
index 275ca84..b9a30c4 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html
@@ -1499,782 +1499,786 @@
<span class="sourceLineNo">1491</span> final RpcController controller,<a name="line.1491"></a>
<span class="sourceLineNo">1492</span> final IsInMaintenanceModeRequest request) throws ServiceException {<a name="line.1492"></a>
<span class="sourceLineNo">1493</span> IsInMaintenanceModeResponse.Builder response = IsInMaintenanceModeResponse.newBuilder();<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span> response.setInMaintenanceMode(master.isInMaintenanceMode());<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span> return response.build();<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span> }<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span><a name="line.1497"></a>
-<span class="sourceLineNo">1498</span> @Override<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span> public UnassignRegionResponse unassignRegion(RpcController controller,<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span> UnassignRegionRequest req) throws ServiceException {<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span> try {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span> final byte [] regionName = req.getRegion().getValue().toByteArray();<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span> RegionSpecifierType type = req.getRegion().getType();<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span> final boolean force = req.getForce();<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span> UnassignRegionResponse urr = UnassignRegionResponse.newBuilder().build();<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span><a name="line.1506"></a>
-<span class="sourceLineNo">1507</span> master.checkInitialized();<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span> if (type != RegionSpecifierType.REGION_NAME) {<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span> LOG.warn("unassignRegion specifier type: expected: " + RegionSpecifierType.REGION_NAME<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span> + " actual: " + type);<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span> }<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span> Pair<RegionInfo, ServerName> pair =<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span> MetaTableAccessor.getRegion(master.getConnection(), regionName);<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span> if (Bytes.equals(RegionInfoBuilder.FIRST_META_REGIONINFO.getRegionName(),regionName)) {<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span> pair = new Pair<>(RegionInfoBuilder.FIRST_META_REGIONINFO,<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span> master.getMetaTableLocator().getMetaRegionLocation(master.getZooKeeper()));<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span> }<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span> if (pair == null) {<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span> throw new UnknownRegionException(Bytes.toString(regionName));<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span> }<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span><a name="line.1521"></a>
-<span class="sourceLineNo">1522</span> RegionInfo hri = pair.getFirst();<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span> if (master.cpHost != null) {<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span> master.cpHost.preUnassign(hri, force);<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span> }<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span> LOG.debug(master.getClientIdAuditPrefix() + " unassign " + hri.getRegionNameAsString()<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span> + " in current location if it is online and reassign.force=" + force);<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span> master.getAssignmentManager().unassign(hri);<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span> if (master.cpHost != null) {<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span> master.cpHost.postUnassign(hri, force);<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span> }<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span><a name="line.1532"></a>
-<span class="sourceLineNo">1533</span> return urr;<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span> } catch (IOException ioe) {<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span> throw new ServiceException(ioe);<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span> }<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span> }<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span> @Override<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span> public ReportRegionStateTransitionResponse reportRegionStateTransition(RpcController c,<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span> ReportRegionStateTransitionRequest req) throws ServiceException {<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span> try {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span> master.checkServiceStarted();<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span> return master.getAssignmentManager().reportRegionStateTransition(req);<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span> } catch (IOException ioe) {<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span> throw new ServiceException(ioe);<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span> }<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span> }<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span><a name="line.1549"></a>
-<span class="sourceLineNo">1550</span> @Override<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span> public SetQuotaResponse setQuota(RpcController c, SetQuotaRequest req)<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span> throws ServiceException {<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span> try {<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span> master.checkInitialized();<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span> return master.getMasterQuotaManager().setQuota(req);<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span> } catch (Exception e) {<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span> throw new ServiceException(e);<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span> }<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span> }<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span><a name="line.1560"></a>
-<span class="sourceLineNo">1561</span> @Override<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span> public MajorCompactionTimestampResponse getLastMajorCompactionTimestamp(RpcController controller,<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span> MajorCompactionTimestampRequest request) throws ServiceException {<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span> MajorCompactionTimestampResponse.Builder response =<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span> MajorCompactionTimestampResponse.newBuilder();<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span> try {<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span> master.checkInitialized();<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span> response.setCompactionTimestamp(master.getLastMajorCompactionTimestamp(ProtobufUtil<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span> .toTableName(request.getTableName())));<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span> } catch (IOException e) {<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span> throw new ServiceException(e);<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span> }<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span> return response.build();<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span> }<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span><a name="line.1575"></a>
-<span class="sourceLineNo">1576</span> @Override<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span> public MajorCompactionTimestampResponse getLastMajorCompactionTimestampForRegion(<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span> RpcController controller, MajorCompactionTimestampForRegionRequest request)<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span> throws ServiceException {<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span> MajorCompactionTimestampResponse.Builder response =<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span> MajorCompactionTimestampResponse.newBuilder();<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span> try {<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span> master.checkInitialized();<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span> response.setCompactionTimestamp(master.getLastMajorCompactionTimestampForRegion(request<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span> .getRegion().getValue().toByteArray()));<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span> } catch (IOException e) {<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span> throw new ServiceException(e);<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span> }<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span> return response.build();<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span> }<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span><a name="line.1591"></a>
-<span class="sourceLineNo">1592</span> /**<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span> * Compact a region on the master.<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span> *<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span> * @param controller the RPC controller<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span> * @param request the request<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span> * @throws ServiceException<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span> */<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span> @Override<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span> @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span> public CompactRegionResponse compactRegion(final RpcController controller,<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span> final CompactRegionRequest request) throws ServiceException {<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span> try {<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span> master.checkInitialized();<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span> byte[] regionName = request.getRegion().getValue().toByteArray();<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span> TableName tableName = RegionInfo.getTable(regionName);<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span> // if the region is a mob region, do the mob file compaction.<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span> if (MobUtils.isMobRegionName(tableName, regionName)) {<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span> checkHFileFormatVersionForMob();<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span> return compactMob(request, tableName);<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span> } else {<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span> return super.compactRegion(controller, request);<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span> }<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span> } catch (IOException ie) {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span> throw new ServiceException(ie);<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span> }<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span> }<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span><a name="line.1618"></a>
-<span class="sourceLineNo">1619</span> /**<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span> * check configured hfile format version before to do compaction<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span> * @throws IOException throw IOException<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span> */<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span> private void checkHFileFormatVersionForMob() throws IOException {<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span> if (HFile.getFormatVersion(master.getConfiguration()) < HFile.MIN_FORMAT_VERSION_WITH_TAGS) {<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span> LOG.error("A minimum HFile version of " + HFile.MIN_FORMAT_VERSION_WITH_TAGS<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span> + " is required for MOB compaction. Compaction will not run.");<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span> throw new IOException("A minimum HFile version of " + HFile.MIN_FORMAT_VERSION_WITH_TAGS<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span> + " is required for MOB feature. Consider setting " + HFile.FORMAT_VERSION_KEY<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span> + " accordingly.");<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span> }<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span> }<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span><a name="line.1632"></a>
-<span class="sourceLineNo">1633</span> @Override<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span> @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span> public GetRegionInfoResponse getRegionInfo(final RpcController controller,<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span> final GetRegionInfoRequest request) throws ServiceException {<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span> byte[] regionName = request.getRegion().getValue().toByteArray();<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span> TableName tableName = RegionInfo.getTable(regionName);<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span> if (MobUtils.isMobRegionName(tableName, regionName)) {<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span> // a dummy region info contains the compaction state.<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span> RegionInfo mobRegionInfo = MobUtils.getMobRegionInfo(tableName);<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span> GetRegionInfoResponse.Builder builder = GetRegionInfoResponse.newBuilder();<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span> builder.setRegionInfo(ProtobufUtil.toRegionInfo(mobRegionInfo));<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span> if (request.hasCompactionState() && request.getCompactionState()) {<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span> builder.setCompactionState(master.getMobCompactionState(tableName));<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span> }<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span> return builder.build();<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span> } else {<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span> return super.getRegionInfo(controller, request);<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span> }<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span> }<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span><a name="line.1652"></a>
-<span class="sourceLineNo">1653</span> /**<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span> * Compacts the mob files in the current table.<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span> * @param request the request.<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span> * @param tableName the current table name.<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span> * @return The response of the mob file compaction.<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span> * @throws IOException<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span> */<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span> private CompactRegionResponse compactMob(final CompactRegionRequest request,<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span> TableName tableName) throws IOException {<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span> if (!master.getTableStateManager().isTableState(tableName, TableState.State.ENABLED)) {<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span> throw new DoNotRetryIOException("Table " + tableName + " is not enabled");<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span> }<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span> boolean allFiles = false;<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span> List<ColumnFamilyDescriptor> compactedColumns = new ArrayList<>();<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span> ColumnFamilyDescriptor[] hcds = master.getTableDescriptors().get(tableName).getColumnFamilies();<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span> byte[] family = null;<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span> if (request.hasFamily()) {<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span> family = request.getFamily().toByteArray();<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span> for (ColumnFamilyDescriptor hcd : hcds) {<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span> if (Bytes.equals(family, hcd.getName())) {<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span> if (!hcd.isMobEnabled()) {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span> LOG.error("Column family " + hcd.getNameAsString() + " is not a mob column family");<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span> throw new DoNotRetryIOException("Column family " + hcd.getNameAsString()<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span> + " is not a mob column family");<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span> }<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span> compactedColumns.add(hcd);<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span> }<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span> }<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span> } else {<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span> for (ColumnFamilyDescriptor hcd : hcds) {<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span> if (hcd.isMobEnabled()) {<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span> compactedColumns.add(hcd);<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span> }<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span> }<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span> }<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span> if (compactedColumns.isEmpty()) {<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span> LOG.error("No mob column families are assigned in the mob compaction");<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span> throw new DoNotRetryIOException(<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span> "No mob column families are assigned in the mob compaction");<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span> }<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span> if (request.hasMajor() && request.getMajor()) {<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span> allFiles = true;<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span> }<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span> String familyLogMsg = (family != null) ? Bytes.toString(family) : "";<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span> if (LOG.isTraceEnabled()) {<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span> LOG.trace("User-triggered mob compaction requested for table: "<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span> + tableName.getNameAsString() + " for column family: " + familyLogMsg);<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span> }<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span> master.requestMobCompaction(tableName, compactedColumns, allFiles);<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span> return CompactRegionResponse.newBuilder().build();<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span> }<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span><a name="line.1704"></a>
-<span class="sourceLineNo">1705</span> @Override<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span> public IsBalancerEnabledResponse isBalancerEnabled(RpcController controller,<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span> IsBalancerEnabledRequest request) throws ServiceException {<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span> IsBalancerEnabledResponse.Builder response = IsBalancerEnabledResponse.newBuilder();<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span> response.setEnabled(master.isBalancerOn());<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span> return response.build();<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span> }<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span><a name="line.1712"></a>
-<span class="sourceLineNo">1713</span> @Override<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span> public SetSplitOrMergeEnabledResponse setSplitOrMergeEnabled(RpcController controller,<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span> SetSplitOrMergeEnabledRequest request) throws ServiceException {<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span> SetSplitOrMergeEnabledResponse.Builder response = SetSplitOrMergeEnabledResponse.newBuilder();<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span> try {<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span> master.checkInitialized();<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span> boolean newValue = request.getEnabled();<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span> for (MasterProtos.MasterSwitchType masterSwitchType: request.getSwitchTypesList()) {<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span> MasterSwitchType switchType = convert(masterSwitchType);<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span> boolean oldValue = master.isSplitOrMergeEnabled(switchType);<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span> response.addPrevValue(oldValue);<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span> if (master.cpHost != null) {<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span> master.cpHost.preSetSplitOrMergeEnabled(newValue, switchType);<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span> }<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span> master.getSplitOrMergeTracker().setSplitOrMergeEnabled(newValue, switchType);<a name="line.1727"></a>
+<span class="sourceLineNo">1494</span> try {<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span> response.setInMaintenanceMode(master.isInMaintenanceMode());<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span> } catch (IOException e) {<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span> throw new ServiceException(e);<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span> }<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span> return response.build();<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span> }<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span><a name="line.1501"></a>
+<span class="sourceLineNo">1502</span> @Override<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span> public UnassignRegionResponse unassignRegion(RpcController controller,<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span> UnassignRegionRequest req) throws ServiceException {<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span> try {<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span> final byte [] regionName = req.getRegion().getValue().toByteArray();<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span> RegionSpecifierType type = req.getRegion().getType();<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span> final boolean force = req.getForce();<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span> UnassignRegionResponse urr = UnassignRegionResponse.newBuilder().build();<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span><a name="line.1510"></a>
+<span class="sourceLineNo">1511</span> master.checkInitialized();<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span> if (type != RegionSpecifierType.REGION_NAME) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span> LOG.warn("unassignRegion specifier type: expected: " + RegionSpecifierType.REGION_NAME<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span> + " actual: " + type);<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span> }<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span> Pair<RegionInfo, ServerName> pair =<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span> MetaTableAccessor.getRegion(master.getConnection(), regionName);<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span> if (Bytes.equals(RegionInfoBuilder.FIRST_META_REGIONINFO.getRegionName(),regionName)) {<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span> pair = new Pair<>(RegionInfoBuilder.FIRST_META_REGIONINFO,<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span> master.getMetaTableLocator().getMetaRegionLocation(master.getZooKeeper()));<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span> }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span> if (pair == null) {<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span> throw new UnknownRegionException(Bytes.toString(regionName));<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span> }<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span><a name="line.1525"></a>
+<span class="sourceLineNo">1526</span> RegionInfo hri = pair.getFirst();<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span> if (master.cpHost != null) {<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span> master.cpHost.preUnassign(hri, force);<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span> }<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span> LOG.debug(master.getClientIdAuditPrefix() + " unassign " + hri.getRegionNameAsString()<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span> + " in current location if it is online and reassign.force=" + force);<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span> master.getAssignmentManager().unassign(hri);<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span> if (master.cpHost != null) {<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span> master.cpHost.postUnassign(hri, force);<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span> }<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span><a name="line.1536"></a>
+<span class="sourceLineNo">1537</span> return urr;<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span> } catch (IOException ioe) {<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span> throw new ServiceException(ioe);<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span> }<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span> }<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span><a name="line.1542"></a>
+<span class="sourceLineNo">1543</span> @Override<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span> public ReportRegionStateTransitionResponse reportRegionStateTransition(RpcController c,<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span> ReportRegionStateTransitionRequest req) throws ServiceException {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span> try {<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span> master.checkServiceStarted();<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span> return master.getAssignmentManager().reportRegionStateTransition(req);<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span> } catch (IOException ioe) {<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span> throw new ServiceException(ioe);<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span> }<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span> }<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span><a name="line.1553"></a>
+<span class="sourceLineNo">1554</span> @Override<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span> public SetQuotaResponse setQuota(RpcController c, SetQuotaRequest req)<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span> throws ServiceException {<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span> try {<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span> master.checkInitialized();<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span> return master.getMasterQuotaManager().setQuota(req);<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span> } catch (Exception e) {<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span> throw new ServiceException(e);<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span> }<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span> }<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span><a name="line.1564"></a>
+<span class="sourceLineNo">1565</span> @Override<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span> public MajorCompactionTimestampResponse getLastMajorCompactionTimestamp(RpcController controller,<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span> MajorCompactionTimestampRequest request) throws ServiceException {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span> MajorCompactionTimestampResponse.Builder response =<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span> MajorCompactionTimestampResponse.newBuilder();<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span> try {<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span> master.checkInitialized();<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span> response.setCompactionTimestamp(master.getLastMajorCompactionTimestamp(ProtobufUtil<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span> .toTableName(request.getTableName())));<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span> } catch (IOException e) {<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span> throw new ServiceException(e);<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span> }<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span> return response.build();<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span> }<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span><a name="line.1579"></a>
+<span class="sourceLineNo">1580</span> @Override<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span> public MajorCompactionTimestampResponse getLastMajorCompactionTimestampForRegion(<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span> RpcController controller, MajorCompactionTimestampForRegionRequest request)<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span> throws ServiceException {<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span> MajorCompactionTimestampResponse.Builder response =<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span> MajorCompactionTimestampResponse.newBuilder();<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span> try {<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span> master.checkInitialized();<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span> response.setCompactionTimestamp(master.getLastMajorCompactionTimestampForRegion(request<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span> .getRegion().getValue().toByteArray()));<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span> } catch (IOException e) {<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span> throw new ServiceException(e);<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span> }<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span> return response.build();<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span> }<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span><a name="line.1595"></a>
+<span class="sourceLineNo">1596</span> /**<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span> * Compact a region on the master.<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span> *<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span> * @param controller the RPC controller<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span> * @param request the request<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span> * @throws ServiceException<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span> */<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span> @Override<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span> @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span> public CompactRegionResponse compactRegion(final RpcController controller,<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span> final CompactRegionRequest request) throws ServiceException {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span> try {<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span> master.checkInitialized();<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span> byte[] regionName = request.getRegion().getValue().toByteArray();<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span> TableName tableName = RegionInfo.getTable(regionName);<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span> // if the region is a mob region, do the mob file compaction.<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span> if (MobUtils.isMobRegionName(tableName, regionName)) {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span> checkHFileFormatVersionForMob();<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span> return compactMob(request, tableName);<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span> } else {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span> return super.compactRegion(controller, request);<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span> }<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span> } catch (IOException ie) {<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span> throw new ServiceException(ie);<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span> }<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span> }<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span><a name="line.1622"></a>
+<span class="sourceLineNo">1623</span> /**<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span> * check configured hfile format version before to do compaction<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span> * @throws IOException throw IOException<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span> */<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span> private void checkHFileFormatVersionForMob() throws IOException {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span> if (HFile.getFormatVersion(master.getConfiguration()) < HFile.MIN_FORMAT_VERSION_WITH_TAGS) {<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span> LOG.error("A minimum HFile version of " + HFile.MIN_FORMAT_VERSION_WITH_TAGS<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span> + " is required for MOB compaction. Compaction will not run.");<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span> throw new IOException("A minimum HFile version of " + HFile.MIN_FORMAT_VERSION_WITH_TAGS<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span> + " is required for MOB feature. Consider setting " + HFile.FORMAT_VERSION_KEY<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span> + " accordingly.");<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span> }<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span> }<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span><a name="line.1636"></a>
+<span class="sourceLineNo">1637</span> @Override<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span> @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span> public GetRegionInfoResponse getRegionInfo(final RpcController controller,<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span> final GetRegionInfoRequest request) throws ServiceException {<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span> byte[] regionName = request.getRegion().getValue().toByteArray();<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span> TableName tableName = RegionInfo.getTable(regionName);<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span> if (MobUtils.isMobRegionName(tableName, regionName)) {<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span> // a dummy region info contains the compaction state.<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span> RegionInfo mobRegionInfo = MobUtils.getMobRegionInfo(tableName);<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span> GetRegionInfoResponse.Builder builder = GetRegionInfoResponse.newBuilder();<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span> builder.setRegionInfo(ProtobufUtil.toRegionInfo(mobRegionInfo));<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span> if (request.hasCompactionState() && request.getCompactionState()) {<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span> builder.setCompactionState(master.getMobCompactionState(tableName));<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span> }<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span> return builder.build();<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span> } else {<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span> return super.getRegionInfo(controller, request);<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span> }<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span> }<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span><a name="line.1656"></a>
+<span class="sourceLineNo">1657</span> /**<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span> * Compacts the mob files in the current table.<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span> * @param request the request.<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span> * @param tableName the current table name.<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span> * @return The response of the mob file compaction.<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span> * @throws IOException<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span> */<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span> private CompactRegionResponse compactMob(final CompactRegionRequest request,<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span> TableName tableName) throws IOException {<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span> if (!master.getTableStateManager().isTableState(tableName, TableState.State.ENABLED)) {<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span> throw new DoNotRetryIOException("Table " + tableName + " is not enabled");<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span> }<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span> boolean allFiles = false;<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span> List<ColumnFamilyDescriptor> compactedColumns = new ArrayList<>();<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span> ColumnFamilyDescriptor[] hcds = master.getTableDescriptors().get(tableName).getColumnFamilies();<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span> byte[] family = null;<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span> if (request.hasFamily()) {<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span> family = request.getFamily().toByteArray();<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span> for (ColumnFamilyDescriptor hcd : hcds) {<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span> if (Bytes.equals(family, hcd.getName())) {<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span> if (!hcd.isMobEnabled()) {<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span> LOG.error("Column family " + hcd.getNameAsString() + " is not a mob column family");<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span> throw new DoNotRetryIOException("Column family " + hcd.getNameAsString()<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span> + " is not a mob column family");<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span> }<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span> compactedColumns.add(hcd);<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span> }<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span> }<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span> } else {<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span> for (ColumnFamilyDescriptor hcd : hcds) {<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span> if (hcd.isMobEnabled()) {<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span> compactedColumns.add(hcd);<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span> }<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span> }<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span> }<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span> if (compactedColumns.isEmpty()) {<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span> LOG.error("No mob column families are assigned in the mob compaction");<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span> throw new DoNotRetryIOException(<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span> "No mob column families are assigned in the mob compaction");<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span> }<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span> if (request.hasMajor() && request.getMajor()) {<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span> allFiles = true;<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span> }<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span> String familyLogMsg = (family != null) ? Bytes.toString(family) : "";<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span> if (LOG.isTraceEnabled()) {<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span> LOG.trace("User-triggered mob compaction requested for table: "<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span> + tableName.getNameAsString() + " for column family: " + familyLogMsg);<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span> }<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span> master.requestMobCompaction(tableName, compactedColumns, allFiles);<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span> return CompactRegionResponse.newBuilder().build();<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span> }<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span><a name="line.1708"></a>
+<span class="sourceLineNo">1709</span> @Override<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span> public IsBalancerEnabledResponse isBalancerEnabled(RpcController controller,<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span> IsBalancerEnabledRequest request) throws ServiceException {<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span> IsBalancerEnabledResponse.Builder response = IsBalancerEnabledResponse.newBuilder();<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span> response.setEnabled(master.isBalancerOn());<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span> return response.build();<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span> }<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span><a name="line.1716"></a>
+<span class="sourceLineNo">1717</span> @Override<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span> public SetSplitOrMergeEnabledResponse setSplitOrMergeEnabled(RpcController controller,<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span> SetSplitOrMergeEnabledRequest request) throws ServiceException {<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span> SetSplitOrMergeEnabledResponse.Builder response = SetSplitOrMergeEnabledResponse.newBuilder();<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span> try {<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span> master.checkInitialized();<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span> boolean newValue = request.getEnabled();<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span> for (MasterProtos.MasterSwitchType masterSwitchType: request.getSwitchTypesList()) {<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span> MasterSwitchType switchType = convert(masterSwitchType);<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span> boolean oldValue = master.isSplitOrMergeEnabled(switchType);<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span> response.addPrevValue(oldValue);<a name="line.1727"></a>
<span class="sourceLineNo">1728</span> if (master.cpHost != null) {<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span> master.cpHost.postSetSplitOrMergeEnabled(newValue, switchType);<a name="line.1729"></a>
+<span class="sourceLineNo">1729</span> master.cpHost.preSetSplitOrMergeEnabled(newValue, switchType);<a name="line.1729"></a>
<span class="sourceLineNo">1730</span> }<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span> }<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span> } catch (IOException e) {<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span> throw new ServiceException(e);<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span> } catch (KeeperException e) {<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span> throw new ServiceException(e);<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span> }<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span> return response.build();<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span> }<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span><a name="line.1739"></a>
-<span class="sourceLineNo">1740</span> @Override<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span> public IsSplitOrMergeEnabledResponse isSplitOrMergeEnabled(RpcController controller,<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span> IsSplitOrMergeEnabledRequest request) throws ServiceException {<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span> IsSplitOrMergeEnabledResponse.Builder response = IsSplitOrMergeEnabledResponse.newBuilder();<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span> response.setEnabled(master.isSplitOrMergeEnabled(convert(request.getSwitchType())));<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span> return response.build();<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span> }<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span><a name="line.1747"></a>
-<span class="sourceLineNo">1748</span> @Override<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span> public NormalizeResponse normalize(RpcController controller,<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span> NormalizeRequest request) throws ServiceException {<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span> rpcPreCheck("normalize");<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span> try {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span> return NormalizeResponse.newBuilder().setNormalizerRan(master.normalizeRegions()).build();<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span> } catch (IOException ex) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span> throw new ServiceException(ex);<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span> }<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span> }<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span><a name="line.1758"></a>
-<span class="sourceLineNo">1759</span> @Override<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span> public SetNormalizerRunningResponse setNormalizerRunning(RpcController controller,<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span> SetNormalizerRunningRequest request) throws ServiceException {<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span> rpcPreCheck("setNormalizerRunning");<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span><a name="line.1763"></a>
-<span class="sourceLineNo">1764</span> // Sets normalizer on/off flag in ZK.<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span> boolean prevValue = master.getRegionNormalizerTracker().isNormalizerOn();<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span> boolean newValue = request.getOn();<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span> try {<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span> master.getRegionNormalizerTracker().setNormalizerOn(newValue);<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span> } catch (KeeperException ke) {<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span> LOG.warn("Error flipping normalizer switch", ke);<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span> }<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span> LOG.info("{} set normalizerSwitch={}", master.getClientIdAuditPrefix(), newValue);<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span> return SetNormalizerRunningResponse.newBuilder().setPrevNormalizerValue(prevValue).build();<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span> }<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span><a name="line.1775"></a>
-<span class="sourceLineNo">1776</span> @Override<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span> public IsNormalizerEnabledResponse isNormalizerEnabled(RpcController controller,<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span> IsNormalizerEnabledRequest request) throws ServiceException {<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span> IsNormalizerEnabledResponse.Builder response = IsNormalizerEnabledResponse.newBuilder();<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span> response.setEnabled(master.isNormalizerOn());<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span> return response.build();<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span> }<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span><a name="line.1783"></a>
-<span class="sourceLineNo">1784</span> /**<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span> * Returns the security capabilities in effect on the cluster<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span> */<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span> @Override<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span> public SecurityCapabilitiesResponse getSecurityCapabilities(RpcController controller,<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span> SecurityCapabilitiesRequest request) throws ServiceException {<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span> SecurityCapabilitiesResponse.Builder response = SecurityCapabilitiesResponse.newBuilder();<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span> try {<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span> master.checkInitialized();<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span> Set<SecurityCapabilitiesResponse.Capability> capabilities = new HashSet<>();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span> // Authentication<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span> if (User.isHBaseSecurityEnabled(master.getConfiguration())) {<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span> capabilities.add(SecurityCapabilitiesResponse.Capability.SECURE_AUTHENTICATION);<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span> } else {<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span> capabilities.add(SecurityCapabilitiesResponse.Capability.SIMPLE_AUTHENTICATION);<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span> }<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span> // A coprocessor that implements AccessControlService can provide AUTHORIZATION and<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span> // CELL_AUTHORIZATION<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span> if (master.cpHost != null && hasAccessControlServiceCoprocessor(master.cpHost)) {<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span> if (AccessChecker.isAuthorizationSupported(master.getConfiguration())) {<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span> capabilities.add(SecurityCapabilitiesResponse.Capability.AUTHORIZATION);<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span> }<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span> if (AccessController.isCellAuthorizationSupported(master.getConfiguration())) {<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span> capabilities.add(SecurityCapabilitiesResponse.Capability.CELL_AUTHORIZATION);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span> }<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span> }<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span> // A coprocessor that implements VisibilityLabelsService can provide CELL_VISIBILITY.<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span> if (master.cpHost != null && hasVisibilityLabelsServiceCoprocessor(master.cpHost)) {<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span> if (VisibilityController.isCellAuthorizationSupported(master.getConfiguration())) {<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span> capabilities.add(SecurityCapabilitiesResponse.Capability.CELL_VISIBILITY);<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span> }<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span> }<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span> response.addAllCapabilities(capabilities);<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span> } catch (IOException e) {<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span> throw new ServiceException(e);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span> }<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span> return response.build();<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span> }<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span><a name="line.1822"></a>
-<span class="sourceLineNo">1823</span> /**<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span> * Determines if there is a MasterCoprocessor deployed which implements<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span> * {@link org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.Interface}.<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span> */<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span> boolean hasAccessControlServiceCoprocessor(MasterCoprocessorHost cpHost) {<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span> return checkCoprocessorWithService(<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span> cpHost.findCoprocessors(MasterCoprocessor.class), AccessControlService.Interface.class);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span> }<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span><a name="line.1831"></a>
-<span class="sourceLineNo">1832</span> /**<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span> * Determines if there is a MasterCoprocessor deployed which implements<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span> * {@link org.apache.hadoop.hbase.protobuf.generated.VisibilityLabelsProtos.VisibilityLabelsService.Interface}.<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span> */<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span> boolean hasVisibilityLabelsServiceCoprocessor(MasterCoprocessorHost cpHost) {<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span> return checkCoprocessorWithService(<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span> cpHost.findCoprocessors(MasterCoprocessor.class),<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span> VisibilityLabelsService.Interface.class);<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span> }<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span><a name="line.1841"></a>
-<span class="sourceLineNo">1842</span> /**<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span> * Determines if there is a coprocessor implementation in the provided argument which extends<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span> * or implements the provided {@code service}.<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span> */<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span> boolean checkCoprocessorWithService(<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span> List<MasterCoprocessor> coprocessorsToCheck, Class<?> service) {<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span> if (coprocessorsToCheck == null || coprocessorsToCheck.isEmpty()) {<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span> return false;<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span> }<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span> for (MasterCoprocessor cp : coprocessorsToCheck) {<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span> if (service.isAssignableFrom(cp.getClass())) {<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span> return true;<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span> }<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span> }<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span> return false;<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span> }<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span><a name="line.1858"></a>
-<span class="sourceLineNo">1859</span> private MasterSwitchType convert(MasterProtos.MasterSwitchType switchType) {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span> switch (switchType) {<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span> case SPLIT:<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span> return MasterSwitchType.SPLIT;<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span> case MERGE:<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span> return MasterSwitchType.MERGE;<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span> default:<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span> break;<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span> }<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span> return null;<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span> }<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span><a name="line.1870"></a>
-<span class="sourceLineNo">1871</span> @Override<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span> public AddReplicationPeerResponse addReplicationPeer(RpcController controller,<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span> AddReplicationPeerRequest request) throws ServiceException {<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span> try {<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span> long procId = master.addReplicationPeer(request.getPeerId(),<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span> ReplicationPeerConfigUtil.convert(request.getPeerConfig()),<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span> request.getPeerState().getState().equals(ReplicationState.State.ENABLED));<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span> return AddReplicationPeerResponse.newBuilder().setProcId(procId).build();<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span> } catch (ReplicationException | IOException e) {<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span> throw new ServiceException(e);<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span> }<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span> }<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span><a name="line.1883"></a>
-<span class="sourceLineNo">1884</span> @Override<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span> public RemoveReplicationPeerResponse removeReplicationPeer(RpcController controller,<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span> RemoveReplicationPeerRequest request) throws ServiceException {<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span> try {<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span> long procId = master.removeReplicationPeer(request.getPeerId());<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span> return RemoveReplicationPeerResponse.newBuilder().setProcId(procId).build();<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span> } catch (ReplicationException | IOException e) {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span> throw new ServiceException(e);<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span> }<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span> }<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span><a name="line.1894"></a>
-<span class="sourceLineNo">1895</span> @Override<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span> public EnableReplicationPeerResponse enableReplicationPeer(RpcController controller,<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span> EnableReplicationPeerRequest request) throws ServiceException {<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span> try {<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span> long procId = master.enableReplicationPeer(request.getPeerId());<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span> return EnableReplicationPeerResponse.newBuilder().setProcId(procId).build();<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span> } catch (ReplicationException | IOException e) {<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span> throw new ServiceException(e);<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span> }<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span> }<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span><a name="line.1905"></a>
-<span class="sourceLineNo">1906</span> @Override<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span> public DisableReplicationPeerResponse disableReplicationPeer(RpcController controller,<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span> DisableReplicationPeerRequest request) throws ServiceException {<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span> try {<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span> long procId = master.disableReplicationPeer(request.getPeerId());<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span> return DisableReplicationPeerResponse.newBuilder().setProcId(procId).build();<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span> } catch (ReplicationException | IOException e) {<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span> throw new ServiceException(e);<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span> }<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span> }<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span><a name="line.1916"></a>
-<span class="sourceLineNo">1917</span> @Override<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span> public GetReplicationPeerConfigResponse getReplicationPeerConfig(RpcController controller,<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span> GetReplicationPeerConfigRequest request) throws ServiceException {<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span> GetReplicationPeerConfigResponse.Builder response = GetReplicationPeerConfigResponse<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span> .newBuilder();<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span> try {<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span> String peerId = request.getPeerId();<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span> ReplicationPeerConfig peerConfig = master.getReplicationPeerConfig(peerId);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span> response.setPeerId(peerId);<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span> response.setPeerConfig(ReplicationPeerConfigUtil.convert(peerConfig));<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span> } catch (ReplicationException | IOException e) {<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span> throw new ServiceException(e);<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span> }<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span> return response.build();<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span> }<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span><a name="line.1932"></a>
-<span class="sourceLineNo">1933</span> @Override<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span> public UpdateReplicationPeerConfigResponse updateReplicationPeerConfig(RpcController controller,<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span> UpdateReplicationPeerConfigRequest request) throws ServiceException {<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span> try {<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span> long procId = master.updateReplicationPeerConfig(request.getPeerId(),<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span> ReplicationPeerConfigUtil.convert(request.getPeerConfig()));<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span> return UpdateReplicationPeerConfigResponse.newBuilder().setProcId(procId).build();<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span> } catch (ReplicationException | IOException e) {<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span> throw new ServiceException(e);<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span> }<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span> }<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span><a name="line.1944"></a>
-<span class="sourceLineNo">1945</span> @Override<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span> public ListReplicationPeersResponse listReplicationPeers(RpcController controller,<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span> ListReplicationPeersRequest request) throws ServiceException {<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span> ListReplicationPeersResponse.Builder response = ListReplicationPeersResponse.newBuilder();<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span> try {<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span> List<ReplicationPeerDescription> peers = master<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span> .listReplicationPeers(request.hasRegex() ? request.getRegex() : null);<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span> for (ReplicationPeerDescription peer : peers) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span> response.addPeerDesc(ReplicationPeerConfigUtil.toProtoReplicationPeerDescription(peer));<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span> }<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span> } catch (ReplicationException | IOException e) {<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span> throw new ServiceException(e);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span> }<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span> return response.build();<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span> }<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span><a name="line.1960"></a>
-<span class="sourceLineNo">1961</span> @Override<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span> public ListDecommissionedRegionServersResponse listDecommissionedRegionServers(<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span> RpcController controller, ListDecommissionedRegionServersRequest request)<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span> throws ServiceException {<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span> ListDecommissionedRegionServersResponse.Builder response =<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span> ListDecommissionedRegionServersResponse.newBuilder();<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span> try {<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span> master.checkInitialized();<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span> if (master.cpHost != null) {<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span> master.cpHost.preListDecommissionedRegionServers();<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span> }<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span> List<ServerName> servers = master.listDecommissionedRegionServers();<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span> response.addAllServerName((servers.stream().map(server -> ProtobufUtil.toServerName(server)))<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span> .collect(Collectors.toList()));<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span> if (master.cpHost != null) {<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span> master.cpHost.postListDecommissionedRegionServers();<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span> }<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span> } catch (IOException io) {<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span> throw new ServiceException(io);<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span> }<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span><a name="line.1981"></a>
-<span class="sourceLineNo">1982</span> return response.build();<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span> }<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span><a name="line.1984"></a>
-<span class="sourceLineNo">1985</span> @Override<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span> public DecommissionRegionServersResponse decommissionRegionServers(RpcController controller,<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span> DecommissionRegionServersRequest request) throws ServiceException {<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span> try {<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span> master.checkInitialized();<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span> List<ServerName> servers = request.getServerNameList().stream()<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span> .map(pbServer -> ProtobufUtil.toServerName(pbServer)).collect(Collectors.toList());<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span> boolean offload = request.getOffload();<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span> if (master.cpHost != null) {<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span> master.cpHost.preDecommissionRegionServers(servers, offload);<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span> }<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span> master.decommissionRegionServers(servers, offload);<a name="line.1996"></a>
+<span class="sourceLineNo">1731</span> master.getSplitOrMergeTracker().setSplitOrMergeEnabled(newValue, switchType);<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span> if (master.cpHost != null) {<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span> master.cpHost.postSetSplitOrMergeEnabled(newValue, switchType);<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span> }<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span> }<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span> } catch (IOException e) {<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span> throw new ServiceException(e);<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span> } catch (KeeperException e) {<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span> throw new ServiceException(e);<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span> }<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span> return response.build();<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span> }<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span><a name="line.1743"></a>
+<span class="sourceLineNo">1744</span> @Override<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span> public IsSplitOrMergeEnabledResponse isSplitOrMergeEnabled(RpcController controller,<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span> IsSplitOrMergeEnabledRequest request) throws ServiceException {<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span> IsSplitOrMergeEnabledResponse.Builder response = IsSplitOrMergeEnabledResponse.newBuilder();<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span> response.setEnabled(master.isSplitOrMergeEnabled(convert(request.getSwitchType())));<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span> return response.build();<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span> }<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span><a name="line.1751"></a>
+<span class="sourceLineNo">1752</span> @Override<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span> public NormalizeResponse normalize(RpcController controller,<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span> NormalizeRequest request) throws ServiceException {<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span> rpcPreCheck("normalize");<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span> try {<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span> return NormalizeResponse.newBuilder().setNormalizerRan(master.normalizeRegions()).build();<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span> } catch (IOException ex) {<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span> throw new ServiceException(ex);<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span> }<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span> }<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span><a name="line.1762"></a>
+<span class="sourceLineNo">1763</span> @Override<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span> public SetNormalizerRunningResponse setNormalizerRunning(RpcController controller,<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span> SetNormalizerRunningRequest request) throws ServiceException {<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span> rpcPreCheck("setNormalizerRunning");<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span><a name="line.1767"></a>
+<span class="sourceLineNo">1768</span> // Sets normalizer on/off flag in ZK.<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span> boolean prevValue = master.getRegionNormalizerTracker().isNormalizerOn();<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span> boolean newValue = request.getOn();<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span> try {<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span> master.getRegionNormalizerTracker().setNormalizerOn(newValue);<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span> } catch (KeeperException ke) {<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span> LOG.warn("Error flipping normalizer switch", ke);<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span> }<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span> LOG.info("{} set normalizerSwitch={}", master.getClientIdAuditPrefix(), newValue);<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span> return SetNormalizerRunningResponse.newBuilder().setPrevNormalizerValue(prevValue).build();<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span> }<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span><a name="line.1779"></a>
+<span class="sourceLineNo">1780</span> @Override<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span> public IsNormalizerEnabledResponse isNormalizerEnabled(RpcController controller,<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span> IsNormalizerEnabledRequest request) throws ServiceException {<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span> IsNormalizerEnabledResponse.Builder response = IsNormalizerEnabledResponse.newBuilder();<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span> response.setEnabled(master.isNormalizerOn());<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span> return response.build();<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span> }<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span><a name="line.1787"></a>
+<span class="sourceLineNo">1788</span> /**<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span> * Returns the security capabilities in effect on the cluster<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span> */<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span> @Override<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span> public SecurityCapabilitiesResponse getSecurityCapabilities(RpcController controller,<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span> SecurityCapabilitiesRequest request) throws ServiceException {<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span> SecurityCapabilitiesResponse.Builder response = SecurityCapabilitiesResponse.newBuilder();<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span> try {<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span> master.checkInitialized();<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span> Set<SecurityCapabilitiesResponse.Capability> capabilities = new HashSet<>();<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span> // Authentication<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span> if (User.isHBaseSecurityEnabled(master.getConfiguration())) {<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span> capabilities.add(SecurityCapabilitiesResponse.Capability.SECURE_AUTHENTICATION);<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span> } else {<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span> capabilities.add(SecurityCapabilitiesResponse.Capability.SIMPLE_AUTHENTICATION);<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span> }<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span> // A coprocessor that implements AccessControlService can provide AUTHORIZATION and<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span> // CELL_AUTHORIZATION<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span> if (master.cpHost != null && hasAccessControlServiceCoprocessor(master.cpHost)) {<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span> if (AccessChecker.isAuthorizationSupported(master.getConfiguration())) {<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span> capabilities.add(SecurityCapabilitiesResponse.Capability.AUTHORIZATION);<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span> }<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span> if (AccessController.isCellAuthorizationSupported(master.getConfiguration())) {<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span> capabilities.add(SecurityCapabilitiesResponse.Capability.CELL_AUTHORIZATION);<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span> }<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span> }<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span> // A coprocessor that implements VisibilityLabelsService can provide CELL_VISIBILITY.<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span> if (master.cpHost != null && hasVisibilityLabelsServiceCoprocessor(master.cpHost)) {<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span> if (VisibilityController.isCellAuthorizationSupported(master.getConfiguration())) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span> capabilities.add(SecurityCapabilitiesResponse.Capability.CELL_VISIBILITY);<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span> }<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span> }<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span> response.addAllCapabilities(capabilities);<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span> } catch (IOException e) {<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span> throw new ServiceException(e);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span> }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span> return response.build();<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span> }<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span><a name="line.1826"></a>
+<span class="sourceLineNo">1827</span> /**<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span> * Determines if there is a MasterCoprocessor deployed which implements<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span> * {@link org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos.AccessControlService.Interface}.<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span> */<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span> boolean hasAccessControlServiceCoprocessor(MasterCoprocessorHost cpHost) {<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span> return checkCoprocessorWithService(<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span> cpHost.findCoprocessors(MasterCoprocessor.class), AccessControlService.Interface.class);<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span> }<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span><a name="line.1835"></a>
+<span class="sourceLineNo">1836</span> /**<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span> * Determines if there is a MasterCoprocessor deployed which implements<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span> * {@link org.apache.hadoop.hbase.protobuf.generated.VisibilityLabelsProtos.VisibilityLabelsService.Interface}.<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span> */<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span> boolean hasVisibilityLabelsServiceCoprocessor(MasterCoprocessorHost cpHost) {<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span> return checkCoprocessorWithService(<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span> cpHost.findCoprocessors(MasterCoprocessor.class),<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span> VisibilityLabelsService.Interface.class);<a name="line.1843"></a>
+<span c
<TRUNCATED>
[09/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html
index 49f4e5a..e1f22c3 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html
@@ -30,188 +30,191 @@
<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.master.procedure.PeerProcedureInterface;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher.ServerOperation;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.procedure2.ProcedureEvent;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.procedure2.ProcedureYieldException;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteOperation;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureException;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.replication.regionserver.RefreshPeerCallable;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.slf4j.Logger;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.slf4j.LoggerFactory;<a name="line.36"></a>
-<span class="sourceLineNo">037</span><a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationType;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RefreshPeerParameter;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RefreshPeerStateData;<a name="line.41"></a>
-<span class="sourceLineNo">042</span><a name="line.42"></a>
-<span class="sourceLineNo">043</span>@InterfaceAudience.Private<a name="line.43"></a>
-<span class="sourceLineNo">044</span>public class RefreshPeerProcedure extends Procedure<MasterProcedureEnv><a name="line.44"></a>
-<span class="sourceLineNo">045</span> implements PeerProcedureInterface, RemoteProcedure<MasterProcedureEnv, ServerName> {<a name="line.45"></a>
-<span class="sourceLineNo">046</span><a name="line.46"></a>
-<span class="sourceLineNo">047</span> private static final Logger LOG = LoggerFactory.getLogger(RefreshPeerProcedure.class);<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span> private String peerId;<a name="line.49"></a>
-<span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span> private PeerOperationType type;<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span> @edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "IS2_INCONSISTENT_SYNC",<a name="line.53"></a>
-<span class="sourceLineNo">054</span> justification = "Will never change after construction")<a name="line.54"></a>
-<span class="sourceLineNo">055</span> private ServerName targetServer;<a name="line.55"></a>
-<span class="sourceLineNo">056</span><a name="line.56"></a>
-<span class="sourceLineNo">057</span> private boolean dispatched;<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span> private ProcedureEvent<?> event;<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span> private boolean succ;<a name="line.61"></a>
-<span class="sourceLineNo">062</span><a name="line.62"></a>
-<span class="sourceLineNo">063</span> public RefreshPeerProcedure() {<a name="line.63"></a>
-<span class="sourceLineNo">064</span> }<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span> public RefreshPeerProcedure(String peerId, PeerOperationType type, ServerName targetServer) {<a name="line.66"></a>
-<span class="sourceLineNo">067</span> this.peerId = peerId;<a name="line.67"></a>
-<span class="sourceLineNo">068</span> this.type = type;<a name="line.68"></a>
-<span class="sourceLineNo">069</span> this.targetServer = targetServer;<a name="line.69"></a>
-<span class="sourceLineNo">070</span> }<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span> @Override<a name="line.72"></a>
-<span class="sourceLineNo">073</span> public String getPeerId() {<a name="line.73"></a>
-<span class="sourceLineNo">074</span> return peerId;<a name="line.74"></a>
-<span class="sourceLineNo">075</span> }<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span> @Override<a name="line.77"></a>
-<span class="sourceLineNo">078</span> public PeerOperationType getPeerOperationType() {<a name="line.78"></a>
-<span class="sourceLineNo">079</span> return PeerOperationType.REFRESH;<a name="line.79"></a>
-<span class="sourceLineNo">080</span> }<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span> private static PeerModificationType toPeerModificationType(PeerOperationType type) {<a name="line.82"></a>
-<span class="sourceLineNo">083</span> switch (type) {<a name="line.83"></a>
-<span class="sourceLineNo">084</span> case ADD:<a name="line.84"></a>
-<span class="sourceLineNo">085</span> return PeerModificationType.ADD_PEER;<a name="line.85"></a>
-<span class="sourceLineNo">086</span> case REMOVE:<a name="line.86"></a>
-<span class="sourceLineNo">087</span> return PeerModificationType.REMOVE_PEER;<a name="line.87"></a>
-<span class="sourceLineNo">088</span> case ENABLE:<a name="line.88"></a>
-<span class="sourceLineNo">089</span> return PeerModificationType.ENABLE_PEER;<a name="line.89"></a>
-<span class="sourceLineNo">090</span> case DISABLE:<a name="line.90"></a>
-<span class="sourceLineNo">091</span> return PeerModificationType.DISABLE_PEER;<a name="line.91"></a>
-<span class="sourceLineNo">092</span> case UPDATE_CONFIG:<a name="line.92"></a>
-<span class="sourceLineNo">093</span> return PeerModificationType.UPDATE_PEER_CONFIG;<a name="line.93"></a>
-<span class="sourceLineNo">094</span> default:<a name="line.94"></a>
-<span class="sourceLineNo">095</span> throw new IllegalArgumentException("Unknown type: " + type);<a name="line.95"></a>
-<span class="sourceLineNo">096</span> }<a name="line.96"></a>
-<span class="sourceLineNo">097</span> }<a name="line.97"></a>
-<span class="sourceLineNo">098</span><a name="line.98"></a>
-<span class="sourceLineNo">099</span> private static PeerOperationType toPeerOperationType(PeerModificationType type) {<a name="line.99"></a>
-<span class="sourceLineNo">100</span> switch (type) {<a name="line.100"></a>
-<span class="sourceLineNo">101</span> case ADD_PEER:<a name="line.101"></a>
-<span class="sourceLineNo">102</span> return PeerOperationType.ADD;<a name="line.102"></a>
-<span class="sourceLineNo">103</span> case REMOVE_PEER:<a name="line.103"></a>
-<span class="sourceLineNo">104</span> return PeerOperationType.REMOVE;<a name="line.104"></a>
-<span class="sourceLineNo">105</span> case ENABLE_PEER:<a name="line.105"></a>
-<span class="sourceLineNo">106</span> return PeerOperationType.ENABLE;<a name="line.106"></a>
-<span class="sourceLineNo">107</span> case DISABLE_PEER:<a name="line.107"></a>
-<span class="sourceLineNo">108</span> return PeerOperationType.DISABLE;<a name="line.108"></a>
-<span class="sourceLineNo">109</span> case UPDATE_PEER_CONFIG:<a name="line.109"></a>
-<span class="sourceLineNo">110</span> return PeerOperationType.UPDATE_CONFIG;<a name="line.110"></a>
-<span class="sourceLineNo">111</span> default:<a name="line.111"></a>
-<span class="sourceLineNo">112</span> throw new IllegalArgumentException("Unknown type: " + type);<a name="line.112"></a>
-<span class="sourceLineNo">113</span> }<a name="line.113"></a>
-<span class="sourceLineNo">114</span> }<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span> @Override<a name="line.116"></a>
-<span class="sourceLineNo">117</span> public RemoteOperation remoteCallBuild(MasterProcedureEnv env, ServerName remote) {<a name="line.117"></a>
-<span class="sourceLineNo">118</span> assert targetServer.equals(remote);<a name="line.118"></a>
-<span class="sourceLineNo">119</span> return new ServerOperation(this, getProcId(), RefreshPeerCallable.class,<a name="line.119"></a>
-<span class="sourceLineNo">120</span> RefreshPeerParameter.newBuilder().setPeerId(peerId).setType(toPeerModificationType(type))<a name="line.120"></a>
-<span class="sourceLineNo">121</span> .setTargetServer(ProtobufUtil.toServerName(remote)).build().toByteArray());<a name="line.121"></a>
-<span class="sourceLineNo">122</span> }<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span> private void complete(MasterProcedureEnv env, Throwable error) {<a name="line.124"></a>
-<span class="sourceLineNo">125</span> if (event == null) {<a name="line.125"></a>
-<span class="sourceLineNo">126</span> LOG.warn("procedure event for {} is null, maybe the procedure is created when recovery",<a name="line.126"></a>
-<span class="sourceLineNo">127</span> getProcId());<a name="line.127"></a>
-<span class="sourceLineNo">128</span> return;<a name="line.128"></a>
-<span class="sourceLineNo">129</span> }<a name="line.129"></a>
-<span class="sourceLineNo">130</span> if (error != null) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span> LOG.warn("Refresh peer {} for {} on {} failed", peerId, type, targetServer, error);<a name="line.131"></a>
-<span class="sourceLineNo">132</span> this.succ = false;<a name="line.132"></a>
-<span class="sourceLineNo">133</span> } else {<a name="line.133"></a>
-<span class="sourceLineNo">134</span> LOG.info("Refresh peer {} for {} on {} suceeded", peerId, type, targetServer);<a name="line.134"></a>
-<span class="sourceLineNo">135</span> this.succ = true;<a name="line.135"></a>
-<span class="sourceLineNo">136</span> }<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span> event.wake(env.getProcedureScheduler());<a name="line.138"></a>
-<span class="sourceLineNo">139</span> event = null;<a name="line.139"></a>
-<span class="sourceLineNo">140</span> }<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span> @Override<a name="line.142"></a>
-<span class="sourceLineNo">143</span> public synchronized void remoteCallFailed(MasterProcedureEnv env, ServerName remote,<a name="line.143"></a>
-<span class="sourceLineNo">144</span> IOException exception) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span> complete(env, exception);<a name="line.145"></a>
-<span class="sourceLineNo">146</span> }<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span> @Override<a name="line.148"></a>
-<span class="sourceLineNo">149</span> public synchronized void remoteOperationCompleted(MasterProcedureEnv env) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span> complete(env, null);<a name="line.150"></a>
-<span class="sourceLineNo">151</span> }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span> @Override<a name="line.153"></a>
-<span class="sourceLineNo">154</span> public synchronized void remoteOperationFailed(MasterProcedureEnv env,<a name="line.154"></a>
-<span class="sourceLineNo">155</span> RemoteProcedureException error) {<a name="line.155"></a>
-<span class="sourceLineNo">156</span> complete(env, error);<a name="line.156"></a>
-<span class="sourceLineNo">157</span> }<a name="line.157"></a>
-<span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span> @Override<a name="line.159"></a>
-<span class="sourceLineNo">160</span> protected synchronized Procedure<MasterProcedureEnv>[] execute(MasterProcedureEnv env)<a name="line.160"></a>
-<span class="sourceLineNo">161</span> throws ProcedureYieldException, ProcedureSuspendedException, InterruptedException {<a name="line.161"></a>
-<span class="sourceLineNo">162</span> if (dispatched) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span> if (succ) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span> return null;<a name="line.164"></a>
-<span class="sourceLineNo">165</span> }<a name="line.165"></a>
-<span class="sourceLineNo">166</span> // retry<a name="line.166"></a>
-<span class="sourceLineNo">167</span> dispatched = false;<a name="line.167"></a>
-<span class="sourceLineNo">168</span> }<a name="line.168"></a>
-<span class="sourceLineNo">169</span> if (!env.getRemoteDispatcher().addOperationToNode(targetServer, this)) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span> LOG.info("Can not add remote operation for refreshing peer {} for {} to {}, " +<a name="line.170"></a>
-<span class="sourceLineNo">171</span> "this usually because the server is already dead, " +<a name="line.171"></a>
-<span class="sourceLineNo">172</span> "give up and mark the procedure as complete", peerId, type, targetServer);<a name="line.172"></a>
-<span class="sourceLineNo">173</span> return null;<a name="line.173"></a>
-<span class="sourceLineNo">174</span> }<a name="line.174"></a>
-<span class="sourceLineNo">175</span> dispatched = true;<a name="line.175"></a>
-<span class="sourceLineNo">176</span> event = new ProcedureEvent<>(this);<a name="line.176"></a>
-<span class="sourceLineNo">177</span> event.suspendIfNotReady(this);<a name="line.177"></a>
-<span class="sourceLineNo">178</span> throw new ProcedureSuspendedException();<a name="line.178"></a>
-<span class="sourceLineNo">179</span> }<a name="line.179"></a>
-<span class="sourceLineNo">180</span><a name="line.180"></a>
-<span class="sourceLineNo">181</span> @Override<a name="line.181"></a>
-<span class="sourceLineNo">182</span> protected void rollback(MasterProcedureEnv env) throws IOException, InterruptedException {<a name="line.182"></a>
-<span class="sourceLineNo">183</span> throw new UnsupportedOperationException();<a name="line.183"></a>
-<span class="sourceLineNo">184</span> }<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span> @Override<a name="line.186"></a>
-<span class="sourceLineNo">187</span> protected boolean abort(MasterProcedureEnv env) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span> // TODO: no correctness problem if we just ignore this, implement later.<a name="line.188"></a>
-<span class="sourceLineNo">189</span> return false;<a name="line.189"></a>
-<span class="sourceLineNo">190</span> }<a name="line.190"></a>
-<span class="sourceLineNo">191</span><a name="line.191"></a>
-<span class="sourceLineNo">192</span> @Override<a name="line.192"></a>
-<span class="sourceLineNo">193</span> protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.193"></a>
-<span class="sourceLineNo">194</span> serializer.serialize(<a name="line.194"></a>
-<span class="sourceLineNo">195</span> RefreshPeerStateData.newBuilder().setPeerId(peerId).setType(toPeerModificationType(type))<a name="line.195"></a>
-<span class="sourceLineNo">196</span> .setTargetServer(ProtobufUtil.toServerName(targetServer)).build());<a name="line.196"></a>
-<span class="sourceLineNo">197</span> }<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span> @Override<a name="line.199"></a>
-<span class="sourceLineNo">200</span> protected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.200"></a>
-<span class="sourceLineNo">201</span> RefreshPeerStateData data = serializer.deserialize(RefreshPeerStateData.class);<a name="line.201"></a>
-<span class="sourceLineNo">202</span> peerId = data.getPeerId();<a name="line.202"></a>
-<span class="sourceLineNo">203</span> type = toPeerOperationType(data.getType());<a name="line.203"></a>
-<span class="sourceLineNo">204</span> targetServer = ProtobufUtil.toServerName(data.getTargetServer());<a name="line.204"></a>
-<span class="sourceLineNo">205</span> }<a name="line.205"></a>
-<span class="sourceLineNo">206</span>}<a name="line.206"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.procedure2.FailedRemoteDispatchException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.procedure2.ProcedureEvent;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.procedure2.ProcedureYieldException;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteOperation;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureException;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.replication.regionserver.RefreshPeerCallable;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.slf4j.Logger;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.slf4j.LoggerFactory;<a name="line.37"></a>
+<span class="sourceLineNo">038</span><a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationType;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RefreshPeerParameter;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RefreshPeerStateData;<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>@InterfaceAudience.Private<a name="line.44"></a>
+<span class="sourceLineNo">045</span>public class RefreshPeerProcedure extends Procedure<MasterProcedureEnv><a name="line.45"></a>
+<span class="sourceLineNo">046</span> implements PeerProcedureInterface, RemoteProcedure<MasterProcedureEnv, ServerName> {<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span> private static final Logger LOG = LoggerFactory.getLogger(RefreshPeerProcedure.class);<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">050</span> private String peerId;<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span> private PeerOperationType type;<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span> @edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "IS2_INCONSISTENT_SYNC",<a name="line.54"></a>
+<span class="sourceLineNo">055</span> justification = "Will never change after construction")<a name="line.55"></a>
+<span class="sourceLineNo">056</span> private ServerName targetServer;<a name="line.56"></a>
+<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">058</span> private boolean dispatched;<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span> private ProcedureEvent<?> event;<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span> private boolean succ;<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span> public RefreshPeerProcedure() {<a name="line.64"></a>
+<span class="sourceLineNo">065</span> }<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span> public RefreshPeerProcedure(String peerId, PeerOperationType type, ServerName targetServer) {<a name="line.67"></a>
+<span class="sourceLineNo">068</span> this.peerId = peerId;<a name="line.68"></a>
+<span class="sourceLineNo">069</span> this.type = type;<a name="line.69"></a>
+<span class="sourceLineNo">070</span> this.targetServer = targetServer;<a name="line.70"></a>
+<span class="sourceLineNo">071</span> }<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span> @Override<a name="line.73"></a>
+<span class="sourceLineNo">074</span> public String getPeerId() {<a name="line.74"></a>
+<span class="sourceLineNo">075</span> return peerId;<a name="line.75"></a>
+<span class="sourceLineNo">076</span> }<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span> @Override<a name="line.78"></a>
+<span class="sourceLineNo">079</span> public PeerOperationType getPeerOperationType() {<a name="line.79"></a>
+<span class="sourceLineNo">080</span> return PeerOperationType.REFRESH;<a name="line.80"></a>
+<span class="sourceLineNo">081</span> }<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span> private static PeerModificationType toPeerModificationType(PeerOperationType type) {<a name="line.83"></a>
+<span class="sourceLineNo">084</span> switch (type) {<a name="line.84"></a>
+<span class="sourceLineNo">085</span> case ADD:<a name="line.85"></a>
+<span class="sourceLineNo">086</span> return PeerModificationType.ADD_PEER;<a name="line.86"></a>
+<span class="sourceLineNo">087</span> case REMOVE:<a name="line.87"></a>
+<span class="sourceLineNo">088</span> return PeerModificationType.REMOVE_PEER;<a name="line.88"></a>
+<span class="sourceLineNo">089</span> case ENABLE:<a name="line.89"></a>
+<span class="sourceLineNo">090</span> return PeerModificationType.ENABLE_PEER;<a name="line.90"></a>
+<span class="sourceLineNo">091</span> case DISABLE:<a name="line.91"></a>
+<span class="sourceLineNo">092</span> return PeerModificationType.DISABLE_PEER;<a name="line.92"></a>
+<span class="sourceLineNo">093</span> case UPDATE_CONFIG:<a name="line.93"></a>
+<span class="sourceLineNo">094</span> return PeerModificationType.UPDATE_PEER_CONFIG;<a name="line.94"></a>
+<span class="sourceLineNo">095</span> default:<a name="line.95"></a>
+<span class="sourceLineNo">096</span> throw new IllegalArgumentException("Unknown type: " + type);<a name="line.96"></a>
+<span class="sourceLineNo">097</span> }<a name="line.97"></a>
+<span class="sourceLineNo">098</span> }<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span> private static PeerOperationType toPeerOperationType(PeerModificationType type) {<a name="line.100"></a>
+<span class="sourceLineNo">101</span> switch (type) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span> case ADD_PEER:<a name="line.102"></a>
+<span class="sourceLineNo">103</span> return PeerOperationType.ADD;<a name="line.103"></a>
+<span class="sourceLineNo">104</span> case REMOVE_PEER:<a name="line.104"></a>
+<span class="sourceLineNo">105</span> return PeerOperationType.REMOVE;<a name="line.105"></a>
+<span class="sourceLineNo">106</span> case ENABLE_PEER:<a name="line.106"></a>
+<span class="sourceLineNo">107</span> return PeerOperationType.ENABLE;<a name="line.107"></a>
+<span class="sourceLineNo">108</span> case DISABLE_PEER:<a name="line.108"></a>
+<span class="sourceLineNo">109</span> return PeerOperationType.DISABLE;<a name="line.109"></a>
+<span class="sourceLineNo">110</span> case UPDATE_PEER_CONFIG:<a name="line.110"></a>
+<span class="sourceLineNo">111</span> return PeerOperationType.UPDATE_CONFIG;<a name="line.111"></a>
+<span class="sourceLineNo">112</span> default:<a name="line.112"></a>
+<span class="sourceLineNo">113</span> throw new IllegalArgumentException("Unknown type: " + type);<a name="line.113"></a>
+<span class="sourceLineNo">114</span> }<a name="line.114"></a>
+<span class="sourceLineNo">115</span> }<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span> @Override<a name="line.117"></a>
+<span class="sourceLineNo">118</span> public RemoteOperation remoteCallBuild(MasterProcedureEnv env, ServerName remote) {<a name="line.118"></a>
+<span class="sourceLineNo">119</span> assert targetServer.equals(remote);<a name="line.119"></a>
+<span class="sourceLineNo">120</span> return new ServerOperation(this, getProcId(), RefreshPeerCallable.class,<a name="line.120"></a>
+<span class="sourceLineNo">121</span> RefreshPeerParameter.newBuilder().setPeerId(peerId).setType(toPeerModificationType(type))<a name="line.121"></a>
+<span class="sourceLineNo">122</span> .setTargetServer(ProtobufUtil.toServerName(remote)).build().toByteArray());<a name="line.122"></a>
+<span class="sourceLineNo">123</span> }<a name="line.123"></a>
+<span class="sourceLineNo">124</span><a name="line.124"></a>
+<span class="sourceLineNo">125</span> private void complete(MasterProcedureEnv env, Throwable error) {<a name="line.125"></a>
+<span class="sourceLineNo">126</span> if (event == null) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span> LOG.warn("procedure event for {} is null, maybe the procedure is created when recovery",<a name="line.127"></a>
+<span class="sourceLineNo">128</span> getProcId());<a name="line.128"></a>
+<span class="sourceLineNo">129</span> return;<a name="line.129"></a>
+<span class="sourceLineNo">130</span> }<a name="line.130"></a>
+<span class="sourceLineNo">131</span> if (error != null) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span> LOG.warn("Refresh peer {} for {} on {} failed", peerId, type, targetServer, error);<a name="line.132"></a>
+<span class="sourceLineNo">133</span> this.succ = false;<a name="line.133"></a>
+<span class="sourceLineNo">134</span> } else {<a name="line.134"></a>
+<span class="sourceLineNo">135</span> LOG.info("Refresh peer {} for {} on {} suceeded", peerId, type, targetServer);<a name="line.135"></a>
+<span class="sourceLineNo">136</span> this.succ = true;<a name="line.136"></a>
+<span class="sourceLineNo">137</span> }<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span> event.wake(env.getProcedureScheduler());<a name="line.139"></a>
+<span class="sourceLineNo">140</span> event = null;<a name="line.140"></a>
+<span class="sourceLineNo">141</span> }<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span> @Override<a name="line.143"></a>
+<span class="sourceLineNo">144</span> public synchronized void remoteCallFailed(MasterProcedureEnv env, ServerName remote,<a name="line.144"></a>
+<span class="sourceLineNo">145</span> IOException exception) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span> complete(env, exception);<a name="line.146"></a>
+<span class="sourceLineNo">147</span> }<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span> @Override<a name="line.149"></a>
+<span class="sourceLineNo">150</span> public synchronized void remoteOperationCompleted(MasterProcedureEnv env) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span> complete(env, null);<a name="line.151"></a>
+<span class="sourceLineNo">152</span> }<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span> @Override<a name="line.154"></a>
+<span class="sourceLineNo">155</span> public synchronized void remoteOperationFailed(MasterProcedureEnv env,<a name="line.155"></a>
+<span class="sourceLineNo">156</span> RemoteProcedureException error) {<a name="line.156"></a>
+<span class="sourceLineNo">157</span> complete(env, error);<a name="line.157"></a>
+<span class="sourceLineNo">158</span> }<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span> @Override<a name="line.160"></a>
+<span class="sourceLineNo">161</span> protected synchronized Procedure<MasterProcedureEnv>[] execute(MasterProcedureEnv env)<a name="line.161"></a>
+<span class="sourceLineNo">162</span> throws ProcedureYieldException, ProcedureSuspendedException, InterruptedException {<a name="line.162"></a>
+<span class="sourceLineNo">163</span> if (dispatched) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span> if (succ) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span> return null;<a name="line.165"></a>
+<span class="sourceLineNo">166</span> }<a name="line.166"></a>
+<span class="sourceLineNo">167</span> // retry<a name="line.167"></a>
+<span class="sourceLineNo">168</span> dispatched = false;<a name="line.168"></a>
+<span class="sourceLineNo">169</span> }<a name="line.169"></a>
+<span class="sourceLineNo">170</span> try {<a name="line.170"></a>
+<span class="sourceLineNo">171</span> env.getRemoteDispatcher().addOperationToNode(targetServer, this);<a name="line.171"></a>
+<span class="sourceLineNo">172</span> } catch (FailedRemoteDispatchException frde) {<a name="line.172"></a>
+<span class="sourceLineNo">173</span> LOG.info("Can not add remote operation for refreshing peer {} for {} to {}, " +<a name="line.173"></a>
+<span class="sourceLineNo">174</span> "this is usually because the server is already dead, " +<a name="line.174"></a>
+<span class="sourceLineNo">175</span> "give up and mark the procedure as complete", peerId, type, targetServer, frde);<a name="line.175"></a>
+<span class="sourceLineNo">176</span> return null;<a name="line.176"></a>
+<span class="sourceLineNo">177</span> }<a name="line.177"></a>
+<span class="sourceLineNo">178</span> dispatched = true;<a name="line.178"></a>
+<span class="sourceLineNo">179</span> event = new ProcedureEvent<>(this);<a name="line.179"></a>
+<span class="sourceLineNo">180</span> event.suspendIfNotReady(this);<a name="line.180"></a>
+<span class="sourceLineNo">181</span> throw new ProcedureSuspendedException();<a name="line.181"></a>
+<span class="sourceLineNo">182</span> }<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span> @Override<a name="line.184"></a>
+<span class="sourceLineNo">185</span> protected void rollback(MasterProcedureEnv env) throws IOException, InterruptedException {<a name="line.185"></a>
+<span class="sourceLineNo">186</span> throw new UnsupportedOperationException();<a name="line.186"></a>
+<span class="sourceLineNo">187</span> }<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span> @Override<a name="line.189"></a>
+<span class="sourceLineNo">190</span> protected boolean abort(MasterProcedureEnv env) {<a name="line.190"></a>
+<span class="sourceLineNo">191</span> // TODO: no correctness problem if we just ignore this, implement later.<a name="line.191"></a>
+<span class="sourceLineNo">192</span> return false;<a name="line.192"></a>
+<span class="sourceLineNo">193</span> }<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span> @Override<a name="line.195"></a>
+<span class="sourceLineNo">196</span> protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.196"></a>
+<span class="sourceLineNo">197</span> serializer.serialize(<a name="line.197"></a>
+<span class="sourceLineNo">198</span> RefreshPeerStateData.newBuilder().setPeerId(peerId).setType(toPeerModificationType(type))<a name="line.198"></a>
+<span class="sourceLineNo">199</span> .setTargetServer(ProtobufUtil.toServerName(targetServer)).build());<a name="line.199"></a>
+<span class="sourceLineNo">200</span> }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span> @Override<a name="line.202"></a>
+<span class="sourceLineNo">203</span> protected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.203"></a>
+<span class="sourceLineNo">204</span> RefreshPeerStateData data = serializer.deserialize(RefreshPeerStateData.class);<a name="line.204"></a>
+<span class="sourceLineNo">205</span> peerId = data.getPeerId();<a name="line.205"></a>
+<span class="sourceLineNo">206</span> type = toPeerOperationType(data.getType());<a name="line.206"></a>
+<span class="sourceLineNo">207</span> targetServer = ProtobufUtil.toServerName(data.getTargetServer());<a name="line.207"></a>
+<span class="sourceLineNo">208</span> }<a name="line.208"></a>
+<span class="sourceLineNo">209</span>}<a name="line.209"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/BadProcedureException.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/BadProcedureException.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/BadProcedureException.html
index 0cfcfa7..275098a 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/BadProcedureException.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/BadProcedureException.html
@@ -6,7 +6,7 @@
</head>
<body>
<div class="sourceContainer">
-<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
<span class="sourceLineNo">003</span> * or more contributor license agreements. See the NOTICE file<a name="line.3"></a>
<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html
new file mode 100644
index 0000000..99aaed5
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html
@@ -0,0 +1,105 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements. See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership. The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License. You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> * http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.procedure2;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.21"></a>
+<span class="sourceLineNo">022</span><a name="line.22"></a>
+<span class="sourceLineNo">023</span>/**<a name="line.23"></a>
+<span class="sourceLineNo">024</span> * Used internally signaling failed queue of a remote procedure<a name="line.24"></a>
+<span class="sourceLineNo">025</span> * operation.<a name="line.25"></a>
+<span class="sourceLineNo">026</span> */<a name="line.26"></a>
+<span class="sourceLineNo">027</span>@SuppressWarnings("serial")<a name="line.27"></a>
+<span class="sourceLineNo">028</span>@InterfaceAudience.Private<a name="line.28"></a>
+<span class="sourceLineNo">029</span>public class FailedRemoteDispatchException extends HBaseIOException {<a name="line.29"></a>
+<span class="sourceLineNo">030</span> public FailedRemoteDispatchException(String msg) {<a name="line.30"></a>
+<span class="sourceLineNo">031</span> super(msg);<a name="line.31"></a>
+<span class="sourceLineNo">032</span> }<a name="line.32"></a>
+<span class="sourceLineNo">033</span>}<a name="line.33"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html
new file mode 100644
index 0000000..4022e42
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html
@@ -0,0 +1,105 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements. See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership. The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License. You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> * http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.procedure2;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.20"></a>
+<span class="sourceLineNo">021</span><a name="line.21"></a>
+<span class="sourceLineNo">022</span>/**<a name="line.22"></a>
+<span class="sourceLineNo">023</span> * Used internally signaling failed queue of a remote procedure operation.<a name="line.23"></a>
+<span class="sourceLineNo">024</span> * In particular, no dispatch Node was found for the passed server name<a name="line.24"></a>
+<span class="sourceLineNo">025</span> * key AFTER queuing dispatch.<a name="line.25"></a>
+<span class="sourceLineNo">026</span> */<a name="line.26"></a>
+<span class="sourceLineNo">027</span>@SuppressWarnings("serial")<a name="line.27"></a>
+<span class="sourceLineNo">028</span>@InterfaceAudience.Private<a name="line.28"></a>
+<span class="sourceLineNo">029</span>public class NoNodeDispatchException extends FailedRemoteDispatchException {<a name="line.29"></a>
+<span class="sourceLineNo">030</span> public NoNodeDispatchException(String msg) {<a name="line.30"></a>
+<span class="sourceLineNo">031</span> super(msg);<a name="line.31"></a>
+<span class="sourceLineNo">032</span> }<a name="line.32"></a>
+<span class="sourceLineNo">033</span>}<a name="line.33"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html
new file mode 100644
index 0000000..185a7ea
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html
@@ -0,0 +1,105 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements. See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership. The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License. You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> * http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.procedure2;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.20"></a>
+<span class="sourceLineNo">021</span><a name="line.21"></a>
+<span class="sourceLineNo">022</span>/**<a name="line.22"></a>
+<span class="sourceLineNo">023</span> * Used internally signaling failed queue of a remote procedure operation.<a name="line.23"></a>
+<span class="sourceLineNo">024</span> * In particular, no dispatch Node was found for the passed server name<a name="line.24"></a>
+<span class="sourceLineNo">025</span> * key.<a name="line.25"></a>
+<span class="sourceLineNo">026</span> */<a name="line.26"></a>
+<span class="sourceLineNo">027</span>@SuppressWarnings("serial")<a name="line.27"></a>
+<span class="sourceLineNo">028</span>@InterfaceAudience.Private<a name="line.28"></a>
+<span class="sourceLineNo">029</span>public class NoServerDispatchException extends FailedRemoteDispatchException {<a name="line.29"></a>
+<span class="sourceLineNo">030</span> public NoServerDispatchException(String msg) {<a name="line.30"></a>
+<span class="sourceLineNo">031</span> super(msg);<a name="line.31"></a>
+<span class="sourceLineNo">032</span> }<a name="line.32"></a>
+<span class="sourceLineNo">033</span>}<a name="line.33"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html
new file mode 100644
index 0000000..7d7be3f
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html
@@ -0,0 +1,104 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements. See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership. The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License. You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> * http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.procedure2;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.20"></a>
+<span class="sourceLineNo">021</span><a name="line.21"></a>
+<span class="sourceLineNo">022</span>/**<a name="line.22"></a>
+<span class="sourceLineNo">023</span> * Used internally signaling failed queue of a remote procedure operation.<a name="line.23"></a>
+<span class="sourceLineNo">024</span> * The target server passed is null.<a name="line.24"></a>
+<span class="sourceLineNo">025</span> */<a name="line.25"></a>
+<span class="sourceLineNo">026</span>@SuppressWarnings("serial")<a name="line.26"></a>
+<span class="sourceLineNo">027</span>@InterfaceAudience.Private<a name="line.27"></a>
+<span class="sourceLineNo">028</span>public class NullTargetServerDispatchException extends FailedRemoteDispatchException {<a name="line.28"></a>
+<span class="sourceLineNo">029</span> public NullTargetServerDispatchException(String msg) {<a name="line.29"></a>
+<span class="sourceLineNo">030</span> super(msg);<a name="line.30"></a>
+<span class="sourceLineNo">031</span> }<a name="line.31"></a>
+<span class="sourceLineNo">032</span>}<a name="line.32"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>
[25/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/master/MasterServices.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/MasterServices.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/MasterServices.html
index d1c6123..23d8d73 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/MasterServices.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/MasterServices.html
@@ -360,161 +360,162 @@
<span class="sourceLineNo">352</span><a name="line.352"></a>
<span class="sourceLineNo">353</span> /**<a name="line.353"></a>
<span class="sourceLineNo">354</span> * @return true if master is in maintanceMode<a name="line.354"></a>
-<span class="sourceLineNo">355</span> */<a name="line.355"></a>
-<span class="sourceLineNo">356</span> boolean isInMaintenanceMode();<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span> /**<a name="line.358"></a>
-<span class="sourceLineNo">359</span> * Abort a procedure.<a name="line.359"></a>
-<span class="sourceLineNo">360</span> * @param procId ID of the procedure<a name="line.360"></a>
-<span class="sourceLineNo">361</span> * @param mayInterruptIfRunning if the proc completed at least one step, should it be aborted?<a name="line.361"></a>
-<span class="sourceLineNo">362</span> * @return true if aborted, false if procedure already completed or does not exist<a name="line.362"></a>
-<span class="sourceLineNo">363</span> * @throws IOException<a name="line.363"></a>
-<span class="sourceLineNo">364</span> */<a name="line.364"></a>
-<span class="sourceLineNo">365</span> public boolean abortProcedure(final long procId, final boolean mayInterruptIfRunning)<a name="line.365"></a>
-<span class="sourceLineNo">366</span> throws IOException;<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span> /**<a name="line.368"></a>
-<span class="sourceLineNo">369</span> * Get procedures<a name="line.369"></a>
-<span class="sourceLineNo">370</span> * @return procedure list<a name="line.370"></a>
-<span class="sourceLineNo">371</span> * @throws IOException<a name="line.371"></a>
-<span class="sourceLineNo">372</span> */<a name="line.372"></a>
-<span class="sourceLineNo">373</span> public List<Procedure<?>> getProcedures() throws IOException;<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span> /**<a name="line.375"></a>
-<span class="sourceLineNo">376</span> * Get locks<a name="line.376"></a>
-<span class="sourceLineNo">377</span> * @return lock list<a name="line.377"></a>
-<span class="sourceLineNo">378</span> * @throws IOException<a name="line.378"></a>
-<span class="sourceLineNo">379</span> */<a name="line.379"></a>
-<span class="sourceLineNo">380</span> public List<LockedResource> getLocks() throws IOException;<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> /**<a name="line.382"></a>
-<span class="sourceLineNo">383</span> * Get list of table descriptors by namespace<a name="line.383"></a>
-<span class="sourceLineNo">384</span> * @param name namespace name<a name="line.384"></a>
-<span class="sourceLineNo">385</span> * @return descriptors<a name="line.385"></a>
-<span class="sourceLineNo">386</span> * @throws IOException<a name="line.386"></a>
-<span class="sourceLineNo">387</span> */<a name="line.387"></a>
-<span class="sourceLineNo">388</span> public List<TableDescriptor> listTableDescriptorsByNamespace(String name) throws IOException;<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span> /**<a name="line.390"></a>
-<span class="sourceLineNo">391</span> * Get list of table names by namespace<a name="line.391"></a>
-<span class="sourceLineNo">392</span> * @param name namespace name<a name="line.392"></a>
-<span class="sourceLineNo">393</span> * @return table names<a name="line.393"></a>
-<span class="sourceLineNo">394</span> * @throws IOException<a name="line.394"></a>
-<span class="sourceLineNo">395</span> */<a name="line.395"></a>
-<span class="sourceLineNo">396</span> public List<TableName> listTableNamesByNamespace(String name) throws IOException;<a name="line.396"></a>
-<span class="sourceLineNo">397</span><a name="line.397"></a>
-<span class="sourceLineNo">398</span> /**<a name="line.398"></a>
-<span class="sourceLineNo">399</span> * @param table the table for which last successful major compaction time is queried<a name="line.399"></a>
-<span class="sourceLineNo">400</span> * @return the timestamp of the last successful major compaction for the passed table,<a name="line.400"></a>
-<span class="sourceLineNo">401</span> * or 0 if no HFile resulting from a major compaction exists<a name="line.401"></a>
-<span class="sourceLineNo">402</span> * @throws IOException<a name="line.402"></a>
-<span class="sourceLineNo">403</span> */<a name="line.403"></a>
-<span class="sourceLineNo">404</span> public long getLastMajorCompactionTimestamp(TableName table) throws IOException;<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span> /**<a name="line.406"></a>
-<span class="sourceLineNo">407</span> * @param regionName<a name="line.407"></a>
-<span class="sourceLineNo">408</span> * @return the timestamp of the last successful major compaction for the passed region<a name="line.408"></a>
-<span class="sourceLineNo">409</span> * or 0 if no HFile resulting from a major compaction exists<a name="line.409"></a>
-<span class="sourceLineNo">410</span> * @throws IOException<a name="line.410"></a>
-<span class="sourceLineNo">411</span> */<a name="line.411"></a>
-<span class="sourceLineNo">412</span> public long getLastMajorCompactionTimestampForRegion(byte[] regionName) throws IOException;<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span> /**<a name="line.414"></a>
-<span class="sourceLineNo">415</span> * @return load balancer<a name="line.415"></a>
-<span class="sourceLineNo">416</span> */<a name="line.416"></a>
-<span class="sourceLineNo">417</span> public LoadBalancer getLoadBalancer();<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span> boolean isSplitOrMergeEnabled(MasterSwitchType switchType);<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span> /**<a name="line.421"></a>
-<span class="sourceLineNo">422</span> * @return Favored Nodes Manager<a name="line.422"></a>
-<span class="sourceLineNo">423</span> */<a name="line.423"></a>
-<span class="sourceLineNo">424</span> public FavoredNodesManager getFavoredNodesManager();<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span> /**<a name="line.426"></a>
-<span class="sourceLineNo">427</span> * Add a new replication peer for replicating data to slave cluster<a name="line.427"></a>
-<span class="sourceLineNo">428</span> * @param peerId a short name that identifies the peer<a name="line.428"></a>
-<span class="sourceLineNo">429</span> * @param peerConfig configuration for the replication slave cluster<a name="line.429"></a>
-<span class="sourceLineNo">430</span> * @param enabled peer state, true if ENABLED and false if DISABLED<a name="line.430"></a>
-<span class="sourceLineNo">431</span> */<a name="line.431"></a>
-<span class="sourceLineNo">432</span> long addReplicationPeer(String peerId, ReplicationPeerConfig peerConfig, boolean enabled)<a name="line.432"></a>
-<span class="sourceLineNo">433</span> throws ReplicationException, IOException;<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span> /**<a name="line.435"></a>
-<span class="sourceLineNo">436</span> * Removes a peer and stops the replication<a name="line.436"></a>
-<span class="sourceLineNo">437</span> * @param peerId a short name that identifies the peer<a name="line.437"></a>
-<span class="sourceLineNo">438</span> */<a name="line.438"></a>
-<span class="sourceLineNo">439</span> long removeReplicationPeer(String peerId) throws ReplicationException, IOException;<a name="line.439"></a>
-<span class="sourceLineNo">440</span><a name="line.440"></a>
-<span class="sourceLineNo">441</span> /**<a name="line.441"></a>
-<span class="sourceLineNo">442</span> * Restart the replication stream to the specified peer<a name="line.442"></a>
-<span class="sourceLineNo">443</span> * @param peerId a short name that identifies the peer<a name="line.443"></a>
-<span class="sourceLineNo">444</span> */<a name="line.444"></a>
-<span class="sourceLineNo">445</span> long enableReplicationPeer(String peerId) throws ReplicationException, IOException;<a name="line.445"></a>
-<span class="sourceLineNo">446</span><a name="line.446"></a>
-<span class="sourceLineNo">447</span> /**<a name="line.447"></a>
-<span class="sourceLineNo">448</span> * Stop the replication stream to the specified peer<a name="line.448"></a>
-<span class="sourceLineNo">449</span> * @param peerId a short name that identifies the peer<a name="line.449"></a>
-<span class="sourceLineNo">450</span> */<a name="line.450"></a>
-<span class="sourceLineNo">451</span> long disableReplicationPeer(String peerId) throws ReplicationException, IOException;<a name="line.451"></a>
-<span class="sourceLineNo">452</span><a name="line.452"></a>
-<span class="sourceLineNo">453</span> /**<a name="line.453"></a>
-<span class="sourceLineNo">454</span> * Returns the configured ReplicationPeerConfig for the specified peer<a name="line.454"></a>
-<span class="sourceLineNo">455</span> * @param peerId a short name that identifies the peer<a name="line.455"></a>
-<span class="sourceLineNo">456</span> * @return ReplicationPeerConfig for the peer<a name="line.456"></a>
-<span class="sourceLineNo">457</span> */<a name="line.457"></a>
-<span class="sourceLineNo">458</span> ReplicationPeerConfig getReplicationPeerConfig(String peerId) throws ReplicationException,<a name="line.458"></a>
-<span class="sourceLineNo">459</span> IOException;<a name="line.459"></a>
-<span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span> /**<a name="line.461"></a>
-<span class="sourceLineNo">462</span> * Returns the {@link ReplicationPeerManager}.<a name="line.462"></a>
-<span class="sourceLineNo">463</span> */<a name="line.463"></a>
-<span class="sourceLineNo">464</span> ReplicationPeerManager getReplicationPeerManager();<a name="line.464"></a>
-<span class="sourceLineNo">465</span><a name="line.465"></a>
-<span class="sourceLineNo">466</span> /**<a name="line.466"></a>
-<span class="sourceLineNo">467</span> * Update the peerConfig for the specified peer<a name="line.467"></a>
-<span class="sourceLineNo">468</span> * @param peerId a short name that identifies the peer<a name="line.468"></a>
-<span class="sourceLineNo">469</span> * @param peerConfig new config for the peer<a name="line.469"></a>
-<span class="sourceLineNo">470</span> */<a name="line.470"></a>
-<span class="sourceLineNo">471</span> long updateReplicationPeerConfig(String peerId, ReplicationPeerConfig peerConfig)<a name="line.471"></a>
-<span class="sourceLineNo">472</span> throws ReplicationException, IOException;<a name="line.472"></a>
-<span class="sourceLineNo">473</span><a name="line.473"></a>
-<span class="sourceLineNo">474</span> /**<a name="line.474"></a>
-<span class="sourceLineNo">475</span> * Return a list of replication peers.<a name="line.475"></a>
-<span class="sourceLineNo">476</span> * @param regex The regular expression to match peer id<a name="line.476"></a>
-<span class="sourceLineNo">477</span> * @return a list of replication peers description<a name="line.477"></a>
-<span class="sourceLineNo">478</span> */<a name="line.478"></a>
-<span class="sourceLineNo">479</span> List<ReplicationPeerDescription> listReplicationPeers(String regex) throws ReplicationException,<a name="line.479"></a>
-<span class="sourceLineNo">480</span> IOException;<a name="line.480"></a>
-<span class="sourceLineNo">481</span><a name="line.481"></a>
-<span class="sourceLineNo">482</span> /**<a name="line.482"></a>
-<span class="sourceLineNo">483</span> * @return {@link LockManager} to lock namespaces/tables/regions.<a name="line.483"></a>
-<span class="sourceLineNo">484</span> */<a name="line.484"></a>
-<span class="sourceLineNo">485</span> LockManager getLockManager();<a name="line.485"></a>
-<span class="sourceLineNo">486</span><a name="line.486"></a>
-<span class="sourceLineNo">487</span> public String getRegionServerVersion(final ServerName sn);<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span> /**<a name="line.489"></a>
-<span class="sourceLineNo">490</span> * Called when a new RegionServer is added to the cluster.<a name="line.490"></a>
-<span class="sourceLineNo">491</span> * Checks if new server has a newer version than any existing server and will move system tables<a name="line.491"></a>
-<span class="sourceLineNo">492</span> * there if so.<a name="line.492"></a>
-<span class="sourceLineNo">493</span> */<a name="line.493"></a>
-<span class="sourceLineNo">494</span> public void checkIfShouldMoveSystemRegionAsync();<a name="line.494"></a>
-<span class="sourceLineNo">495</span><a name="line.495"></a>
-<span class="sourceLineNo">496</span> /**<a name="line.496"></a>
-<span class="sourceLineNo">497</span> * Recover meta table. Will result in no-op is meta is already initialized. Any code that has<a name="line.497"></a>
-<span class="sourceLineNo">498</span> * access to master and requires to access meta during process initialization can call this<a name="line.498"></a>
-<span class="sourceLineNo">499</span> * method to make sure meta is initialized.<a name="line.499"></a>
-<span class="sourceLineNo">500</span> */<a name="line.500"></a>
-<span class="sourceLineNo">501</span> boolean recoverMeta() throws IOException;<a name="line.501"></a>
-<span class="sourceLineNo">502</span><a name="line.502"></a>
-<span class="sourceLineNo">503</span> String getClientIdAuditPrefix();<a name="line.503"></a>
-<span class="sourceLineNo">504</span><a name="line.504"></a>
-<span class="sourceLineNo">505</span> /**<a name="line.505"></a>
-<span class="sourceLineNo">506</span> * @return True if cluster is up; false if cluster is not up (we are shutting down).<a name="line.506"></a>
-<span class="sourceLineNo">507</span> */<a name="line.507"></a>
-<span class="sourceLineNo">508</span> boolean isClusterUp();<a name="line.508"></a>
-<span class="sourceLineNo">509</span>}<a name="line.509"></a>
+<span class="sourceLineNo">355</span> * @throws IOException if the inquiry failed due to an IO problem<a name="line.355"></a>
+<span class="sourceLineNo">356</span> */<a name="line.356"></a>
+<span class="sourceLineNo">357</span> boolean isInMaintenanceMode() throws IOException;<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span> /**<a name="line.359"></a>
+<span class="sourceLineNo">360</span> * Abort a procedure.<a name="line.360"></a>
+<span class="sourceLineNo">361</span> * @param procId ID of the procedure<a name="line.361"></a>
+<span class="sourceLineNo">362</span> * @param mayInterruptIfRunning if the proc completed at least one step, should it be aborted?<a name="line.362"></a>
+<span class="sourceLineNo">363</span> * @return true if aborted, false if procedure already completed or does not exist<a name="line.363"></a>
+<span class="sourceLineNo">364</span> * @throws IOException<a name="line.364"></a>
+<span class="sourceLineNo">365</span> */<a name="line.365"></a>
+<span class="sourceLineNo">366</span> public boolean abortProcedure(final long procId, final boolean mayInterruptIfRunning)<a name="line.366"></a>
+<span class="sourceLineNo">367</span> throws IOException;<a name="line.367"></a>
+<span class="sourceLineNo">368</span><a name="line.368"></a>
+<span class="sourceLineNo">369</span> /**<a name="line.369"></a>
+<span class="sourceLineNo">370</span> * Get procedures<a name="line.370"></a>
+<span class="sourceLineNo">371</span> * @return procedure list<a name="line.371"></a>
+<span class="sourceLineNo">372</span> * @throws IOException<a name="line.372"></a>
+<span class="sourceLineNo">373</span> */<a name="line.373"></a>
+<span class="sourceLineNo">374</span> public List<Procedure<?>> getProcedures() throws IOException;<a name="line.374"></a>
+<span class="sourceLineNo">375</span><a name="line.375"></a>
+<span class="sourceLineNo">376</span> /**<a name="line.376"></a>
+<span class="sourceLineNo">377</span> * Get locks<a name="line.377"></a>
+<span class="sourceLineNo">378</span> * @return lock list<a name="line.378"></a>
+<span class="sourceLineNo">379</span> * @throws IOException<a name="line.379"></a>
+<span class="sourceLineNo">380</span> */<a name="line.380"></a>
+<span class="sourceLineNo">381</span> public List<LockedResource> getLocks() throws IOException;<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span> /**<a name="line.383"></a>
+<span class="sourceLineNo">384</span> * Get list of table descriptors by namespace<a name="line.384"></a>
+<span class="sourceLineNo">385</span> * @param name namespace name<a name="line.385"></a>
+<span class="sourceLineNo">386</span> * @return descriptors<a name="line.386"></a>
+<span class="sourceLineNo">387</span> * @throws IOException<a name="line.387"></a>
+<span class="sourceLineNo">388</span> */<a name="line.388"></a>
+<span class="sourceLineNo">389</span> public List<TableDescriptor> listTableDescriptorsByNamespace(String name) throws IOException;<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span> /**<a name="line.391"></a>
+<span class="sourceLineNo">392</span> * Get list of table names by namespace<a name="line.392"></a>
+<span class="sourceLineNo">393</span> * @param name namespace name<a name="line.393"></a>
+<span class="sourceLineNo">394</span> * @return table names<a name="line.394"></a>
+<span class="sourceLineNo">395</span> * @throws IOException<a name="line.395"></a>
+<span class="sourceLineNo">396</span> */<a name="line.396"></a>
+<span class="sourceLineNo">397</span> public List<TableName> listTableNamesByNamespace(String name) throws IOException;<a name="line.397"></a>
+<span class="sourceLineNo">398</span><a name="line.398"></a>
+<span class="sourceLineNo">399</span> /**<a name="line.399"></a>
+<span class="sourceLineNo">400</span> * @param table the table for which last successful major compaction time is queried<a name="line.400"></a>
+<span class="sourceLineNo">401</span> * @return the timestamp of the last successful major compaction for the passed table,<a name="line.401"></a>
+<span class="sourceLineNo">402</span> * or 0 if no HFile resulting from a major compaction exists<a name="line.402"></a>
+<span class="sourceLineNo">403</span> * @throws IOException<a name="line.403"></a>
+<span class="sourceLineNo">404</span> */<a name="line.404"></a>
+<span class="sourceLineNo">405</span> public long getLastMajorCompactionTimestamp(TableName table) throws IOException;<a name="line.405"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span> /**<a name="line.407"></a>
+<span class="sourceLineNo">408</span> * @param regionName<a name="line.408"></a>
+<span class="sourceLineNo">409</span> * @return the timestamp of the last successful major compaction for the passed region<a name="line.409"></a>
+<span class="sourceLineNo">410</span> * or 0 if no HFile resulting from a major compaction exists<a name="line.410"></a>
+<span class="sourceLineNo">411</span> * @throws IOException<a name="line.411"></a>
+<span class="sourceLineNo">412</span> */<a name="line.412"></a>
+<span class="sourceLineNo">413</span> public long getLastMajorCompactionTimestampForRegion(byte[] regionName) throws IOException;<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span> /**<a name="line.415"></a>
+<span class="sourceLineNo">416</span> * @return load balancer<a name="line.416"></a>
+<span class="sourceLineNo">417</span> */<a name="line.417"></a>
+<span class="sourceLineNo">418</span> public LoadBalancer getLoadBalancer();<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span> boolean isSplitOrMergeEnabled(MasterSwitchType switchType);<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span> /**<a name="line.422"></a>
+<span class="sourceLineNo">423</span> * @return Favored Nodes Manager<a name="line.423"></a>
+<span class="sourceLineNo">424</span> */<a name="line.424"></a>
+<span class="sourceLineNo">425</span> public FavoredNodesManager getFavoredNodesManager();<a name="line.425"></a>
+<span class="sourceLineNo">426</span><a name="line.426"></a>
+<span class="sourceLineNo">427</span> /**<a name="line.427"></a>
+<span class="sourceLineNo">428</span> * Add a new replication peer for replicating data to slave cluster<a name="line.428"></a>
+<span class="sourceLineNo">429</span> * @param peerId a short name that identifies the peer<a name="line.429"></a>
+<span class="sourceLineNo">430</span> * @param peerConfig configuration for the replication slave cluster<a name="line.430"></a>
+<span class="sourceLineNo">431</span> * @param enabled peer state, true if ENABLED and false if DISABLED<a name="line.431"></a>
+<span class="sourceLineNo">432</span> */<a name="line.432"></a>
+<span class="sourceLineNo">433</span> long addReplicationPeer(String peerId, ReplicationPeerConfig peerConfig, boolean enabled)<a name="line.433"></a>
+<span class="sourceLineNo">434</span> throws ReplicationException, IOException;<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span> /**<a name="line.436"></a>
+<span class="sourceLineNo">437</span> * Removes a peer and stops the replication<a name="line.437"></a>
+<span class="sourceLineNo">438</span> * @param peerId a short name that identifies the peer<a name="line.438"></a>
+<span class="sourceLineNo">439</span> */<a name="line.439"></a>
+<span class="sourceLineNo">440</span> long removeReplicationPeer(String peerId) throws ReplicationException, IOException;<a name="line.440"></a>
+<span class="sourceLineNo">441</span><a name="line.441"></a>
+<span class="sourceLineNo">442</span> /**<a name="line.442"></a>
+<span class="sourceLineNo">443</span> * Restart the replication stream to the specified peer<a name="line.443"></a>
+<span class="sourceLineNo">444</span> * @param peerId a short name that identifies the peer<a name="line.444"></a>
+<span class="sourceLineNo">445</span> */<a name="line.445"></a>
+<span class="sourceLineNo">446</span> long enableReplicationPeer(String peerId) throws ReplicationException, IOException;<a name="line.446"></a>
+<span class="sourceLineNo">447</span><a name="line.447"></a>
+<span class="sourceLineNo">448</span> /**<a name="line.448"></a>
+<span class="sourceLineNo">449</span> * Stop the replication stream to the specified peer<a name="line.449"></a>
+<span class="sourceLineNo">450</span> * @param peerId a short name that identifies the peer<a name="line.450"></a>
+<span class="sourceLineNo">451</span> */<a name="line.451"></a>
+<span class="sourceLineNo">452</span> long disableReplicationPeer(String peerId) throws ReplicationException, IOException;<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span> /**<a name="line.454"></a>
+<span class="sourceLineNo">455</span> * Returns the configured ReplicationPeerConfig for the specified peer<a name="line.455"></a>
+<span class="sourceLineNo">456</span> * @param peerId a short name that identifies the peer<a name="line.456"></a>
+<span class="sourceLineNo">457</span> * @return ReplicationPeerConfig for the peer<a name="line.457"></a>
+<span class="sourceLineNo">458</span> */<a name="line.458"></a>
+<span class="sourceLineNo">459</span> ReplicationPeerConfig getReplicationPeerConfig(String peerId) throws ReplicationException,<a name="line.459"></a>
+<span class="sourceLineNo">460</span> IOException;<a name="line.460"></a>
+<span class="sourceLineNo">461</span><a name="line.461"></a>
+<span class="sourceLineNo">462</span> /**<a name="line.462"></a>
+<span class="sourceLineNo">463</span> * Returns the {@link ReplicationPeerManager}.<a name="line.463"></a>
+<span class="sourceLineNo">464</span> */<a name="line.464"></a>
+<span class="sourceLineNo">465</span> ReplicationPeerManager getReplicationPeerManager();<a name="line.465"></a>
+<span class="sourceLineNo">466</span><a name="line.466"></a>
+<span class="sourceLineNo">467</span> /**<a name="line.467"></a>
+<span class="sourceLineNo">468</span> * Update the peerConfig for the specified peer<a name="line.468"></a>
+<span class="sourceLineNo">469</span> * @param peerId a short name that identifies the peer<a name="line.469"></a>
+<span class="sourceLineNo">470</span> * @param peerConfig new config for the peer<a name="line.470"></a>
+<span class="sourceLineNo">471</span> */<a name="line.471"></a>
+<span class="sourceLineNo">472</span> long updateReplicationPeerConfig(String peerId, ReplicationPeerConfig peerConfig)<a name="line.472"></a>
+<span class="sourceLineNo">473</span> throws ReplicationException, IOException;<a name="line.473"></a>
+<span class="sourceLineNo">474</span><a name="line.474"></a>
+<span class="sourceLineNo">475</span> /**<a name="line.475"></a>
+<span class="sourceLineNo">476</span> * Return a list of replication peers.<a name="line.476"></a>
+<span class="sourceLineNo">477</span> * @param regex The regular expression to match peer id<a name="line.477"></a>
+<span class="sourceLineNo">478</span> * @return a list of replication peers description<a name="line.478"></a>
+<span class="sourceLineNo">479</span> */<a name="line.479"></a>
+<span class="sourceLineNo">480</span> List<ReplicationPeerDescription> listReplicationPeers(String regex) throws ReplicationException,<a name="line.480"></a>
+<span class="sourceLineNo">481</span> IOException;<a name="line.481"></a>
+<span class="sourceLineNo">482</span><a name="line.482"></a>
+<span class="sourceLineNo">483</span> /**<a name="line.483"></a>
+<span class="sourceLineNo">484</span> * @return {@link LockManager} to lock namespaces/tables/regions.<a name="line.484"></a>
+<span class="sourceLineNo">485</span> */<a name="line.485"></a>
+<span class="sourceLineNo">486</span> LockManager getLockManager();<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span> public String getRegionServerVersion(final ServerName sn);<a name="line.488"></a>
+<span class="sourceLineNo">489</span><a name="line.489"></a>
+<span class="sourceLineNo">490</span> /**<a name="line.490"></a>
+<span class="sourceLineNo">491</span> * Called when a new RegionServer is added to the cluster.<a name="line.491"></a>
+<span class="sourceLineNo">492</span> * Checks if new server has a newer version than any existing server and will move system tables<a name="line.492"></a>
+<span class="sourceLineNo">493</span> * there if so.<a name="line.493"></a>
+<span class="sourceLineNo">494</span> */<a name="line.494"></a>
+<span class="sourceLineNo">495</span> public void checkIfShouldMoveSystemRegionAsync();<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span> /**<a name="line.497"></a>
+<span class="sourceLineNo">498</span> * Recover meta table. Will result in no-op is meta is already initialized. Any code that has<a name="line.498"></a>
+<span class="sourceLineNo">499</span> * access to master and requires to access meta during process initialization can call this<a name="line.499"></a>
+<span class="sourceLineNo">500</span> * method to make sure meta is initialized.<a name="line.500"></a>
+<span class="sourceLineNo">501</span> */<a name="line.501"></a>
+<span class="sourceLineNo">502</span> boolean recoverMeta() throws IOException;<a name="line.502"></a>
+<span class="sourceLineNo">503</span><a name="line.503"></a>
+<span class="sourceLineNo">504</span> String getClientIdAuditPrefix();<a name="line.504"></a>
+<span class="sourceLineNo">505</span><a name="line.505"></a>
+<span class="sourceLineNo">506</span> /**<a name="line.506"></a>
+<span class="sourceLineNo">507</span> * @return True if cluster is up; false if cluster is not up (we are shutting down).<a name="line.507"></a>
+<span class="sourceLineNo">508</span> */<a name="line.508"></a>
+<span class="sourceLineNo">509</span> boolean isClusterUp();<a name="line.509"></a>
+<span class="sourceLineNo">510</span>}<a name="line.510"></a>
[12/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html
index 5420d82..6ea3672 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html
@@ -316,687 +316,728 @@
<span class="sourceLineNo">308</span> }<a name="line.308"></a>
<span class="sourceLineNo">309</span> }<a name="line.309"></a>
<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span> public enum ServerState { ONLINE, SPLITTING, OFFLINE }<a name="line.311"></a>
-<span class="sourceLineNo">312</span> public static class ServerStateNode implements Comparable<ServerStateNode> {<a name="line.312"></a>
-<span class="sourceLineNo">313</span> private final ServerReportEvent reportEvent;<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> private final Set<RegionStateNode> regions;<a name="line.315"></a>
-<span class="sourceLineNo">316</span> private final ServerName serverName;<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span> private volatile ServerState state = ServerState.ONLINE;<a name="line.318"></a>
-<span class="sourceLineNo">319</span> private volatile int versionNumber = 0;<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span> public ServerStateNode(final ServerName serverName) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span> this.serverName = serverName;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> this.regions = ConcurrentHashMap.newKeySet();<a name="line.323"></a>
-<span class="sourceLineNo">324</span> this.reportEvent = new ServerReportEvent(serverName);<a name="line.324"></a>
-<span class="sourceLineNo">325</span> }<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> public ServerName getServerName() {<a name="line.327"></a>
-<span class="sourceLineNo">328</span> return serverName;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> }<a name="line.329"></a>
+<span class="sourceLineNo">311</span> /**<a name="line.311"></a>
+<span class="sourceLineNo">312</span> * Server State.<a name="line.312"></a>
+<span class="sourceLineNo">313</span> */<a name="line.313"></a>
+<span class="sourceLineNo">314</span> public enum ServerState {<a name="line.314"></a>
+<span class="sourceLineNo">315</span> /**<a name="line.315"></a>
+<span class="sourceLineNo">316</span> * Initial state. Available.<a name="line.316"></a>
+<span class="sourceLineNo">317</span> */<a name="line.317"></a>
+<span class="sourceLineNo">318</span> ONLINE,<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span> /**<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * Server expired/crashed. Currently undergoing WAL splitting.<a name="line.321"></a>
+<span class="sourceLineNo">322</span> */<a name="line.322"></a>
+<span class="sourceLineNo">323</span> SPLITTING,<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span> /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * WAL splitting done.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> */<a name="line.327"></a>
+<span class="sourceLineNo">328</span> OFFLINE<a name="line.328"></a>
+<span class="sourceLineNo">329</span> }<a name="line.329"></a>
<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> public ServerState getState() {<a name="line.331"></a>
-<span class="sourceLineNo">332</span> return state;<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> public int getVersionNumber() {<a name="line.335"></a>
-<span class="sourceLineNo">336</span> return versionNumber;<a name="line.336"></a>
-<span class="sourceLineNo">337</span> }<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span> public ProcedureEvent<?> getReportEvent() {<a name="line.339"></a>
-<span class="sourceLineNo">340</span> return reportEvent;<a name="line.340"></a>
-<span class="sourceLineNo">341</span> }<a name="line.341"></a>
+<span class="sourceLineNo">331</span> /**<a name="line.331"></a>
+<span class="sourceLineNo">332</span> * State of Server; list of hosted regions, etc.<a name="line.332"></a>
+<span class="sourceLineNo">333</span> */<a name="line.333"></a>
+<span class="sourceLineNo">334</span> public static class ServerStateNode implements Comparable<ServerStateNode> {<a name="line.334"></a>
+<span class="sourceLineNo">335</span> private final ServerReportEvent reportEvent;<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> private final Set<RegionStateNode> regions;<a name="line.337"></a>
+<span class="sourceLineNo">338</span> private final ServerName serverName;<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span> private volatile ServerState state = ServerState.ONLINE;<a name="line.340"></a>
+<span class="sourceLineNo">341</span> private volatile int versionNumber = 0;<a name="line.341"></a>
<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span> public boolean isInState(final ServerState... expected) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span> boolean expectedState = false;<a name="line.344"></a>
-<span class="sourceLineNo">345</span> if (expected != null) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span> for (int i = 0; i < expected.length; ++i) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> expectedState |= (state == expected[i]);<a name="line.347"></a>
-<span class="sourceLineNo">348</span> }<a name="line.348"></a>
-<span class="sourceLineNo">349</span> }<a name="line.349"></a>
-<span class="sourceLineNo">350</span> return expectedState;<a name="line.350"></a>
+<span class="sourceLineNo">343</span> public ServerStateNode(final ServerName serverName) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span> this.serverName = serverName;<a name="line.344"></a>
+<span class="sourceLineNo">345</span> this.regions = ConcurrentHashMap.newKeySet();<a name="line.345"></a>
+<span class="sourceLineNo">346</span> this.reportEvent = new ServerReportEvent(serverName);<a name="line.346"></a>
+<span class="sourceLineNo">347</span> }<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span> public ServerName getServerName() {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> return serverName;<a name="line.350"></a>
<span class="sourceLineNo">351</span> }<a name="line.351"></a>
<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span> public void setState(final ServerState state) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span> this.state = state;<a name="line.354"></a>
+<span class="sourceLineNo">353</span> public ServerState getState() {<a name="line.353"></a>
+<span class="sourceLineNo">354</span> return state;<a name="line.354"></a>
<span class="sourceLineNo">355</span> }<a name="line.355"></a>
<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span> public void setVersionNumber(final int versionNumber) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> this.versionNumber = versionNumber;<a name="line.358"></a>
+<span class="sourceLineNo">357</span> public int getVersionNumber() {<a name="line.357"></a>
+<span class="sourceLineNo">358</span> return versionNumber;<a name="line.358"></a>
<span class="sourceLineNo">359</span> }<a name="line.359"></a>
<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span> public Set<RegionStateNode> getRegions() {<a name="line.361"></a>
-<span class="sourceLineNo">362</span> return regions;<a name="line.362"></a>
+<span class="sourceLineNo">361</span> public ProcedureEvent<?> getReportEvent() {<a name="line.361"></a>
+<span class="sourceLineNo">362</span> return reportEvent;<a name="line.362"></a>
<span class="sourceLineNo">363</span> }<a name="line.363"></a>
<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span> public int getRegionCount() {<a name="line.365"></a>
-<span class="sourceLineNo">366</span> return regions.size();<a name="line.366"></a>
+<span class="sourceLineNo">365</span> public boolean isOffline() {<a name="line.365"></a>
+<span class="sourceLineNo">366</span> return this.state.equals(ServerState.OFFLINE);<a name="line.366"></a>
<span class="sourceLineNo">367</span> }<a name="line.367"></a>
<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span> public ArrayList<RegionInfo> getRegionInfoList() {<a name="line.369"></a>
-<span class="sourceLineNo">370</span> ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(regions.size());<a name="line.370"></a>
-<span class="sourceLineNo">371</span> for (RegionStateNode region: regions) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span> hris.add(region.getRegionInfo());<a name="line.372"></a>
-<span class="sourceLineNo">373</span> }<a name="line.373"></a>
-<span class="sourceLineNo">374</span> return hris;<a name="line.374"></a>
-<span class="sourceLineNo">375</span> }<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span> public void addRegion(final RegionStateNode regionNode) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span> this.regions.add(regionNode);<a name="line.378"></a>
-<span class="sourceLineNo">379</span> }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span> public void removeRegion(final RegionStateNode regionNode) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span> this.regions.remove(regionNode);<a name="line.382"></a>
-<span class="sourceLineNo">383</span> }<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public int compareTo(final ServerStateNode other) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> return getServerName().compareTo(other.getServerName());<a name="line.387"></a>
-<span class="sourceLineNo">388</span> }<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span> @Override<a name="line.390"></a>
-<span class="sourceLineNo">391</span> public int hashCode() {<a name="line.391"></a>
-<span class="sourceLineNo">392</span> return getServerName().hashCode();<a name="line.392"></a>
+<span class="sourceLineNo">369</span> public boolean isInState(final ServerState... expected) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span> boolean expectedState = false;<a name="line.370"></a>
+<span class="sourceLineNo">371</span> if (expected != null) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span> for (int i = 0; i < expected.length; ++i) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> expectedState |= (state == expected[i]);<a name="line.373"></a>
+<span class="sourceLineNo">374</span> }<a name="line.374"></a>
+<span class="sourceLineNo">375</span> }<a name="line.375"></a>
+<span class="sourceLineNo">376</span> return expectedState;<a name="line.376"></a>
+<span class="sourceLineNo">377</span> }<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span> public void setState(final ServerState state) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span> this.state = state;<a name="line.380"></a>
+<span class="sourceLineNo">381</span> }<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span> public void setVersionNumber(final int versionNumber) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span> this.versionNumber = versionNumber;<a name="line.384"></a>
+<span class="sourceLineNo">385</span> }<a name="line.385"></a>
+<span class="sourceLineNo">386</span><a name="line.386"></a>
+<span class="sourceLineNo">387</span> public Set<RegionStateNode> getRegions() {<a name="line.387"></a>
+<span class="sourceLineNo">388</span> return regions;<a name="line.388"></a>
+<span class="sourceLineNo">389</span> }<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span> public int getRegionCount() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span> return regions.size();<a name="line.392"></a>
<span class="sourceLineNo">393</span> }<a name="line.393"></a>
<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
-<span class="sourceLineNo">396</span> public boolean equals(final Object other) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span> if (this == other) return true;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> if (!(other instanceof ServerStateNode)) return false;<a name="line.398"></a>
-<span class="sourceLineNo">399</span> return compareTo((ServerStateNode)other) == 0;<a name="line.399"></a>
-<span class="sourceLineNo">400</span> }<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span> @Override<a name="line.402"></a>
-<span class="sourceLineNo">403</span> public String toString() {<a name="line.403"></a>
-<span class="sourceLineNo">404</span> return String.format("ServerStateNode(%s)", getServerName());<a name="line.404"></a>
+<span class="sourceLineNo">395</span> public ArrayList<RegionInfo> getRegionInfoList() {<a name="line.395"></a>
+<span class="sourceLineNo">396</span> ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(regions.size());<a name="line.396"></a>
+<span class="sourceLineNo">397</span> for (RegionStateNode region: regions) {<a name="line.397"></a>
+<span class="sourceLineNo">398</span> hris.add(region.getRegionInfo());<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span> return hris;<a name="line.400"></a>
+<span class="sourceLineNo">401</span> }<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span> public void addRegion(final RegionStateNode regionNode) {<a name="line.403"></a>
+<span class="sourceLineNo">404</span> this.regions.add(regionNode);<a name="line.404"></a>
<span class="sourceLineNo">405</span> }<a name="line.405"></a>
-<span class="sourceLineNo">406</span> }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span> public final static RegionStateStampComparator REGION_STATE_STAMP_COMPARATOR =<a name="line.408"></a>
-<span class="sourceLineNo">409</span> new RegionStateStampComparator();<a name="line.409"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span> public void removeRegion(final RegionStateNode regionNode) {<a name="line.407"></a>
+<span class="sourceLineNo">408</span> this.regions.remove(regionNode);<a name="line.408"></a>
+<span class="sourceLineNo">409</span> }<a name="line.409"></a>
<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span> // TODO: Replace the ConcurrentSkipListMaps<a name="line.411"></a>
-<span class="sourceLineNo">412</span> /**<a name="line.412"></a>
-<span class="sourceLineNo">413</span> * RegionName -- i.e. RegionInfo.getRegionName() -- as bytes to {@link RegionStateNode}<a name="line.413"></a>
-<span class="sourceLineNo">414</span> */<a name="line.414"></a>
-<span class="sourceLineNo">415</span> private final ConcurrentSkipListMap<byte[], RegionStateNode> regionsMap =<a name="line.415"></a>
-<span class="sourceLineNo">416</span> new ConcurrentSkipListMap<byte[], RegionStateNode>(Bytes.BYTES_COMPARATOR);<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionInTransition =<a name="line.418"></a>
-<span class="sourceLineNo">419</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>(RegionInfo.COMPARATOR);<a name="line.419"></a>
+<span class="sourceLineNo">411</span> @Override<a name="line.411"></a>
+<span class="sourceLineNo">412</span> public int compareTo(final ServerStateNode other) {<a name="line.412"></a>
+<span class="sourceLineNo">413</span> return getServerName().compareTo(other.getServerName());<a name="line.413"></a>
+<span class="sourceLineNo">414</span> }<a name="line.414"></a>
+<span class="sourceLineNo">415</span><a name="line.415"></a>
+<span class="sourceLineNo">416</span> @Override<a name="line.416"></a>
+<span class="sourceLineNo">417</span> public int hashCode() {<a name="line.417"></a>
+<span class="sourceLineNo">418</span> return getServerName().hashCode();<a name="line.418"></a>
+<span class="sourceLineNo">419</span> }<a name="line.419"></a>
<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span> /**<a name="line.421"></a>
-<span class="sourceLineNo">422</span> * Regions marked as offline on a read of hbase:meta. Unused or at least, once<a name="line.422"></a>
-<span class="sourceLineNo">423</span> * offlined, regions have no means of coming on line again. TODO.<a name="line.423"></a>
-<span class="sourceLineNo">424</span> */<a name="line.424"></a>
-<span class="sourceLineNo">425</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionOffline =<a name="line.425"></a>
-<span class="sourceLineNo">426</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>();<a name="line.426"></a>
+<span class="sourceLineNo">421</span> @Override<a name="line.421"></a>
+<span class="sourceLineNo">422</span> public boolean equals(final Object other) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span> if (this == other) return true;<a name="line.423"></a>
+<span class="sourceLineNo">424</span> if (!(other instanceof ServerStateNode)) return false;<a name="line.424"></a>
+<span class="sourceLineNo">425</span> return compareTo((ServerStateNode)other) == 0;<a name="line.425"></a>
+<span class="sourceLineNo">426</span> }<a name="line.426"></a>
<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span> private final ConcurrentSkipListMap<byte[], RegionFailedOpen> regionFailedOpen =<a name="line.428"></a>
-<span class="sourceLineNo">429</span> new ConcurrentSkipListMap<byte[], RegionFailedOpen>(Bytes.BYTES_COMPARATOR);<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span> private final ConcurrentHashMap<ServerName, ServerStateNode> serverMap =<a name="line.431"></a>
-<span class="sourceLineNo">432</span> new ConcurrentHashMap<ServerName, ServerStateNode>();<a name="line.432"></a>
+<span class="sourceLineNo">428</span> @Override<a name="line.428"></a>
+<span class="sourceLineNo">429</span> public String toString() {<a name="line.429"></a>
+<span class="sourceLineNo">430</span> return String.format("ServerStateNode(%s)", getServerName());<a name="line.430"></a>
+<span class="sourceLineNo">431</span> }<a name="line.431"></a>
+<span class="sourceLineNo">432</span> }<a name="line.432"></a>
<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span> public RegionStates() { }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> public void clear() {<a name="line.436"></a>
-<span class="sourceLineNo">437</span> regionsMap.clear();<a name="line.437"></a>
-<span class="sourceLineNo">438</span> regionInTransition.clear();<a name="line.438"></a>
-<span class="sourceLineNo">439</span> regionOffline.clear();<a name="line.439"></a>
-<span class="sourceLineNo">440</span> serverMap.clear();<a name="line.440"></a>
-<span class="sourceLineNo">441</span> }<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span> @VisibleForTesting<a name="line.443"></a>
-<span class="sourceLineNo">444</span> public boolean isRegionInRegionStates(final RegionInfo hri) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span> return (regionsMap.containsKey(hri.getRegionName()) || regionInTransition.containsKey(hri)<a name="line.445"></a>
-<span class="sourceLineNo">446</span> || regionOffline.containsKey(hri));<a name="line.446"></a>
-<span class="sourceLineNo">447</span> }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span> // ==========================================================================<a name="line.449"></a>
-<span class="sourceLineNo">450</span> // RegionStateNode helpers<a name="line.450"></a>
-<span class="sourceLineNo">451</span> // ==========================================================================<a name="line.451"></a>
-<span class="sourceLineNo">452</span> protected RegionStateNode createRegionStateNode(final RegionInfo regionInfo) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> RegionStateNode newNode = new RegionStateNode(regionInfo);<a name="line.453"></a>
-<span class="sourceLineNo">454</span> RegionStateNode oldNode = regionsMap.putIfAbsent(regionInfo.getRegionName(), newNode);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> return oldNode != null ? oldNode : newNode;<a name="line.455"></a>
-<span class="sourceLineNo">456</span> }<a name="line.456"></a>
-<span class="sourceLineNo">457</span><a name="line.457"></a>
-<span class="sourceLineNo">458</span> protected RegionStateNode getOrCreateRegionStateNode(final RegionInfo regionInfo) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> RegionStateNode node = regionsMap.get(regionInfo.getRegionName());<a name="line.459"></a>
-<span class="sourceLineNo">460</span> return node != null ? node : createRegionStateNode(regionInfo);<a name="line.460"></a>
-<span class="sourceLineNo">461</span> }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span> RegionStateNode getRegionStateNodeFromName(final byte[] regionName) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span> return regionsMap.get(regionName);<a name="line.464"></a>
-<span class="sourceLineNo">465</span> }<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span> protected RegionStateNode getRegionStateNode(final RegionInfo regionInfo) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span> return getRegionStateNodeFromName(regionInfo.getRegionName());<a name="line.468"></a>
-<span class="sourceLineNo">469</span> }<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span> public void deleteRegion(final RegionInfo regionInfo) {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> regionsMap.remove(regionInfo.getRegionName());<a name="line.472"></a>
-<span class="sourceLineNo">473</span> // Remove from the offline regions map too if there.<a name="line.473"></a>
-<span class="sourceLineNo">474</span> if (this.regionOffline.containsKey(regionInfo)) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span> if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> this.regionOffline.remove(regionInfo);<a name="line.476"></a>
-<span class="sourceLineNo">477</span> }<a name="line.477"></a>
-<span class="sourceLineNo">478</span> }<a name="line.478"></a>
-<span class="sourceLineNo">479</span><a name="line.479"></a>
-<span class="sourceLineNo">480</span> ArrayList<RegionStateNode> getTableRegionStateNodes(final TableName tableName) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span> final ArrayList<RegionStateNode> regions = new ArrayList<RegionStateNode>();<a name="line.481"></a>
-<span class="sourceLineNo">482</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span> if (!node.getTable().equals(tableName)) break;<a name="line.483"></a>
-<span class="sourceLineNo">484</span> regions.add(node);<a name="line.484"></a>
-<span class="sourceLineNo">485</span> }<a name="line.485"></a>
-<span class="sourceLineNo">486</span> return regions;<a name="line.486"></a>
+<span class="sourceLineNo">434</span> public final static RegionStateStampComparator REGION_STATE_STAMP_COMPARATOR =<a name="line.434"></a>
+<span class="sourceLineNo">435</span> new RegionStateStampComparator();<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span> // TODO: Replace the ConcurrentSkipListMaps<a name="line.437"></a>
+<span class="sourceLineNo">438</span> /**<a name="line.438"></a>
+<span class="sourceLineNo">439</span> * RegionName -- i.e. RegionInfo.getRegionName() -- as bytes to {@link RegionStateNode}<a name="line.439"></a>
+<span class="sourceLineNo">440</span> */<a name="line.440"></a>
+<span class="sourceLineNo">441</span> private final ConcurrentSkipListMap<byte[], RegionStateNode> regionsMap =<a name="line.441"></a>
+<span class="sourceLineNo">442</span> new ConcurrentSkipListMap<byte[], RegionStateNode>(Bytes.BYTES_COMPARATOR);<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionInTransition =<a name="line.444"></a>
+<span class="sourceLineNo">445</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>(RegionInfo.COMPARATOR);<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span> /**<a name="line.447"></a>
+<span class="sourceLineNo">448</span> * Regions marked as offline on a read of hbase:meta. Unused or at least, once<a name="line.448"></a>
+<span class="sourceLineNo">449</span> * offlined, regions have no means of coming on line again. TODO.<a name="line.449"></a>
+<span class="sourceLineNo">450</span> */<a name="line.450"></a>
+<span class="sourceLineNo">451</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionOffline =<a name="line.451"></a>
+<span class="sourceLineNo">452</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>();<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span> private final ConcurrentSkipListMap<byte[], RegionFailedOpen> regionFailedOpen =<a name="line.454"></a>
+<span class="sourceLineNo">455</span> new ConcurrentSkipListMap<byte[], RegionFailedOpen>(Bytes.BYTES_COMPARATOR);<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span> private final ConcurrentHashMap<ServerName, ServerStateNode> serverMap =<a name="line.457"></a>
+<span class="sourceLineNo">458</span> new ConcurrentHashMap<ServerName, ServerStateNode>();<a name="line.458"></a>
+<span class="sourceLineNo">459</span><a name="line.459"></a>
+<span class="sourceLineNo">460</span> public RegionStates() { }<a name="line.460"></a>
+<span class="sourceLineNo">461</span><a name="line.461"></a>
+<span class="sourceLineNo">462</span> public void clear() {<a name="line.462"></a>
+<span class="sourceLineNo">463</span> regionsMap.clear();<a name="line.463"></a>
+<span class="sourceLineNo">464</span> regionInTransition.clear();<a name="line.464"></a>
+<span class="sourceLineNo">465</span> regionOffline.clear();<a name="line.465"></a>
+<span class="sourceLineNo">466</span> serverMap.clear();<a name="line.466"></a>
+<span class="sourceLineNo">467</span> }<a name="line.467"></a>
+<span class="sourceLineNo">468</span><a name="line.468"></a>
+<span class="sourceLineNo">469</span> @VisibleForTesting<a name="line.469"></a>
+<span class="sourceLineNo">470</span> public boolean isRegionInRegionStates(final RegionInfo hri) {<a name="line.470"></a>
+<span class="sourceLineNo">471</span> return (regionsMap.containsKey(hri.getRegionName()) || regionInTransition.containsKey(hri)<a name="line.471"></a>
+<span class="sourceLineNo">472</span> || regionOffline.containsKey(hri));<a name="line.472"></a>
+<span class="sourceLineNo">473</span> }<a name="line.473"></a>
+<span class="sourceLineNo">474</span><a name="line.474"></a>
+<span class="sourceLineNo">475</span> // ==========================================================================<a name="line.475"></a>
+<span class="sourceLineNo">476</span> // RegionStateNode helpers<a name="line.476"></a>
+<span class="sourceLineNo">477</span> // ==========================================================================<a name="line.477"></a>
+<span class="sourceLineNo">478</span> protected RegionStateNode createRegionStateNode(final RegionInfo regionInfo) {<a name="line.478"></a>
+<span class="sourceLineNo">479</span> RegionStateNode newNode = new RegionStateNode(regionInfo);<a name="line.479"></a>
+<span class="sourceLineNo">480</span> RegionStateNode oldNode = regionsMap.putIfAbsent(regionInfo.getRegionName(), newNode);<a name="line.480"></a>
+<span class="sourceLineNo">481</span> return oldNode != null ? oldNode : newNode;<a name="line.481"></a>
+<span class="sourceLineNo">482</span> }<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span> protected RegionStateNode getOrCreateRegionStateNode(final RegionInfo regionInfo) {<a name="line.484"></a>
+<span class="sourceLineNo">485</span> RegionStateNode node = regionsMap.get(regionInfo.getRegionName());<a name="line.485"></a>
+<span class="sourceLineNo">486</span> return node != null ? node : createRegionStateNode(regionInfo);<a name="line.486"></a>
<span class="sourceLineNo">487</span> }<a name="line.487"></a>
<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span> ArrayList<RegionState> getTableRegionStates(final TableName tableName) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>();<a name="line.490"></a>
-<span class="sourceLineNo">491</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span> if (!node.getTable().equals(tableName)) break;<a name="line.492"></a>
-<span class="sourceLineNo">493</span> regions.add(node.toRegionState());<a name="line.493"></a>
-<span class="sourceLineNo">494</span> }<a name="line.494"></a>
-<span class="sourceLineNo">495</span> return regions;<a name="line.495"></a>
-<span class="sourceLineNo">496</span> }<a name="line.496"></a>
-<span class="sourceLineNo">497</span><a name="line.497"></a>
-<span class="sourceLineNo">498</span> ArrayList<RegionInfo> getTableRegionsInfo(final TableName tableName) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span> final ArrayList<RegionInfo> regions = new ArrayList<RegionInfo>();<a name="line.499"></a>
-<span class="sourceLineNo">500</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span> if (!node.getTable().equals(tableName)) break;<a name="line.501"></a>
-<span class="sourceLineNo">502</span> regions.add(node.getRegionInfo());<a name="line.502"></a>
+<span class="sourceLineNo">489</span> RegionStateNode getRegionStateNodeFromName(final byte[] regionName) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span> return regionsMap.get(regionName);<a name="line.490"></a>
+<span class="sourceLineNo">491</span> }<a name="line.491"></a>
+<span class="sourceLineNo">492</span><a name="line.492"></a>
+<span class="sourceLineNo">493</span> protected RegionStateNode getRegionStateNode(final RegionInfo regionInfo) {<a name="line.493"></a>
+<span class="sourceLineNo">494</span> return getRegionStateNodeFromName(regionInfo.getRegionName());<a name="line.494"></a>
+<span class="sourceLineNo">495</span> }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span> public void deleteRegion(final RegionInfo regionInfo) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span> regionsMap.remove(regionInfo.getRegionName());<a name="line.498"></a>
+<span class="sourceLineNo">499</span> // Remove from the offline regions map too if there.<a name="line.499"></a>
+<span class="sourceLineNo">500</span> if (this.regionOffline.containsKey(regionInfo)) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span> if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.501"></a>
+<span class="sourceLineNo">502</span> this.regionOffline.remove(regionInfo);<a name="line.502"></a>
<span class="sourceLineNo">503</span> }<a name="line.503"></a>
-<span class="sourceLineNo">504</span> return regions;<a name="line.504"></a>
-<span class="sourceLineNo">505</span> }<a name="line.505"></a>
-<span class="sourceLineNo">506</span><a name="line.506"></a>
-<span class="sourceLineNo">507</span> Collection<RegionStateNode> getRegionStateNodes() {<a name="line.507"></a>
-<span class="sourceLineNo">508</span> return regionsMap.values();<a name="line.508"></a>
-<span class="sourceLineNo">509</span> }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span> public ArrayList<RegionState> getRegionStates() {<a name="line.511"></a>
-<span class="sourceLineNo">512</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>(regionsMap.size());<a name="line.512"></a>
-<span class="sourceLineNo">513</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span> regions.add(node.toRegionState());<a name="line.514"></a>
-<span class="sourceLineNo">515</span> }<a name="line.515"></a>
-<span class="sourceLineNo">516</span> return regions;<a name="line.516"></a>
-<span class="sourceLineNo">517</span> }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span> // ==========================================================================<a name="line.519"></a>
-<span class="sourceLineNo">520</span> // RegionState helpers<a name="line.520"></a>
-<span class="sourceLineNo">521</span> // ==========================================================================<a name="line.521"></a>
-<span class="sourceLineNo">522</span> public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span> RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.523"></a>
-<span class="sourceLineNo">524</span> return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.524"></a>
-<span class="sourceLineNo">525</span> }<a name="line.525"></a>
-<span class="sourceLineNo">526</span><a name="line.526"></a>
-<span class="sourceLineNo">527</span> public RegionState getRegionState(final String encodedRegionName) {<a name="line.527"></a>
-<span class="sourceLineNo">528</span> // TODO: Need a map <encodedName, ...> but it is just dispatch merge...<a name="line.528"></a>
-<span class="sourceLineNo">529</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.529"></a>
-<span class="sourceLineNo">530</span> if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span> return node.toRegionState();<a name="line.531"></a>
-<span class="sourceLineNo">532</span> }<a name="line.532"></a>
-<span class="sourceLineNo">533</span> }<a name="line.533"></a>
-<span class="sourceLineNo">534</span> return null;<a name="line.534"></a>
+<span class="sourceLineNo">504</span> }<a name="line.504"></a>
+<span class="sourceLineNo">505</span><a name="line.505"></a>
+<span class="sourceLineNo">506</span> ArrayList<RegionStateNode> getTableRegionStateNodes(final TableName tableName) {<a name="line.506"></a>
+<span class="sourceLineNo">507</span> final ArrayList<RegionStateNode> regions = new ArrayList<RegionStateNode>();<a name="line.507"></a>
+<span class="sourceLineNo">508</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.508"></a>
+<span class="sourceLineNo">509</span> if (!node.getTable().equals(tableName)) break;<a name="line.509"></a>
+<span class="sourceLineNo">510</span> regions.add(node);<a name="line.510"></a>
+<span class="sourceLineNo">511</span> }<a name="line.511"></a>
+<span class="sourceLineNo">512</span> return regions;<a name="line.512"></a>
+<span class="sourceLineNo">513</span> }<a name="line.513"></a>
+<span class="sourceLineNo">514</span><a name="line.514"></a>
+<span class="sourceLineNo">515</span> ArrayList<RegionState> getTableRegionStates(final TableName tableName) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>();<a name="line.516"></a>
+<span class="sourceLineNo">517</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.517"></a>
+<span class="sourceLineNo">518</span> if (!node.getTable().equals(tableName)) break;<a name="line.518"></a>
+<span class="sourceLineNo">519</span> regions.add(node.toRegionState());<a name="line.519"></a>
+<span class="sourceLineNo">520</span> }<a name="line.520"></a>
+<span class="sourceLineNo">521</span> return regions;<a name="line.521"></a>
+<span class="sourceLineNo">522</span> }<a name="line.522"></a>
+<span class="sourceLineNo">523</span><a name="line.523"></a>
+<span class="sourceLineNo">524</span> ArrayList<RegionInfo> getTableRegionsInfo(final TableName tableName) {<a name="line.524"></a>
+<span class="sourceLineNo">525</span> final ArrayList<RegionInfo> regions = new ArrayList<RegionInfo>();<a name="line.525"></a>
+<span class="sourceLineNo">526</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span> if (!node.getTable().equals(tableName)) break;<a name="line.527"></a>
+<span class="sourceLineNo">528</span> regions.add(node.getRegionInfo());<a name="line.528"></a>
+<span class="sourceLineNo">529</span> }<a name="line.529"></a>
+<span class="sourceLineNo">530</span> return regions;<a name="line.530"></a>
+<span class="sourceLineNo">531</span> }<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span> Collection<RegionStateNode> getRegionStateNodes() {<a name="line.533"></a>
+<span class="sourceLineNo">534</span> return regionsMap.values();<a name="line.534"></a>
<span class="sourceLineNo">535</span> }<a name="line.535"></a>
<span class="sourceLineNo">536</span><a name="line.536"></a>
-<span class="sourceLineNo">537</span> // ============================================================================================<a name="line.537"></a>
-<span class="sourceLineNo">538</span> // TODO: helpers<a name="line.538"></a>
-<span class="sourceLineNo">539</span> // ============================================================================================<a name="line.539"></a>
-<span class="sourceLineNo">540</span> public boolean hasTableRegionStates(final TableName tableName) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span> // TODO<a name="line.541"></a>
-<span class="sourceLineNo">542</span> return !getTableRegionStates(tableName).isEmpty();<a name="line.542"></a>
+<span class="sourceLineNo">537</span> public ArrayList<RegionState> getRegionStates() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>(regionsMap.size());<a name="line.538"></a>
+<span class="sourceLineNo">539</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span> regions.add(node.toRegionState());<a name="line.540"></a>
+<span class="sourceLineNo">541</span> }<a name="line.541"></a>
+<span class="sourceLineNo">542</span> return regions;<a name="line.542"></a>
<span class="sourceLineNo">543</span> }<a name="line.543"></a>
<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span> /**<a name="line.545"></a>
-<span class="sourceLineNo">546</span> * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.546"></a>
-<span class="sourceLineNo">547</span> */<a name="line.547"></a>
-<span class="sourceLineNo">548</span> public List<RegionInfo> getRegionsOfTable(final TableName table) {<a name="line.548"></a>
-<span class="sourceLineNo">549</span> return getRegionsOfTable(table, false);<a name="line.549"></a>
-<span class="sourceLineNo">550</span> }<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span> /**<a name="line.552"></a>
-<span class="sourceLineNo">553</span> * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.553"></a>
-<span class="sourceLineNo">554</span> * <code>offline</code> to true. Does not include regions that are in the<a name="line.554"></a>
-<span class="sourceLineNo">555</span> * {@link State#SPLIT} state.<a name="line.555"></a>
-<span class="sourceLineNo">556</span> */<a name="line.556"></a>
-<span class="sourceLineNo">557</span> public List<RegionInfo> getRegionsOfTable(final TableName table, final boolean offline) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span> final ArrayList<RegionStateNode> nodes = getTableRegionStateNodes(table);<a name="line.558"></a>
-<span class="sourceLineNo">559</span> final ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(nodes.size());<a name="line.559"></a>
-<span class="sourceLineNo">560</span> for (RegionStateNode node: nodes) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span> if (include(node, offline)) hris.add(node.getRegionInfo());<a name="line.561"></a>
-<span class="sourceLineNo">562</span> }<a name="line.562"></a>
-<span class="sourceLineNo">563</span> return hris;<a name="line.563"></a>
-<span class="sourceLineNo">564</span> }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span> /**<a name="line.566"></a>
-<span class="sourceLineNo">567</span> * Utility. Whether to include region in list of regions. Default is to<a name="line.567"></a>
-<span class="sourceLineNo">568</span> * weed out split and offline regions.<a name="line.568"></a>
-<span class="sourceLineNo">569</span> * @return True if we should include the <code>node</code> (do not include<a name="line.569"></a>
-<span class="sourceLineNo">570</span> * if split or offline unless <code>offline</code> is set to true.<a name="line.570"></a>
-<span class="sourceLineNo">571</span> */<a name="line.571"></a>
-<span class="sourceLineNo">572</span> boolean include(final RegionStateNode node, final boolean offline) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span> if (LOG.isTraceEnabled()) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span> LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.574"></a>
-<span class="sourceLineNo">575</span> }<a name="line.575"></a>
-<span class="sourceLineNo">576</span> if (node.isInState(State.SPLIT)) return false;<a name="line.576"></a>
-<span class="sourceLineNo">577</span> if (node.isInState(State.OFFLINE) && !offline) return false;<a name="line.577"></a>
-<span class="sourceLineNo">578</span> final RegionInfo hri = node.getRegionInfo();<a name="line.578"></a>
-<span class="sourceLineNo">579</span> return (!hri.isOffline() && !hri.isSplit()) ||<a name="line.579"></a>
-<span class="sourceLineNo">580</span> ((hri.isOffline() || hri.isSplit()) && offline);<a name="line.580"></a>
-<span class="sourceLineNo">581</span> }<a name="line.581"></a>
-<span class="sourceLineNo">582</span><a name="line.582"></a>
-<span class="sourceLineNo">583</span> /**<a name="line.583"></a>
-<span class="sourceLineNo">584</span> * Returns the set of regions hosted by the specified server<a name="line.584"></a>
-<span class="sourceLineNo">585</span> * @param serverName the server we are interested in<a name="line.585"></a>
-<span class="sourceLineNo">586</span> * @return set of RegionInfo hosted by the specified server<a name="line.586"></a>
-<span class="sourceLineNo">587</span> */<a name="line.587"></a>
-<span class="sourceLineNo">588</span> public List<RegionInfo> getServerRegionInfoSet(final ServerName serverName) {<a name="line.588"></a>
-<span class="sourceLineNo">589</span> final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.589"></a>
-<span class="sourceLineNo">590</span> if (serverInfo == null) return Collections.emptyList();<a name="line.590"></a>
+<span class="sourceLineNo">545</span> // ==========================================================================<a name="line.545"></a>
+<span class="sourceLineNo">546</span> // RegionState helpers<a name="line.546"></a>
+<span class="sourceLineNo">547</span> // ==========================================================================<a name="line.547"></a>
+<span class="sourceLineNo">548</span> public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.548"></a>
+<span class="sourceLineNo">549</span> RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.549"></a>
+<span class="sourceLineNo">550</span> return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.550"></a>
+<span class="sourceLineNo">551</span> }<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span> public RegionState getRegionState(final String encodedRegionName) {<a name="line.553"></a>
+<span class="sourceLineNo">554</span> // TODO: Need a map <encodedName, ...> but it is just dispatch merge...<a name="line.554"></a>
+<span class="sourceLineNo">555</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.555"></a>
+<span class="sourceLineNo">556</span> if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span> return node.toRegionState();<a name="line.557"></a>
+<span class="sourceLineNo">558</span> }<a name="line.558"></a>
+<span class="sourceLineNo">559</span> }<a name="line.559"></a>
+<span class="sourceLineNo">560</span> return null;<a name="line.560"></a>
+<span class="sourceLineNo">561</span> }<a name="line.561"></a>
+<span class="sourceLineNo">562</span><a name="line.562"></a>
+<span class="sourceLineNo">563</span> // ============================================================================================<a name="line.563"></a>
+<span class="sourceLineNo">564</span> // TODO: helpers<a name="line.564"></a>
+<span class="sourceLineNo">565</span> // ============================================================================================<a name="line.565"></a>
+<span class="sourceLineNo">566</span> public boolean hasTableRegionStates(final TableName tableName) {<a name="line.566"></a>
+<span class="sourceLineNo">567</span> // TODO<a name="line.567"></a>
+<span class="sourceLineNo">568</span> return !getTableRegionStates(tableName).isEmpty();<a name="line.568"></a>
+<span class="sourceLineNo">569</span> }<a name="line.569"></a>
+<span class="sourceLineNo">570</span><a name="line.570"></a>
+<span class="sourceLineNo">571</span> /**<a name="line.571"></a>
+<span class="sourceLineNo">572</span> * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.572"></a>
+<span class="sourceLineNo">573</span> */<a name="line.573"></a>
+<span class="sourceLineNo">574</span> public List<RegionInfo> getRegionsOfTable(final TableName table) {<a name="line.574"></a>
+<span class="sourceLineNo">575</span> return getRegionsOfTable(table, false);<a name="line.575"></a>
+<span class="sourceLineNo">576</span> }<a name="line.576"></a>
+<span class="sourceLineNo">577</span><a name="line.577"></a>
+<span class="sourceLineNo">578</span> /**<a name="line.578"></a>
+<span class="sourceLineNo">579</span> * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.579"></a>
+<span class="sourceLineNo">580</span> * <code>offline</code> to true. Does not include regions that are in the<a name="line.580"></a>
+<span class="sourceLineNo">581</span> * {@link State#SPLIT} state.<a name="line.581"></a>
+<span class="sourceLineNo">582</span> */<a name="line.582"></a>
+<span class="sourceLineNo">583</span> public List<RegionInfo> getRegionsOfTable(final TableName table, final boolean offline) {<a name="line.583"></a>
+<span class="sourceLineNo">584</span> final ArrayList<RegionStateNode> nodes = getTableRegionStateNodes(table);<a name="line.584"></a>
+<span class="sourceLineNo">585</span> final ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(nodes.size());<a name="line.585"></a>
+<span class="sourceLineNo">586</span> for (RegionStateNode node: nodes) {<a name="line.586"></a>
+<span class="sourceLineNo">587</span> if (include(node, offline)) hris.add(node.getRegionInfo());<a name="line.587"></a>
+<span class="sourceLineNo">588</span> }<a name="line.588"></a>
+<span class="sourceLineNo">589</span> return hris;<a name="line.589"></a>
+<span class="sourceLineNo">590</span> }<a name="line.590"></a>
<span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span> synchronized (serverInfo) {<a name="line.592"></a>
-<span class="sourceLineNo">593</span> return serverInfo.getRegionInfoList();<a name="line.593"></a>
-<span class="sourceLineNo">594</span> }<a name="line.594"></a>
-<span class="sourceLineNo">595</span> }<a name="line.595"></a>
-<span class="sourceLineNo">596</span><a name="line.596"></a>
-<span class="sourceLineNo">597</span> // ============================================================================================<a name="line.597"></a>
-<span class="sourceLineNo">598</span> // TODO: split helpers<a name="line.598"></a>
-<span class="sourceLineNo">599</span> // ============================================================================================<a name="line.599"></a>
-<span class="sourceLineNo">600</span> public void logSplit(final ServerName serverName) {<a name="line.600"></a>
-<span class="sourceLineNo">601</span> final ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.601"></a>
-<span class="sourceLineNo">602</span> synchronized (serverNode) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span> serverNode.setState(ServerState.SPLITTING);<a name="line.603"></a>
-<span class="sourceLineNo">604</span> /* THIS HAS TO BE WRONG. THIS IS SPLITTING OF REGION, NOT SPLITTING WALs.<a name="line.604"></a>
-<span class="sourceLineNo">605</span> for (RegionStateNode regionNode: serverNode.getRegions()) {<a name="line.605"></a>
-<span class="sourceLineNo">606</span> synchronized (regionNode) {<a name="line.606"></a>
-<span class="sourceLineNo">607</span> // TODO: Abort procedure if present<a name="line.607"></a>
-<span class="sourceLineNo">608</span> regionNode.setState(State.SPLITTING);<a name="line.608"></a>
-<span class="sourceLineNo">609</span> }<a name="line.609"></a>
-<span class="sourceLineNo">610</span> }*/<a name="line.610"></a>
-<span class="sourceLineNo">611</span> }<a name="line.611"></a>
-<span class="sourceLineNo">612</span> }<a name="line.612"></a>
-<span class="sourceLineNo">613</span><a name="line.613"></a>
-<span class="sourceLineNo">614</span> public void logSplit(final RegionInfo regionInfo) {<a name="line.614"></a>
-<span class="sourceLineNo">615</span> final RegionStateNode regionNode = getRegionStateNode(regionInfo);<a name="line.615"></a>
-<span class="sourceLineNo">616</span> synchronized (regionNode) {<a name="line.616"></a>
-<span class="sourceLineNo">617</span> regionNode.setState(State.SPLIT);<a name="line.617"></a>
-<span class="sourceLineNo">618</span> }<a name="line.618"></a>
-<span class="sourceLineNo">619</span> }<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span> @VisibleForTesting<a name="line.621"></a>
-<span class="sourceLineNo">622</span> public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span> final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.623"></a>
-<span class="sourceLineNo">624</span> synchronized (regionNode) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span> regionNode.setState(state);<a name="line.625"></a>
-<span class="sourceLineNo">626</span> }<a name="line.626"></a>
-<span class="sourceLineNo">627</span> }<a name="line.627"></a>
-<span class="sourceLineNo">628</span><a name="line.628"></a>
-<span class="sourceLineNo">629</span> // ============================================================================================<a name="line.629"></a>
-<span class="sourceLineNo">630</span> // TODO:<a name="line.630"></a>
-<span class="sourceLineNo">631</span> // ============================================================================================<a name="line.631"></a>
-<span class="sourceLineNo">632</span> public List<RegionInfo> getAssignedRegions() {<a name="line.632"></a>
-<span class="sourceLineNo">633</span> final List<RegionInfo> result = new ArrayList<RegionInfo>();<a name="line.633"></a>
-<span class="sourceLineNo">634</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span> if (!node.isInTransition()) {<a name="line.635"></a>
-<span class="sourceLineNo">636</span> result.add(node.getRegionInfo());<a name="line.636"></a>
-<span class="sourceLineNo">637</span> }<a name="line.637"></a>
-<span class="sourceLineNo">638</span> }<a name="line.638"></a>
-<span class="sourceLineNo">639</span> return result;<a name="line.639"></a>
-<span class="sourceLineNo">640</span> }<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span> public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.643"></a>
-<span class="sourceLineNo">644</span> if (region != null) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span> synchronized (region) {<a name="line.645"></a>
-<span class="sourceLineNo">646</span> return region.isInState(state);<a name="line.646"></a>
-<span class="sourceLineNo">647</span> }<a name="line.647"></a>
-<span class="sourceLineNo">648</span> }<a name="line.648"></a>
-<span class="sourceLineNo">649</span> return false;<a name="line.649"></a>
-<span class="sourceLineNo">650</span> }<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span> public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span> return isRegionInState(regionInfo, State.OPEN);<a name="line.653"></a>
+<span class="sourceLineNo">592</span> /**<a name="line.592"></a>
+<span class="sourceLineNo">593</span> * Utility. Whether to include region in list of regions. Default is to<a name="line.593"></a>
+<span class="sourceLineNo">594</span> * weed out split and offline regions.<a name="line.594"></a>
+<span class="sourceLineNo">595</span> * @return True if we should include the <code>node</code> (do not include<a name="line.595"></a>
+<span class="sourceLineNo">596</span> * if split or offline unless <code>offline</code> is set to true.<a name="line.596"></a>
+<span class="sourceLineNo">597</span> */<a name="line.597"></a>
+<span class="sourceLineNo">598</span> boolean include(final RegionStateNode node, final boolean offline) {<a name="line.598"></a>
+<span class="sourceLineNo">599</span> if (LOG.isTraceEnabled()) {<a name="line.599"></a>
+<span class="sourceLineNo">600</span> LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.600"></a>
+<span class="sourceLineNo">601</span> }<a name="line.601"></a>
+<span class="sourceLineNo">602</span> if (node.isInState(State.SPLIT)) return false;<a name="line.602"></a>
+<span class="sourceLineNo">603</span> if (node.isInState(State.OFFLINE) && !offline) return false;<a name="line.603"></a>
+<span class="sourceLineNo">604</span> final RegionInfo hri = node.getRegionInfo();<a name="line.604"></a>
+<span class="sourceLineNo">605</span> return (!hri.isOffline() && !hri.isSplit()) ||<a name="line.605"></a>
+<span class="sourceLineNo">606</span> ((hri.isOffline() || hri.isSplit()) && offline);<a name="line.606"></a>
+<span class="sourceLineNo">607</span> }<a name="line.607"></a>
+<span class="sourceLineNo">608</span><a name="line.608"></a>
+<span class="sourceLineNo">609</span> /**<a name="line.609"></a>
+<span class="sourceLineNo">610</span> * Returns the set of regions hosted by the specified server<a name="line.610"></a>
+<span class="sourceLineNo">611</span> * @param serverName the server we are interested in<a name="line.611"></a>
+<span class="sourceLineNo">612</span> * @return set of RegionInfo hosted by the specified server<a name="line.612"></a>
+<span class="sourceLineNo">613</span> */<a name="line.613"></a>
+<span class="sourceLineNo">614</span> public List<RegionInfo> getServerRegionInfoSet(final ServerName serverName) {<a name="line.614"></a>
+<span class="sourceLineNo">615</span> final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.615"></a>
+<span class="sourceLineNo">616</span> if (serverInfo == null) return Collections.emptyList();<a name="line.616"></a>
+<span class="sourceLineNo">617</span><a name="line.617"></a>
+<span class="sourceLineNo">618</span> synchronized (serverInfo) {<a name="line.618"></a>
+<span class="sourceLineNo">619</span> return serverInfo.getRegionInfoList();<a name="line.619"></a>
+<span class="sourceLineNo">620</span> }<a name="line.620"></a>
+<span class="sourceLineNo">621</span> }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span> // ============================================================================================<a name="line.623"></a>
+<span class="sourceLineNo">624</span> // TODO: split helpers<a name="line.624"></a>
+<span class="sourceLineNo">625</span> // ============================================================================================<a name="line.625"></a>
+<span class="sourceLineNo">626</span><a name="line.626"></a>
+<span class="sourceLineNo">627</span> /**<a name="line.627"></a>
+<span class="sourceLineNo">628</span> * Call this when we start log splitting a crashed Server.<a name="line.628"></a>
+<span class="sourceLineNo">629</span> * @see #logSplit(ServerName)<a name="line.629"></a>
+<span class="sourceLineNo">630</span> */<a name="line.630"></a>
+<span class="sourceLineNo">631</span> public void logSplitting(final ServerName serverName) {<a name="line.631"></a>
+<span class="sourceLineNo">632</span> final ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.632"></a>
+<span class="sourceLineNo">633</span> synchronized (serverNode) {<a name="line.633"></a>
+<span class="sourceLineNo">634</span> serverNode.setState(ServerState.SPLITTING);<a name="line.634"></a>
+<span class="sourceLineNo">635</span> }<a name="line.635"></a>
+<span class="sourceLineNo">636</span> }<a name="line.636"></a>
+<span class="sourceLineNo">637</span><a name="line.637"></a>
+<span class="sourceLineNo">638</span> /**<a name="line.638"></a>
+<span class="sourceLineNo">639</span> * Called after we've split all logs on a crashed Server.<a name="line.639"></a>
+<span class="sourceLineNo">640</span> * @see #logSplitting(ServerName)<a name="line.640"></a>
+<span class="sourceLineNo">641</span> */<a name="line.641"></a>
+<span class="sourceLineNo">642</span> public void logSplit(final ServerName serverName) {<a name="line.642"></a>
+<span class="sourceLineNo">643</span> final ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.643"></a>
+<span class="sourceLineNo">644</span> synchronized (serverNode) {<a name="line.644"></a>
+<span class="sourceLineNo">645</span> serverNode.setState(ServerState.OFFLINE);<a name="line.645"></a>
+<span class="sourceLineNo">646</span> }<a name="line.646"></a>
+<span class="sourceLineNo">647</span> }<a name="line.647"></a>
+<span class="sourceLineNo">648</span><a name="line.648"></a>
+<span class="sourceLineNo">649</span> public void logSplit(final RegionInfo regionInfo) {<a name="line.649"></a>
+<span class="sourceLineNo">650</span> final RegionStateNode regionNode = getRegionStateNode(regionInfo);<a name="line.650"></a>
+<span class="sourceLineNo">651</span> synchronized (regionNode) {<a name="line.651"></a>
+<span class="sourceLineNo">652</span> regionNode.setState(State.SPLIT);<a name="line.652"></a>
+<span class="sourceLineNo">653</span> }<a name="line.653"></a>
<span class="sourceLineNo">654</span> }<a name="line.654"></a>
<span class="sourceLineNo">655</span><a name="line.655"></a>
-<span class="sourceLineNo">656</span> /**<a name="line.656"></a>
-<span class="sourceLineNo">657</span> * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.657"></a>
-<span class="sourceLineNo">658</span> */<a name="line.658"></a>
-<span class="sourceLineNo">659</span> public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.659"></a>
-<span class="sourceLineNo">660</span> return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.660"></a>
-<span class="sourceLineNo">661</span> }<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span> public Map<ServerName, List<RegionInfo>> getSnapShotOfAssignment(<a name="line.663"></a>
-<span class="sourceLineNo">664</span> final Collection<RegionInfo> regions) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span> final Map<ServerName, List<RegionInfo>> result = new HashMap<ServerName, List<RegionInfo>>();<a name="line.665"></a>
-<span class="sourceLineNo">666</span> for (RegionInfo hri: regions) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span> final RegionStateNode node = getRegionStateNode(hri);<a name="line.667"></a>
-<span class="sourceLineNo">668</span> if (node == null) continue;<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span> // TODO: State.OPEN<a name="line.670"></a>
-<span class="sourceLineNo">671</span> final ServerName serverName = node.getRegionLocation();<a name="line.671"></a>
-<span class="sourceLineNo">672</span> if (serverName == null) continue;<a name="line.672"></a>
-<span class="sourceLineNo">673</span><a name="line.673"></a>
-<span class="sourceLineNo">674</span> List<RegionInfo> serverRegions = result.get(serverName);<a name="line.674"></a>
-<span class="sourceLineNo">675</span> if (serverRegions == null) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span> serverRegions = new ArrayList<RegionInfo>();<a name="line.676"></a>
-<span class="sourceLineNo">677</span> result.put(serverName, serverRegions);<a name="line.677"></a>
-<span class="sourceLineNo">678</span> }<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span> serverRegions.add(node.getRegionInfo());<a name="line.680"></a>
-<span class="sourceLineNo">681</span> }<a name="line.681"></a>
-<span class="sourceLineNo">682</span> return result;<a name="line.682"></a>
-<span class="sourceLineNo">683</span> }<a name="line.683"></a>
-<span class="sourceLineNo">684</span><a name="line.684"></a>
-<span class="sourceLineNo">685</span> public Map<RegionInfo, ServerName> getRegionAssignments() {<a name="line.685"></a>
-<span class="sourceLineNo">686</span> final HashMap<RegionInfo, ServerName> assignments = new HashMap<RegionInfo, ServerName>();<a name="line.686"></a>
-<span class="sourceLineNo">687</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.687"></a>
-<span class="sourceLineNo">688</span> assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.688"></a>
-<span class="sourceLineNo">689</span> }<a name="line.689"></a>
-<span class="sourceLineNo">690</span> return assignments;<a name="line.690"></a>
-<span class="sourceLineNo">691</span> }<a name="line.691"></a>
-<span class="sourceLineNo">692</span><a name="line.692"></a>
-<span class="sourceLineNo">693</span> public Map<RegionState.State, List<RegionInfo>> getRegionByStateOfTable(TableName tableName) {<a name="line.693"></a>
-<span class="sourceLineNo">694</span> final State[] states = State.values();<a name="line.694"></a>
-<span class="sourceLineNo">695</span> final Map<RegionState.State, List<RegionInfo>> tableRegions =<a name="line.695"></a>
-<span class="sourceLineNo">696</span> new HashMap<State, List<RegionInfo>>(states.length);<a name="line.696"></a>
-<span class="sourceLineNo">697</span> for (int i = 0; i < states.length; ++i) {<a name="line.697"></a>
-<span class="sourceLineNo">698</span> tableRegions.put(states[i], new ArrayList<RegionInfo>());<a name="line.698"></a>
-<span class="sourceLineNo">699</span> }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span> if (node.getTable().equals(tableName)) {<a name="line.702"></a>
-<span class="sourceLineNo">703</span> tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.703"></a>
-<span class="sourceLineNo">704</span> }<a name="line.704"></a>
-<span class="sourceLineNo">705</span> }<a name="line.705"></a>
-<span class="sourceLineNo">706</span> return tableRegions;<a name="line.706"></a>
-<span class="sourceLineNo">707</span> }<a name="line.707"></a>
+<span class="sourceLineNo">656</span> @VisibleForTesting<a name="line.656"></a>
+<span class="sourceLineNo">657</span> public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.657"></a>
+<span class="sourceLineNo">658</span> final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.658"></a>
+<span class="sourceLineNo">659</span> synchronized (regionNode) {<a name="line.659"></a>
+<span class="sourceLineNo">660</span> regionNode.setState(state);<a name="line.660"></a>
+<span class="sourceLineNo">661</span> }<a name="line.661"></a>
+<span class="sourceLineNo">662</span> }<a name="line.662"></a>
+<span class="sourceLineNo">663</span><a name="line.663"></a>
+<span class="sourceLineNo">664</span> // ============================================================================================<a name="line.664"></a>
+<span class="sourceLineNo">665</span> // TODO:<a name="line.665"></a>
+<span class="sourceLineNo">666</span> // ============================================================================================<a name="line.666"></a>
+<span class="sourceLineNo">667</span> public List<RegionInfo> getAssignedRegions() {<a name="line.667"></a>
+<span class="sourceLineNo">668</span> final List<RegionInfo> result = new ArrayList<RegionInfo>();<a name="line.668"></a>
+<span class="sourceLineNo">669</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.669"></a>
+<span class="sourceLineNo">670</span> if (!node.isInTransition()) {<a name="line.670"></a>
+<span class="sourceLineNo">671</span> result.add(node.getRegionInfo());<a name="line.671"></a>
+<span class="sourceLineNo">672</span> }<a name="line.672"></a>
+<span class="sourceLineNo">673</span> }<a name="line.673"></a>
+<span class="sourceLineNo">674</span> return result;<a name="line.674"></a>
+<span class="sourceLineNo">675</span> }<a name="line.675"></a>
+<span class="sourceLineNo">676</span><a name="line.676"></a>
+<span class="sourceLineNo">677</span> public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.677"></a>
+<span class="sourceLineNo">678</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.678"></a>
+<span class="sourceLineNo">679</span> if (region != null) {<a name="line.679"></a>
+<span class="sourceLineNo">680</span> synchronized (region) {<a name="line.680"></a>
+<span class="sourceLineNo">681</span> return region.isInState(state);<a name="line.681"></a>
+<span class="sourceLineNo">682</span> }<a name="line.682"></a>
+<span class="sourceLineNo">683</span> }<a name="line.683"></a>
+<span class="sourceLineNo">684</span> return false;<a name="line.684"></a>
+<span class="sourceLineNo">685</span> }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span> public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.687"></a>
+<span class="sourceLineNo">688</span> return isRegionInState(regionInfo, State.OPEN);<a name="line.688"></a>
+<span class="sourceLineNo">689</span> }<a name="line.689"></a>
+<span class="sourceLineNo">690</span><a name="line.690"></a>
+<span class="sourceLineNo">691</span> /**<a name="line.691"></a>
+<span class="sourceLineNo">692</span> * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.692"></a>
+<span class="sourceLineNo">693</span> */<a name="line.693"></a>
+<span class="sourceLineNo">694</span> public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.694"></a>
+<span class="sourceLineNo">695</span> return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.695"></a>
+<span class="sourceLineNo">696</span> }<a name="line.696"></a>
+<span class="sourceLineNo">697</span><a name="line.697"></a>
+<span class="sourceLineNo">698</span> public Map<ServerName, List<RegionInfo>> getSnapShotOfAssignment(<a name="line.698"></a>
+<span class="sourceLineNo">699</span> final Collection<RegionInfo> regions) {<a name="line.699"></a>
+<span class="sourceLineNo">700</span> final Map<ServerName, List<RegionInfo>> result = new HashMap<ServerName, List<RegionInfo>>();<a name="line.700"></a>
+<span class="sourceLineNo">701</span> for (RegionInfo hri: regions) {<a name="line.701"></a>
+<span class="sourceLineNo">702</span> final RegionStateNode node = getRegionStateNode(hri);<a name="line.702"></a>
+<span class="sourceLineNo">703</span> if (node == null) continue;<a name="line.703"></a>
+<span class="sourceLineNo">704</span><a name="line.704"></a>
+<span class="sourceLineNo">705</span> // TODO: State.OPEN<a name="line.705"></a>
+<span class="sourceLineNo">706</span> final ServerName serverName = node.getRegionLocation();<a name="line.706"></a>
+<span class="sourceLineNo">707</span> if (serverName == null) continue;<a name="line.707"></a>
<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span> public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.709"></a>
-<span class="sourceLineNo">710</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.710"></a>
-<span class="sourceLineNo">711</span> if (region != null) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span> synchronized (region) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span> ServerName server = region.getRegionLocation();<a name="line.713"></a>
-<span class="sourceLineNo">714</span> return server != null ? server : region.getLastHost();<a name="line.714"></a>
-<span class="sourceLineNo">715</span> }<a name="line.715"></a>
+<span class="sourceLineNo">709</span> List<RegionInfo> serverRegions = result.get(serverName);<a name="line.709"></a>
+<span class="sourceLineNo">710</span> if (serverRegions == null) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span> serverRegions = new ArrayList<RegionInfo>();<a name="line.711"></a>
+<span class="sourceLineNo">712</span> result.put(serverName, serverRegions);<a name="line.712"></a>
+<span class="sourceLineNo">713</span> }<a name="line.713"></a>
+<span class="sourceLineNo">714</span><a name="line.714"></a>
+<span class="sourceLineNo">715</span> serverRegions.add(node.getRegionInfo());<a name="line.715"></a>
<span class="sourceLineNo">716</span> }<a name="line.716"></a>
-<span class="sourceLineNo">717</span> return null;<a name="line.717"></a>
+<span class="sourceLineNo">717</span> return result;<a name="line.717"></a>
<span class="sourceLineNo">718</span> }<a name="line.718"></a>
<span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span> /**<a name="line.720"></a>
-<span class="sourceLineNo">721</span> * This is an EXPENSIVE clone. Cloning though is the safest thing to do.<a name="line.721"></a>
-<span class="sourceLineNo">722</span> * Can't let out original since it can change and at least the load balancer<a name="line.722"></a>
-<span class="sourceLineNo">723</span> * wants to iterate this exported list. We need to synchronize on regions<a name="line.723"></a>
-<span class="sourceLineNo">724</span> * since all access to this.servers is under a lock on this.regions.<a name="line.724"></a>
-<span class="sourceLineNo">725</span> * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.725"></a>
-<span class="sourceLineNo">726</span> * @return A clone of current assignments by table.<a name="line.726"></a>
-<span class="sourceLineNo">727</span> */<a name="line.727"></a>
-<span class="sourceLineNo">728</span> public Map<TableName, Map<ServerName, List<RegionInfo>>> getAssignmentsByTable(<a name="line.728"></a>
-<span class="sourceLineNo">729</span> final boolean forceByCluster) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span> if (!forceByCluster) return getAssignmentsByTable();<a name="line.730"></a>
-<span class="sourceLineNo">731</span><a name="line.731"></a>
-<span class="sourceLineNo">732</span> final HashMap<ServerName, List<RegionInfo>> ensemble =<a name="line.732"></a>
-<span class="sourceLineNo">733</span> new HashMap<ServerName, List<RegionInfo>>(serverMap.size());<a name="line.733"></a>
-<span class="sourceLineNo">734</span> for (ServerStateNode serverNode: serverMap.values()) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span> ensemble.put(serverNode.getServerName(), serverNode.getRegionInfoList());<a name="line.735"></a>
-<span class="sourceLineNo">736</span> }<a name="line.736"></a>
-<span class="sourceLineNo">737</span><a name="line.737"></a>
-<span class="sourceLineNo">738</span> // TODO: can we use Collections.singletonMap(HConstants.ENSEMBLE_TABLE_NAME, ensemble)?<a name="line.738"></a>
-<span class="sourceLineNo">739</span> final Map<TableName, Map<ServerName, List<RegionInfo>>> result =<a name="line.739"></a>
-<span class="sourceLineNo">740</span> new HashMap<TableName, Map<ServerName, List<RegionInfo>>>(1);<a name="line.740"></a>
-<span class="sourceLineNo">741</span> result.put(HConstants.ENSEMBLE_TABLE_NAME, ensemble);<a name="line.741"></a>
-<span class="sourceLineNo">742</span> return result;<a name="line.742"></a>
-<span class="sourceLineNo">743</span> }<a name="line.743"></a>
-<span class="sourceLineNo">744</span><a name="line.744"></a>
-<span class="sourceLineNo">745</span> public Map<TableName, Map<ServerName, List<RegionInfo>>> getAssignmentsByTable() {<a name="line.745"></a>
-<span class="sourceLineNo">746</span> final Map<TableName, Map<ServerName, List<RegionInfo>>> result = new HashMap<>();<a name="line.746"></a>
-<span class="sourceLineNo">747</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span> Map<ServerName, List<RegionInfo>> tableResult = result.get(node.getTable());<a name="line.748"></a>
-<span class="sourceLineNo">749</span> if (tableResult == null) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span> tableResult = new HashMap<ServerName, List<RegionInfo>>();<a name="line.750"></a>
-<span class="sourceLineNo">751</span> result.put(node.getTable(), tableResult);<a name="line.751"></a>
-<span class="sourceLineNo">752</span> }<a name="line.752"></a>
-<span class="sourceLineNo">753</span><a name="line.753"></a>
-<span class="sourceLineNo">754</span> final ServerName serverName = node.getRegionLocation();<a name="line.754"></a>
-<span class="sourceLineNo">755</span> if (serverName == null) {<a name="line.755"></a>
-<span class="sourceLineNo">756</span> LOG.info("Skipping, no server for " + node);<a name="line.756"></a>
-<span class="sourceLineNo">757</span> continue;<a name="line.757"></a>
-<span class="sourceLineNo">758</span> }<a name="line.758"></a>
-<span class="sourceLineNo">759</span> List<RegionInfo> serverResult = tableResult.get(serverName);<a name="line.759"></a>
-<span class="sourceLineNo">760</span> if (serverResult == null) {<a name="line.760"></a>
-<span class="sourceLineNo">761</span> serverResult = new ArrayList<RegionInfo>();<a name="line.761"></a>
-<span class="sourceLineNo">762</span> tableResult.put(serverName, serverResult);<a name="line.762"></a>
-<span class="sourceLineNo">763</span> }<a name="line.763"></a>
-<span class="sourceLineNo">764</span><a name="line.764"></a>
-<span class="sourceLineNo">765</span> serverResult.add(node.getRegionInfo());<a name="line.765"></a>
-<span class="sourceLineNo">766</span> }<a name="line.766"></a>
-<span class="sourceLineNo">767</span> // Add online servers with no assignment for the table.<a name="line.767"></a>
-<span class="sourceLineNo">768</span> for (Map<ServerName, List<RegionInfo>> table: result.values()) {<a name="line.768"></a>
-<span class="sourceLineNo">769</span> for (ServerName svr : serverMap.keySet()) {<a name="line.769"></a>
-<span class="sourceLineNo">770</span> if (!table.containsKey(svr)) {<a name="line.770"></a>
-<span class="sourceLineNo">771</span> table.put(svr, new ArrayList<RegionInfo>());<a name="line.771"></a>
-<span class="sourceLineNo">772</span> }<a name="line.772"></a>
-<span class="sourceLineNo">773</span> }<a name="line.773"></a>
-<span class="sourceLineNo">774</span> }<a name="line.774"></a>
-<span class="sourceLineNo">775</span> return result;<a name="line.775"></a>
-<span class="sourceLineNo">776</span> }<a name="line.776"></a>
-<span class="sourceLineNo">777</span><a name="line.777"></a>
-<span class="sourceLineNo">778</span> // ==========================================================================<a name="line.778"></a>
-<span class="sourceLineNo">779</span> // Region in transition helpers<a name="line.779"></a>
-<span class="sourceLineNo">780</span> // ==========================================================================<a name="line.780"></a>
-<span class="sourceLineNo">781</span> protected boolean addRegionInTransition(final RegionStateNode regionNode,<a name="line.781"></a>
-<span class="sourceLineNo">782</span> final RegionTransitionProcedure procedure) {<a name="line.782"></a>
-<span class="sourceLineNo">783</span> if (procedure != null && !regionNode.setProcedure(procedure)) return false;<a name="line.783"></a>
-<span class="sourceLineNo">784</span><a name="line.784"></a>
-<span class="sourceLineNo">785</span> regionInTransition.put(regionNode.getRegionInfo(), regionNode);<a name="line.785"></a>
-<span class="sourceLineNo">786</span> return true;<a name="line.786"></a>
-<span class="sourceLineNo">787</span> }<a name="line.787"></a>
+<span class="sourceLineNo">720</span> public Map<RegionInfo, ServerName> getRegionAssignments() {<a name="line.720"></a>
+<span class="sourceLineNo">721</span> final HashMap<RegionInfo, ServerName> assignments = new HashMap<RegionInfo, ServerName>();<a name="line.721"></a>
+<span class="sourceLineNo">722</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span> assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.723"></a>
+<span class="sourceLineNo">724</span> }<a name="line.724"></a>
+<span class="sourceLineNo">725</span> return assignments;<a name="line.725"></a>
+<span class="sourceLineNo">726</span> }<a name="line.726"></a>
+<span class="sourceLineNo">727</span><a name="line.727"></a>
+<span class="sourceLineNo">728</span> public Map<RegionState.State, List<RegionInfo>> getRegionByStateOfTable(TableName tableName) {<a name="line.728"></a>
+<span class="sourceLineNo">729</span> final State[] states = State.values();<a name="line.729"></a>
+<span class="sourceLineNo">730</span> final Map<RegionState.State, List<RegionInfo>> tableRegions =<a name="line.730"></a>
+<span class="sourceLineNo">731</span> new HashMap<State, List<RegionInfo>>(states.length);<a name="line.731"></a>
+<span class="sourceLineNo">732</span> for (int i = 0; i < states.length; ++i) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span> tableRegions.put(states[i], new ArrayList<RegionInfo>());<a name="line.733"></a>
+<span class="sourceLineNo">734</span> }<a name="line.734"></a>
+<span class="sourceLineNo">735</span><a name="line.735"></a>
+<span class="sourceLineNo">736</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.736"></a>
+<span class="sourceLineNo">737</span> if (node.getTable().equals(tableName)) {<a name="line.737"></a>
+<span class="sourceLineNo">738</span> tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.738"></a>
+<span class="sourceLineNo">739</span> }<a name="line.739"></a>
+<span class="sourceLineNo">740</span> }<a name="line.740"></a>
+<span class="sourceLineNo">741</span> return tableRegions;<a name="line.741"></a>
+<span class="sourceLineNo">742</span> }<a name="line.742"></a>
+<span class="sourceLineNo">743</span><a name="line.743"></a>
+<span class="sourceLineNo">744</span> public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.744"></a>
+<span class="sourceLineNo">745</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.745"></a>
+<span class="sourceLineNo">746</span> if (region != null) {<a name="line.746"></a>
+<span class="sourceLineNo">747</span> synchronized (region) {<a name="line.747"></a>
+<span class="sourceLineNo">748</span> ServerName server = region.getRegionLocation();<a name="line.748"></a>
+<span class="sourceLineNo">749</span> return server != null ? server : region.getLastHost();<a name="line.749"></a>
+<span class="sourceLineNo">750</span> }<a name="line.750"></a>
+<span class="sourceLineNo">751</span> }<a name="line.751"></a>
+<span class="sourceLineNo">752</span> return null;<a name="line.752"></a>
+<span class="sourceLineNo">753</span> }<a name="line.753"></a>
+<span class="sourceLineNo">754</span><a name="line.754"></a>
+<span class="sourceLineNo">755</span> /**<a name="line.755"></a>
+<span class="sourceLineNo">756</span> * This is an EXPENSIVE clone. Cloning though is the safest thing to do.<a name="line.756"></a>
+<span class="sourceLineNo">757</span> * Can't let out original since it can change and at least the load balancer<a name="line.757"></a>
+<span class="sourceLineNo">758</span> * wants to iterate this exported list. We need to synchronize on regions<a name="line.758"></a>
+<span class="sourceLineNo">759</span> * since all access to this.servers is under a lock on this.regions.<a name="line.759"></a>
+<span class="sourceLineNo">760</span> * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.760"></a>
+<span class="sourceLineNo">761</span> * @return A clone of current assignments by table.<a name="line.761"></a>
+<span class="sourceLineNo">762</span> */<a name="line.762"></a>
+<span class="sourceLineNo">763</span> public Map<TableName, Map<ServerName, List<RegionInfo>>> getAssignmentsByTable(<a name="line.763"></a>
+<span class="sourceLineNo">764</span> final boolean forceByCluster) {<a name="line.764"></a>
+<span class="sourceLineNo">765</span> if (!forceByCluster) return getAssignmentsByTable();<a name=
<TRUNCATED>
[21/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
index fe1e077..90c31f4 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
@@ -1072,894 +1072,913 @@
<span class="sourceLineNo">1064</span><a name="line.1064"></a>
<span class="sourceLineNo">1065</span> protected boolean waitServerReportEvent(final ServerName serverName, final Procedure proc) {<a name="line.1065"></a>
<span class="sourceLineNo">1066</span> final ServerStateNode serverNode = regionStates.getOrCreateServer(serverName);<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span> return serverNode.getReportEvent().suspendIfNotReady(proc);<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span> }<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span><a name="line.1069"></a>
-<span class="sourceLineNo">1070</span> protected void wakeServerReportEvent(final ServerStateNode serverNode) {<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span> serverNode.getReportEvent().wake(getProcedureScheduler());<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span> }<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span><a name="line.1073"></a>
-<span class="sourceLineNo">1074</span> // ============================================================================================<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span> // RIT chore<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span> // ============================================================================================<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span> private static class RegionInTransitionChore extends ProcedureInMemoryChore<MasterProcedureEnv> {<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span> public RegionInTransitionChore(final int timeoutMsec) {<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span> super(timeoutMsec);<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span> }<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span><a name="line.1081"></a>
-<span class="sourceLineNo">1082</span> @Override<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span> protected void periodicExecute(final MasterProcedureEnv env) {<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span> final AssignmentManager am = env.getAssignmentManager();<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span><a name="line.1085"></a>
-<span class="sourceLineNo">1086</span> final RegionInTransitionStat ritStat = am.computeRegionInTransitionStat();<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span> if (ritStat.hasRegionsOverThreshold()) {<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span> for (RegionState hri: ritStat.getRegionOverThreshold()) {<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span> am.handleRegionOverStuckWarningThreshold(hri.getRegion());<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span> }<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span> }<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span><a name="line.1092"></a>
-<span class="sourceLineNo">1093</span> // update metrics<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span> am.updateRegionsInTransitionMetrics(ritStat);<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span> }<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span> }<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span><a name="line.1097"></a>
-<span class="sourceLineNo">1098</span> public RegionInTransitionStat computeRegionInTransitionStat() {<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span> final RegionInTransitionStat rit = new RegionInTransitionStat(getConfiguration());<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span> rit.update(this);<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span> return rit;<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span> }<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span><a name="line.1103"></a>
-<span class="sourceLineNo">1104</span> public static class RegionInTransitionStat {<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span> private final int ritThreshold;<a name="line.1105"></a>
+<span class="sourceLineNo">1067</span> if (serverNode == null) {<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span> LOG.warn("serverName=null; {}", proc);<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span> }<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span> return serverNode.getReportEvent().suspendIfNotReady(proc);<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span> }<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span><a name="line.1072"></a>
+<span class="sourceLineNo">1073</span> protected void wakeServerReportEvent(final ServerStateNode serverNode) {<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span> serverNode.getReportEvent().wake(getProcedureScheduler());<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span> }<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span><a name="line.1076"></a>
+<span class="sourceLineNo">1077</span> // ============================================================================================<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span> // RIT chore<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span> // ============================================================================================<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span> private static class RegionInTransitionChore extends ProcedureInMemoryChore<MasterProcedureEnv> {<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span> public RegionInTransitionChore(final int timeoutMsec) {<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span> super(timeoutMsec);<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span> }<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span><a name="line.1084"></a>
+<span class="sourceLineNo">1085</span> @Override<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span> protected void periodicExecute(final MasterProcedureEnv env) {<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span> final AssignmentManager am = env.getAssignmentManager();<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span><a name="line.1088"></a>
+<span class="sourceLineNo">1089</span> final RegionInTransitionStat ritStat = am.computeRegionInTransitionStat();<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span> if (ritStat.hasRegionsOverThreshold()) {<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span> for (RegionState hri: ritStat.getRegionOverThreshold()) {<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span> am.handleRegionOverStuckWarningThreshold(hri.getRegion());<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span> }<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span> }<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span><a name="line.1095"></a>
+<span class="sourceLineNo">1096</span> // update metrics<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span> am.updateRegionsInTransitionMetrics(ritStat);<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span> }<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span> }<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span><a name="line.1100"></a>
+<span class="sourceLineNo">1101</span> public RegionInTransitionStat computeRegionInTransitionStat() {<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span> final RegionInTransitionStat rit = new RegionInTransitionStat(getConfiguration());<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span> rit.update(this);<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span> return rit;<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span> }<a name="line.1105"></a>
<span class="sourceLineNo">1106</span><a name="line.1106"></a>
-<span class="sourceLineNo">1107</span> private HashMap<String, RegionState> ritsOverThreshold = null;<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span> private long statTimestamp;<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span> private long oldestRITTime = 0;<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span> private int totalRITsTwiceThreshold = 0;<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span> private int totalRITs = 0;<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span><a name="line.1112"></a>
-<span class="sourceLineNo">1113</span> @VisibleForTesting<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span> public RegionInTransitionStat(final Configuration conf) {<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span> this.ritThreshold =<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span> conf.getInt(METRICS_RIT_STUCK_WARNING_THRESHOLD, DEFAULT_RIT_STUCK_WARNING_THRESHOLD);<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span> }<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span><a name="line.1118"></a>
-<span class="sourceLineNo">1119</span> public int getRITThreshold() {<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span> return ritThreshold;<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span> }<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span><a name="line.1122"></a>
-<span class="sourceLineNo">1123</span> public long getTimestamp() {<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span> return statTimestamp;<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span> }<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span><a name="line.1126"></a>
-<span class="sourceLineNo">1127</span> public int getTotalRITs() {<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span> return totalRITs;<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span> }<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span><a name="line.1130"></a>
-<span class="sourceLineNo">1131</span> public long getOldestRITTime() {<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span> return oldestRITTime;<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span> }<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span><a name="line.1134"></a>
-<span class="sourceLineNo">1135</span> public int getTotalRITsOverThreshold() {<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span> return m != null ? m.size() : 0;<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span> }<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span><a name="line.1139"></a>
-<span class="sourceLineNo">1140</span> public boolean hasRegionsTwiceOverThreshold() {<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span> return totalRITsTwiceThreshold > 0;<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span> }<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span><a name="line.1143"></a>
-<span class="sourceLineNo">1144</span> public boolean hasRegionsOverThreshold() {<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span> return m != null && !m.isEmpty();<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span> }<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span><a name="line.1148"></a>
-<span class="sourceLineNo">1149</span> public Collection<RegionState> getRegionOverThreshold() {<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span> return m != null? m.values(): Collections.EMPTY_SET;<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span> }<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span><a name="line.1153"></a>
-<span class="sourceLineNo">1154</span> public boolean isRegionOverThreshold(final RegionInfo regionInfo) {<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span> return m != null && m.containsKey(regionInfo.getEncodedName());<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span> }<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span><a name="line.1158"></a>
-<span class="sourceLineNo">1159</span> public boolean isRegionTwiceOverThreshold(final RegionInfo regionInfo) {<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span> if (m == null) return false;<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span> final RegionState state = m.get(regionInfo.getEncodedName());<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span> if (state == null) return false;<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span> return (statTimestamp - state.getStamp()) > (ritThreshold * 2);<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span> }<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span><a name="line.1166"></a>
-<span class="sourceLineNo">1167</span> protected void update(final AssignmentManager am) {<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span> final RegionStates regionStates = am.getRegionStates();<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span> this.statTimestamp = EnvironmentEdgeManager.currentTime();<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span> update(regionStates.getRegionsStateInTransition(), statTimestamp);<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span> update(regionStates.getRegionFailedOpen(), statTimestamp);<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span> }<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span><a name="line.1173"></a>
-<span class="sourceLineNo">1174</span> private void update(final Collection<RegionState> regions, final long currentTime) {<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span> for (RegionState state: regions) {<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span> totalRITs++;<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span> final long ritTime = currentTime - state.getStamp();<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span> if (ritTime > ritThreshold) {<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span> if (ritsOverThreshold == null) {<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span> ritsOverThreshold = new HashMap<String, RegionState>();<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span> }<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span> ritsOverThreshold.put(state.getRegion().getEncodedName(), state);<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span> totalRITsTwiceThreshold += (ritTime > (ritThreshold * 2)) ? 1 : 0;<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span> }<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span> if (oldestRITTime < ritTime) {<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span> oldestRITTime = ritTime;<a name="line.1186"></a>
+<span class="sourceLineNo">1107</span> public static class RegionInTransitionStat {<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span> private final int ritThreshold;<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span><a name="line.1109"></a>
+<span class="sourceLineNo">1110</span> private HashMap<String, RegionState> ritsOverThreshold = null;<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span> private long statTimestamp;<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span> private long oldestRITTime = 0;<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span> private int totalRITsTwiceThreshold = 0;<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span> private int totalRITs = 0;<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span><a name="line.1115"></a>
+<span class="sourceLineNo">1116</span> @VisibleForTesting<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span> public RegionInTransitionStat(final Configuration conf) {<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span> this.ritThreshold =<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span> conf.getInt(METRICS_RIT_STUCK_WARNING_THRESHOLD, DEFAULT_RIT_STUCK_WARNING_THRESHOLD);<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span> }<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span><a name="line.1121"></a>
+<span class="sourceLineNo">1122</span> public int getRITThreshold() {<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span> return ritThreshold;<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span> }<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span><a name="line.1125"></a>
+<span class="sourceLineNo">1126</span> public long getTimestamp() {<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span> return statTimestamp;<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span> }<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span><a name="line.1129"></a>
+<span class="sourceLineNo">1130</span> public int getTotalRITs() {<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span> return totalRITs;<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span> }<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span><a name="line.1133"></a>
+<span class="sourceLineNo">1134</span> public long getOldestRITTime() {<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span> return oldestRITTime;<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span> }<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span><a name="line.1137"></a>
+<span class="sourceLineNo">1138</span> public int getTotalRITsOverThreshold() {<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span> return m != null ? m.size() : 0;<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span> }<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span><a name="line.1142"></a>
+<span class="sourceLineNo">1143</span> public boolean hasRegionsTwiceOverThreshold() {<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span> return totalRITsTwiceThreshold > 0;<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span> }<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span><a name="line.1146"></a>
+<span class="sourceLineNo">1147</span> public boolean hasRegionsOverThreshold() {<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span> return m != null && !m.isEmpty();<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span> }<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span><a name="line.1151"></a>
+<span class="sourceLineNo">1152</span> public Collection<RegionState> getRegionOverThreshold() {<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span> return m != null? m.values(): Collections.EMPTY_SET;<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span> }<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span><a name="line.1156"></a>
+<span class="sourceLineNo">1157</span> public boolean isRegionOverThreshold(final RegionInfo regionInfo) {<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span> return m != null && m.containsKey(regionInfo.getEncodedName());<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span> }<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span><a name="line.1161"></a>
+<span class="sourceLineNo">1162</span> public boolean isRegionTwiceOverThreshold(final RegionInfo regionInfo) {<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span> if (m == null) return false;<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span> final RegionState state = m.get(regionInfo.getEncodedName());<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span> if (state == null) return false;<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span> return (statTimestamp - state.getStamp()) > (ritThreshold * 2);<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span> }<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span><a name="line.1169"></a>
+<span class="sourceLineNo">1170</span> protected void update(final AssignmentManager am) {<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span> final RegionStates regionStates = am.getRegionStates();<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span> this.statTimestamp = EnvironmentEdgeManager.currentTime();<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span> update(regionStates.getRegionsStateInTransition(), statTimestamp);<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span> update(regionStates.getRegionFailedOpen(), statTimestamp);<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span> }<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span><a name="line.1176"></a>
+<span class="sourceLineNo">1177</span> private void update(final Collection<RegionState> regions, final long currentTime) {<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span> for (RegionState state: regions) {<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span> totalRITs++;<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span> final long ritTime = currentTime - state.getStamp();<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span> if (ritTime > ritThreshold) {<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span> if (ritsOverThreshold == null) {<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span> ritsOverThreshold = new HashMap<String, RegionState>();<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span> }<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span> ritsOverThreshold.put(state.getRegion().getEncodedName(), state);<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span> totalRITsTwiceThreshold += (ritTime > (ritThreshold * 2)) ? 1 : 0;<a name="line.1186"></a>
<span class="sourceLineNo">1187</span> }<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span> }<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span> }<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span> }<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span><a name="line.1191"></a>
-<span class="sourceLineNo">1192</span> private void updateRegionsInTransitionMetrics(final RegionInTransitionStat ritStat) {<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span> metrics.updateRITOldestAge(ritStat.getOldestRITTime());<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span> metrics.updateRITCount(ritStat.getTotalRITs());<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span> metrics.updateRITCountOverThreshold(ritStat.getTotalRITsOverThreshold());<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span> }<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span><a name="line.1197"></a>
-<span class="sourceLineNo">1198</span> private void handleRegionOverStuckWarningThreshold(final RegionInfo regionInfo) {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span> final RegionStateNode regionNode = regionStates.getRegionStateNode(regionInfo);<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span> //if (regionNode.isStuck()) {<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span> LOG.warn("STUCK Region-In-Transition {}", regionNode);<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span> }<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span><a name="line.1203"></a>
-<span class="sourceLineNo">1204</span> // ============================================================================================<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span> // TODO: Master load/bootstrap<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span> // ============================================================================================<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span> public void joinCluster() throws IOException {<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span> final long startTime = System.currentTimeMillis();<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span> LOG.debug("Joining cluster...");<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span><a name="line.1210"></a>
-<span class="sourceLineNo">1211</span> // Scan hbase:meta to build list of existing regions, servers, and assignment<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span> // hbase:meta is online when we get to here and TableStateManager has been started.<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span> loadMeta();<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span><a name="line.1214"></a>
-<span class="sourceLineNo">1215</span> for (int i = 0; master.getServerManager().countOfRegionServers() < 1; ++i) {<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span> LOG.info("Waiting for RegionServers to join; current count=" +<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span> master.getServerManager().countOfRegionServers());<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span> Threads.sleep(250);<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span> }<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span> LOG.info("Number of RegionServers=" + master.getServerManager().countOfRegionServers());<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span><a name="line.1221"></a>
-<span class="sourceLineNo">1222</span> boolean failover = processofflineServersWithOnlineRegions();<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span><a name="line.1223"></a>
-<span class="sourceLineNo">1224</span> // Start the RIT chore<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span> master.getMasterProcedureExecutor().addChore(this.ritChore);<a name="line.1225"></a>
+<span class="sourceLineNo">1188</span> if (oldestRITTime < ritTime) {<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span> oldestRITTime = ritTime;<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span> }<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span> }<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span> }<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span> }<a name="line.1193"></a>
+<span class="sourceLineNo">1194</span><a name="line.1194"></a>
+<span class="sourceLineNo">1195</span> private void updateRegionsInTransitionMetrics(final RegionInTransitionStat ritStat) {<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span> metrics.updateRITOldestAge(ritStat.getOldestRITTime());<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span> metrics.updateRITCount(ritStat.getTotalRITs());<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span> metrics.updateRITCountOverThreshold(ritStat.getTotalRITsOverThreshold());<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span> }<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span><a name="line.1200"></a>
+<span class="sourceLineNo">1201</span> private void handleRegionOverStuckWarningThreshold(final RegionInfo regionInfo) {<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span> final RegionStateNode regionNode = regionStates.getRegionStateNode(regionInfo);<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span> //if (regionNode.isStuck()) {<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span> LOG.warn("STUCK Region-In-Transition {}", regionNode);<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span> }<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span><a name="line.1206"></a>
+<span class="sourceLineNo">1207</span> // ============================================================================================<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span> // TODO: Master load/bootstrap<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span> // ============================================================================================<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span> public void joinCluster() throws IOException {<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span> final long startTime = System.currentTimeMillis();<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span> LOG.debug("Joining cluster...");<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span><a name="line.1213"></a>
+<span class="sourceLineNo">1214</span> // Scan hbase:meta to build list of existing regions, servers, and assignment<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span> // hbase:meta is online when we get to here and TableStateManager has been started.<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span> loadMeta();<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span><a name="line.1217"></a>
+<span class="sourceLineNo">1218</span> for (int i = 0; master.getServerManager().countOfRegionServers() < 1; ++i) {<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span> LOG.info("Waiting for RegionServers to join; current count=" +<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span> master.getServerManager().countOfRegionServers());<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span> Threads.sleep(250);<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span> }<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span> LOG.info("Number of RegionServers=" + master.getServerManager().countOfRegionServers());<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span><a name="line.1224"></a>
+<span class="sourceLineNo">1225</span> boolean failover = processofflineServersWithOnlineRegions();<a name="line.1225"></a>
<span class="sourceLineNo">1226</span><a name="line.1226"></a>
-<span class="sourceLineNo">1227</span> LOG.info(String.format("Joined the cluster in %s, failover=%s",<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span> StringUtils.humanTimeDiff(System.currentTimeMillis() - startTime), failover));<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span> }<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span><a name="line.1230"></a>
-<span class="sourceLineNo">1231</span> private void loadMeta() throws IOException {<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span> // TODO: use a thread pool<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span> regionStateStore.visitMeta(new RegionStateStore.RegionStateVisitor() {<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span> @Override<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span> public void visitRegionState(final RegionInfo regionInfo, final State state,<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span> final ServerName regionLocation, final ServerName lastHost, final long openSeqNum) {<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span> final RegionStateNode regionNode = regionStates.getOrCreateRegionStateNode(regionInfo);<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span> State localState = state;<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span> if (localState == null) {<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span> // No region state column data in hbase:meta table! Are I doing a rolling upgrade from<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span> // hbase1 to hbase2? Am I restoring a SNAPSHOT or otherwise adding a region to hbase:meta?<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span> // In any of these cases, state is empty. For now, presume OFFLINE but there are probably<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span> // cases where we need to probe more to be sure this correct; TODO informed by experience.<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span> LOG.info(regionInfo.getEncodedName() + " regionState=null; presuming " + State.OFFLINE);<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span> localState = State.OFFLINE;<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span> }<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span> synchronized (regionNode) {<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span> if (!regionNode.isInTransition()) {<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span> regionNode.setState(localState);<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span> regionNode.setLastHost(lastHost);<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span> regionNode.setRegionLocation(regionLocation);<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span> regionNode.setOpenSeqNum(openSeqNum);<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span><a name="line.1253"></a>
-<span class="sourceLineNo">1254</span> if (localState == State.OPEN) {<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span> assert regionLocation != null : "found null region location for " + regionNode;<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span> regionStates.addRegionToServer(regionNode);<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span> } else if (localState == State.OFFLINE || regionInfo.isOffline()) {<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span> regionStates.addToOfflineRegions(regionNode);<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span> } else if (localState == State.CLOSED && getTableStateManager().<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span> isTableState(regionNode.getTable(), TableState.State.DISABLED,<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span> TableState.State.DISABLING)) {<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span> // The region is CLOSED and the table is DISABLED/ DISABLING, there is nothing to<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span> // schedule; the region is inert.<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span> } else {<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span> // These regions should have a procedure in replay<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span> regionStates.addRegionInTransition(regionNode, null);<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span> }<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span> }<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span> }<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span> }<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span> });<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span><a name="line.1272"></a>
-<span class="sourceLineNo">1273</span> // every assignment is blocked until meta is loaded.<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span> wakeMetaLoadedEvent();<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span> }<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span><a name="line.1276"></a>
-<span class="sourceLineNo">1277</span> /**<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span> * Look at what is in meta and the list of servers that have checked in and make reconciliation.<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span> * We cannot tell definitively the difference between a clean shutdown and a cluster that has<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span> * been crashed down. At this stage of a Master startup, they look the same: they have the<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span> * same state in hbase:meta. We could do detective work probing ZK and the FS for old WALs to<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span> * split but SCP does this already so just let it do its job.<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span> * <p>>The profiles of clean shutdown and cluster crash-down are the same because on clean<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span> * shutdown currently, we do not update hbase:meta with region close state (In AMv2, region<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span> * state is kept in hbse:meta). Usually the master runs all region transitions as of AMv2 but on<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span> * cluster controlled shutdown, the RegionServers close all their regions only reporting the<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span> * final change to the Master. Currently this report is ignored. Later we could take it and<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span> * update as many regions as we can before hbase:meta goes down or have the master run the<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span> * close of all regions out on the cluster but we may never be able to achieve the proper state on<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span> * all regions (at least not w/o lots of painful manipulations and waiting) so clean shutdown<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span> * might not be possible especially on big clusters.... And clean shutdown will take time. Given<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span> * this current state of affairs, we just run ServerCrashProcedure in both cases. It will always<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span> * do the right thing.<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span> * @return True if for sure this is a failover where a Master is starting up into an already<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span> * running cluster.<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span> */<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span> // The assumption here is that if RSs are crashing while we are executing this<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span> // they will be handled by the SSH that are put in the ServerManager deadservers "queue".<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span> private boolean processofflineServersWithOnlineRegions() {<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span> boolean deadServers = !master.getServerManager().getDeadServers().isEmpty();<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span> final Set<ServerName> offlineServersWithOnlineRegions = new HashSet<>();<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span> int size = regionStates.getRegionStateNodes().size();<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span> final List<RegionInfo> offlineRegionsToAssign = new ArrayList<>(size);<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span> // If deadservers then its a failover, else, we are not sure yet.<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span> boolean failover = deadServers;<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span> for (RegionStateNode regionNode: regionStates.getRegionStateNodes()) {<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span> // Region State can be OPEN even if we did controlled cluster shutdown; Master does not close<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span> // the regions in this case. The RegionServer does the close so hbase:meta is state in<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span> // hbase:meta is not updated -- Master does all updates -- and is left with OPEN as region<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span> // state in meta. How to tell difference between ordered shutdown and crashed-down cluster<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span> // then? We can't. Not currently. Perhaps if we updated hbase:meta with CLOSED on ordered<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span> // shutdown. This would slow shutdown though and not all edits would make it in anyways.<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span> // TODO: Examine.<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span> // Because we can't be sure it an ordered shutdown, we run ServerCrashProcedure always.<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span> // ServerCrashProcedure will try to retain old deploy when it goes to assign.<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span> if (regionNode.getState() == State.OPEN) {<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span> final ServerName serverName = regionNode.getRegionLocation();<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span> if (!master.getServerManager().isServerOnline(serverName)) {<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span> offlineServersWithOnlineRegions.add(serverName);<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span> } else {<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span> // Server is online. This a failover. Master is starting into already-running cluster.<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span> failover = true;<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span> }<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span> } else if (regionNode.getState() == State.OFFLINE) {<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span> if (isTableEnabled(regionNode.getTable())) {<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span> offlineRegionsToAssign.add(regionNode.getRegionInfo());<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span> }<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span> }<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span> }<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span> // Kill servers with online regions just-in-case. Runs ServerCrashProcedure.<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span> for (ServerName serverName: offlineServersWithOnlineRegions) {<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span> if (!master.getServerManager().isServerOnline(serverName)) {<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span> LOG.info("KILL RegionServer=" + serverName + " hosting regions but not online.");<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span> killRegionServer(serverName);<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span> }<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span> }<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span> setFailoverCleanupDone(true);<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span><a name="line.1338"></a>
-<span class="sourceLineNo">1339</span> // Assign offline regions. Uses round-robin.<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span> if (offlineRegionsToAssign.size() > 0) {<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span> master.getMasterProcedureExecutor().submitProcedures(master.getAssignmentManager().<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span> createRoundRobinAssignProcedures(offlineRegionsToAssign));<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span> }<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span><a name="line.1344"></a>
-<span class="sourceLineNo">1345</span> return failover;<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span> }<a name="line.1346"></a>
+<span class="sourceLineNo">1227</span> // Start the RIT chore<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span> master.getMasterProcedureExecutor().addChore(this.ritChore);<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span><a name="line.1229"></a>
+<span class="sourceLineNo">1230</span> LOG.info(String.format("Joined the cluster in %s, failover=%s",<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span> StringUtils.humanTimeDiff(System.currentTimeMillis() - startTime), failover));<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span> }<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span><a name="line.1233"></a>
+<span class="sourceLineNo">1234</span> private void loadMeta() throws IOException {<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span> // TODO: use a thread pool<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span> regionStateStore.visitMeta(new RegionStateStore.RegionStateVisitor() {<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span> @Override<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span> public void visitRegionState(final RegionInfo regionInfo, final State state,<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span> final ServerName regionLocation, final ServerName lastHost, final long openSeqNum) {<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span> final RegionStateNode regionNode = regionStates.getOrCreateRegionStateNode(regionInfo);<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span> State localState = state;<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span> if (localState == null) {<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span> // No region state column data in hbase:meta table! Are I doing a rolling upgrade from<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span> // hbase1 to hbase2? Am I restoring a SNAPSHOT or otherwise adding a region to hbase:meta?<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span> // In any of these cases, state is empty. For now, presume OFFLINE but there are probably<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span> // cases where we need to probe more to be sure this correct; TODO informed by experience.<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span> LOG.info(regionInfo.getEncodedName() + " regionState=null; presuming " + State.OFFLINE);<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span> localState = State.OFFLINE;<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span> }<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span> synchronized (regionNode) {<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span> if (!regionNode.isInTransition()) {<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span> regionNode.setState(localState);<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span> regionNode.setLastHost(lastHost);<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span> regionNode.setRegionLocation(regionLocation);<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span> regionNode.setOpenSeqNum(openSeqNum);<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span><a name="line.1256"></a>
+<span class="sourceLineNo">1257</span> if (localState == State.OPEN) {<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span> assert regionLocation != null : "found null region location for " + regionNode;<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span> regionStates.addRegionToServer(regionNode);<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span> } else if (localState == State.OFFLINE || regionInfo.isOffline()) {<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span> regionStates.addToOfflineRegions(regionNode);<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span> } else if (localState == State.CLOSED && getTableStateManager().<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span> isTableState(regionNode.getTable(), TableState.State.DISABLED,<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span> TableState.State.DISABLING)) {<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span> // The region is CLOSED and the table is DISABLED/ DISABLING, there is nothing to<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span> // schedule; the region is inert.<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span> } else {<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span> // These regions should have a procedure in replay<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span> regionStates.addRegionInTransition(regionNode, null);<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span> }<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span> }<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span> }<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span> }<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span> });<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span><a name="line.1275"></a>
+<span class="sourceLineNo">1276</span> // every assignment is blocked until meta is loaded.<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span> wakeMetaLoadedEvent();<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span> }<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span><a name="line.1279"></a>
+<span class="sourceLineNo">1280</span> /**<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span> * Look at what is in meta and the list of servers that have checked in and make reconciliation.<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span> * We cannot tell definitively the difference between a clean shutdown and a cluster that has<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span> * been crashed down. At this stage of a Master startup, they look the same: they have the<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span> * same state in hbase:meta. We could do detective work probing ZK and the FS for old WALs to<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span> * split but SCP does this already so just let it do its job.<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span> * <p>>The profiles of clean shutdown and cluster crash-down are the same because on clean<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span> * shutdown currently, we do not update hbase:meta with region close state (In AMv2, region<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span> * state is kept in hbse:meta). Usually the master runs all region transitions as of AMv2 but on<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span> * cluster controlled shutdown, the RegionServers close all their regions only reporting the<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span> * final change to the Master. Currently this report is ignored. Later we could take it and<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span> * update as many regions as we can before hbase:meta goes down or have the master run the<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span> * close of all regions out on the cluster but we may never be able to achieve the proper state on<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span> * all regions (at least not w/o lots of painful manipulations and waiting) so clean shutdown<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span> * might not be possible especially on big clusters.... And clean shutdown will take time. Given<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span> * this current state of affairs, we just run ServerCrashProcedure in both cases. It will always<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span> * do the right thing.<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span> * @return True if for sure this is a failover where a Master is starting up into an already<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span> * running cluster.<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span> */<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span> // The assumption here is that if RSs are crashing while we are executing this<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span> // they will be handled by the SSH that are put in the ServerManager deadservers "queue".<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span> private boolean processofflineServersWithOnlineRegions() {<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span> boolean deadServers = !master.getServerManager().getDeadServers().isEmpty();<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span> final Set<ServerName> offlineServersWithOnlineRegions = new HashSet<>();<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span> int size = regionStates.getRegionStateNodes().size();<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span> final List<RegionInfo> offlineRegionsToAssign = new ArrayList<>(size);<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span> // If deadservers then its a failover, else, we are not sure yet.<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span> boolean failover = deadServers;<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span> for (RegionStateNode regionNode: regionStates.getRegionStateNodes()) {<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span> // Region State can be OPEN even if we did controlled cluster shutdown; Master does not close<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span> // the regions in this case. The RegionServer does the close so hbase:meta is state in<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span> // hbase:meta is not updated -- Master does all updates -- and is left with OPEN as region<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span> // state in meta. How to tell difference between ordered shutdown and crashed-down cluster<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span> // then? We can't. Not currently. Perhaps if we updated hbase:meta with CLOSED on ordered<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span> // shutdown. This would slow shutdown though and not all edits would make it in anyways.<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span> // TODO: Examine.<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span> // Because we can't be sure it an ordered shutdown, we run ServerCrashProcedure always.<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span> // ServerCrashProcedure will try to retain old deploy when it goes to assign.<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span> if (regionNode.getState() == State.OPEN) {<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span> final ServerName serverName = regionNode.getRegionLocation();<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span> if (!master.getServerManager().isServerOnline(serverName)) {<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span> offlineServersWithOnlineRegions.add(serverName);<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span> } else {<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span> // Server is online. This a failover. Master is starting into already-running cluster.<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span> failover = true;<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span> }<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span> } else if (regionNode.getState() == State.OFFLINE) {<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span> if (isTableEnabled(regionNode.getTable())) {<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span> offlineRegionsToAssign.add(regionNode.getRegionInfo());<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span> }<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span> }<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span> }<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span> // Kill servers with online regions just-in-case. Runs ServerCrashProcedure.<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span> for (ServerName serverName: offlineServersWithOnlineRegions) {<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span> if (!master.getServerManager().isServerOnline(serverName)) {<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span> LOG.info("KILL RegionServer=" + serverName + " hosting regions but not online.");<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span> killRegionServer(serverName);<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span> }<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span> }<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span> setFailoverCleanupDone(true);<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span><a name="line.1341"></a>
+<span class="sourceLineNo">1342</span> // Assign offline regions. Uses round-robin.<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span> if (offlineRegionsToAssign.size() > 0) {<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span> master.getMasterProcedureExecutor().submitProcedures(master.getAssignmentManager().<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span> createRoundRobinAssignProcedures(offlineRegionsToAssign));<a name="line.1345"></a>
+<span class="sourceLineNo">1346</span> }<a name="line.1346"></a>
<span class="sourceLineNo">1347</span><a name="line.1347"></a>
-<span class="sourceLineNo">1348</span> /**<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span> * Used by ServerCrashProcedure to make sure AssignmentManager has completed<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span> * the failover cleanup before re-assigning regions of dead servers. So that<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span> * when re-assignment happens, AssignmentManager has proper region states.<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span> */<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span> public boolean isFailoverCleanupDone() {<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span> return failoverCleanupDone.isReady();<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span> }<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span><a name="line.1356"></a>
-<span class="sourceLineNo">1357</span> /**<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span> * Used by ServerCrashProcedure tests verify the ability to suspend the<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span> * execution of the ServerCrashProcedure.<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span> */<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span> @VisibleForTesting<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span> public void setFailoverCleanupDone(final boolean b) {<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span> master.getMasterProcedureExecutor().getEnvironment()<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span> .setEventReady(failoverCleanupDone, b);<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span> }<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span><a name="line.1366"></a>
-<span class="sourceLineNo">1367</span> public ProcedureEvent getFailoverCleanupEvent() {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span> return failoverCleanupDone;<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span> }<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span><a name="line.1370"></a>
-<span class="sourceLineNo">1371</span> /**<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span> * Used to check if the failover cleanup is done.<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span> * if not we throw PleaseHoldException since we are rebuilding the RegionStates<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span> * @param hri region to check if it is already rebuild<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span> * @throws PleaseHoldException if the failover cleanup is not completed<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span> */<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span> private void checkFailoverCleanupCompleted(final RegionInfo hri) throws PleaseHoldException {<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span> if (!isRunning()) {<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span> throw new PleaseHoldException("AssignmentManager not running");<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span> }<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span><a name="line.1381"></a>
-<span class="sourceLineNo">1382</span> // TODO: can we avoid throwing an exception if hri is already loaded?<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span> // at the moment we bypass only meta<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span> boolean meta = isMetaRegion(hri);<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span> boolean cleanup = isFailoverCleanupDone();<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span> if (!isMetaRegion(hri) && !isFailoverCleanupDone()) {<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span> String msg = "Master not fully online; hbase:meta=" + meta + ", failoverCleanup=" + cleanup;<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span> throw new PleaseHoldException(msg);<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span> }<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span> }<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span><a name="line.1391"></a>
-<span class="sourceLineNo">1392</span> // ============================================================================================<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span> // TODO: Metrics<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span> // ============================================================================================<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span> public int getNumRegionsOpened() {<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span> // TODO: Used by TestRegionPlacement.java and assume monotonically increasing value<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span> return 0;<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span> }<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span><a name="line.1399"></a>
-<span class="sourceLineNo">1400</span> public void submitServerCrash(final ServerName serverName, final boolean shouldSplitWal) {<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span> boolean carryingMeta = isCarryingMeta(serverName);<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span> ProcedureExecutor<MasterProcedureEnv> procExec = this.master.getMasterProcedureExecutor();<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span> procExec.submitProcedure(new ServerCrashProcedure(procExec.getEnvironment(), serverName,<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span> shouldSplitWal, carryingMeta));<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span> LOG.debug("Added=" + serverName +<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span> " to dead servers, submitted shutdown handler to be executed meta=" + carryingMeta);<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span> }<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span><a name="line.1408"></a>
-<span class="sourceLineNo">1409</span> public void offlineRegion(final RegionInfo regionInfo) {<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span> // TODO used by MasterRpcServices ServerCrashProcedure<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span> final RegionStateNode node = regionStates.getRegionStateNode(regionInfo);<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span> if (node != null) node.offline();<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span> }<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span><a name="line.1414"></a>
-<span class="sourceLineNo">1415</span> public void onlineRegion(final RegionInfo regionInfo, final ServerName serverName) {<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span> // TODO used by TestSplitTransactionOnCluster.java<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span> }<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span><a name="line.1418"></a>
-<span class="sourceLineNo">1419</span> public Map<ServerName, List<RegionInfo>> getSnapShotOfAssignment(<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span> final Collection<RegionInfo> regions) {<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span> return regionStates.getSnapShotOfAssignment(regions);<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span> }<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span><a name="line.1423"></a>
-<span class="sourceLineNo">1424</span> // ============================================================================================<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span> // TODO: UTILS/HELPERS?<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span> // ============================================================================================<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span> /**<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span> * Used by the client (via master) to identify if all regions have the schema updates<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span> *<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span> * @param tableName<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span> * @return Pair indicating the status of the alter command (pending/total)<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span> * @throws IOException<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span> */<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span> public Pair<Integer, Integer> getReopenStatus(TableName tableName) {<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span> if (isTableDisabled(tableName)) return new Pair<Integer, Integer>(0, 0);<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span><a name="line.1436"></a>
-<span class="sourceLineNo">1437</span> final List<RegionState> states = regionStates.getTableRegionStates(tableName);<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span> int ritCount = 0;<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span> for (RegionState regionState: states) {<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span> if (!regionState.isOpened()) ritCount++;<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span> }<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span> return new Pair<Integer, Integer>(ritCount, states.size());<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span> }<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span><a name="line.1444"></a>
-<span class="sourceLineNo">1445</span> // ============================================================================================<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span> // TODO: Region State In Transition<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span> // ============================================================================================<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span> protected boolean addRegionInTransition(final RegionStateNode regionNode,<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span> final RegionTransitionProcedure procedure) {<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span> return regionStates.addRegionInTransition(regionNode, procedure);<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span> }<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span><a name="line.1452"></a>
-<span class="sourceLineNo">1453</span> protected void removeRegionInTransition(final RegionStateNode regionNode,<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span> final RegionTransitionProcedure procedure) {<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span> regionStates.removeRegionInTransition(regionNode, procedure);<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span> }<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span><a name="line.1457"></a>
-<span class="sourceLineNo">1458</span> public boolean hasRegionsInTransition() {<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span> return regionStates.hasRegionsInTransition();<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span> }<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span><a name="line.1461"></a>
-<span class="sourceLineNo">1462</span> public List<RegionStateNode> getRegionsInTransition() {<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span> return regionStates.getRegionsInTransition();<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span> }<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span><a name="line.1465"></a>
-<span class="sourceLineNo">1466</span> public List<RegionInfo> getAssignedRegions() {<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span> return regionStates.getAssignedRegions();<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span> }<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span><a name="line.1469"></a>
-<span class="sourceLineNo">1470</span> public RegionInfo getRegionInfo(final byte[] regionName) {<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span> final RegionStateNode regionState = regionStates.getRegionStateNodeFromName(regionName);<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span> return regionState != null ? regionState.getRegionInfo() : null;<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span> }<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span><a name="line.1474"></a>
-<span class="sourceLineNo">1475</span> // ============================================================================================<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span> // TODO: Region Status update<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span> // ============================================================================================<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span> private void sendRegionOpenedNotification(final RegionInfo regionInfo,<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span> final ServerName serverName) {<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span> getBalancer().regionOnline(regionInfo, serverName);<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span> if (!this.listeners.isEmpty()) {<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span> for (AssignmentListener listener : this.listeners) {<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span> listener.regionOpened(regionInfo, serverName);<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span> }<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span> }<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span> }<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span><a name="line.1487"></a>
-<span class="sourceLineNo">1488</span> private void sendRegionClosedNotification(final RegionInfo regionInfo) {<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span> getBalancer().regionOffline(regionInfo);<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span> if (!this.listeners.isEmpty()) {<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span> for (AssignmentListener listener : this.listeners) {<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span> listener.regionClosed(regionInfo);<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span> }<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span> }<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span> }<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span><a name="line.1496"></a>
-<span class="sourceLineNo">1497</span> public void markRegionAsOpening(final RegionStateNode regionNode) throws IOException {<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span> synchronized (regionNode) {<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span> regionNode.transitionState(State.OPENING, RegionStates.STATES_EXPECTED_ON_OPEN);<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span> regionStates.addRegionToServer(regionNode);<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span> regionStateStore.updateRegionLocation(regionNode);<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span> }<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span><a name="line.1503"></a>
-<span class="sourceLineNo">1504</span> // update the operation count metrics<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span> metrics.incrementOperationCounter();<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span> }<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span><a name="line.1507"></a>
-<span class="sourceLineNo">1508</span> public void undoRegionAsOpening(final RegionStateNode regionNode) {<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span> boolean opening = false;<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span> synchronized (regionNode) {<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span> if (regionNode.isInState(State.OPENING)) {<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span> opening = true;<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span> regionStates.removeRegionFromServer(regionNode.getRegionLocation(), regionNode);<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span> }<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span> // Should we update hbase:meta?<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span> }<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span> if (opening) {<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span> // TODO: Metrics. Do opposite of metrics.incrementOperationCounter();<a name="line.1518"></a>
+<span class="sourceLineNo">1348</span> return failover;<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span> }<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span><a name="line.1350"></a>
+<span class="sourceLineNo">1351</span> /**<a name="line.1351"></a>
+<span class="sourceLineNo">1352</span> * Used by ServerCrashProcedure to make sure AssignmentManager has completed<a name="line.1352"></a>
+<span class="sourceLineNo">1353</span> * the failover cleanup before re-assigning regions of dead servers. So that<a name="line.1353"></a>
+<span class="sourceLineNo">1354</span> * when re-assignment happens, AssignmentManager has proper region states.<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span> */<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span> public boolean isFailoverCleanupDone() {<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span> return failoverCleanupDone.isReady();<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span> }<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span><a name="line.1359"></a>
+<span class="sourceLineNo">1360</span> /**<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span> * Used by ServerCrashProcedure tests verify the ability to suspend the<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span> * execution of the ServerCrashProcedure.<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span> */<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span> @VisibleForTesting<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span> public void setFailoverCleanupDone(final boolean b) {<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span> master.getMasterProcedureExecutor().getEnvironment()<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span> .setEventReady(failoverCleanupDone, b);<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span> }<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span><a name="line.1369"></a>
+<span class="sourceLineNo">1370</span> public ProcedureEvent getFailoverCleanupEvent() {<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span> return failoverCleanupDone;<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span> }<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span><a name="line.1373"></a>
+<span class="sourceLineNo">1374</span> /**<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span> * Used to check if the failover cleanup is done.<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span> * if not we throw PleaseHoldException since we are rebuilding the RegionStates<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span> * @param hri region to check if it is already rebuild<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span> * @throws PleaseHoldException if the failover cleanup is not completed<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span> */<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span> private void checkFailoverCleanupCompleted(final RegionInfo hri) throws PleaseHoldException {<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span> if (!isRunning()) {<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span> throw new PleaseHoldException("AssignmentManager not running");<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span> }<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span><a name="line.1384"></a>
+<span class="sourceLineNo">1385</span> // TODO: can we avoid throwing an exception if hri is already loaded?<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span> // at the moment we bypass only meta<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span> boolean meta = isMetaRegion(hri);<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span> boolean cleanup = isFailoverCleanupDone();<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span> if (!isMetaRegion(hri) && !isFailoverCleanupDone()) {<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span> String msg = "Master not fully online; hbase:meta=" + meta + ", failoverCleanup=" + cleanup;<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span> throw new PleaseHoldException(msg);<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span> }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span> }<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span><a name="line.1394"></a>
+<span class="sourceLineNo">1395</span> // ============================================================================================<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span> // TODO: Metrics<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span> // ============================================================================================<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span> public int getNumRegionsOpened() {<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span> // TODO: Used by TestRegionPlacement.java and assume monotonically increasing value<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span> return 0;<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span> }<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span><a name="line.1402"></a>
+<span class="sourceLineNo">1403</span> public void submitServerCrash(final ServerName serverName, final boolean shouldSplitWal) {<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span> boolean carryingMeta = isCarryingMeta(serverName);<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span> ProcedureExecutor<MasterProcedureEnv> procExec = this.master.getMasterProcedureExecutor();<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span> procExec.submitProcedure(new ServerCrashProcedure(procExec.getEnvironment(), serverName,<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span> shouldSplitWal, carryingMeta));<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span> LOG.debug("Added=" + serverName +<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span> " to dead servers, submitted shutdown handler to be executed meta=" + carryingMeta);<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span> }<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span><a name="line.1411"></a>
+<span class="sourceLineNo">1412</span> public void offlineRegion(final RegionInfo regionInfo) {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span> // TODO used by MasterRpcServices ServerCrashProcedure<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span> final RegionStateNode node = regionStates.getRegionStateNode(regionInfo);<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span> if (node != null) node.offline();<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span> }<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span><a name="line.1417"></a>
+<span class="sourceLineNo">1418</span> public void onlineRegion(final RegionInfo regionInfo, final ServerName serverName) {<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span> // TODO used by TestSplitTransactionOnCluster.java<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span> }<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span><a name="line.1421"></a>
+<span class="sourceLineNo">1422</span> public Map<ServerName, List<RegionInfo>> getSnapShotOfAssignment(<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span> final Collection<RegionInfo> regions) {<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span> return regionStates.getSnapShotOfAssignment(regions);<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span> }<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span><a name="line.1426"></a>
+<span class="sourceLineNo">1427</span> // ============================================================================================<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span> // TODO: UTILS/HELPERS?<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span> // ============================================================================================<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span> /**<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span> * Used by the client (via master) to identify if all regions have the schema updates<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span> *<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span> * @param tableName<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span> * @return Pair indicating the status of the alter command (pending/total)<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span> * @throws IOException<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span> */<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span> public Pair<Integer, Integer> getReopenStatus(TableName tableName) {<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span> if (isTableDisabled(tableName)) return new Pair<Integer, Integer>(0, 0);<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span><a name="line.1439"></a>
+<span class="sourceLineNo">1440</span> final List<RegionState> states = regionStates.getTableRegionStates(tableName);<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span> int ritCount = 0;<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span> for (RegionState regionState: states) {<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span> if (!regionState.isOpened()) ritCount++;<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span> }<a name="line.1444"></a>
+<span class="sourceLineNo">1445</
<TRUNCATED>
[22/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html
index fe1e077..90c31f4 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html
@@ -1072,894 +1072,913 @@
<span class="sourceLineNo">1064</span><a name="line.1064"></a>
<span class="sourceLineNo">1065</span> protected boolean waitServerReportEvent(final ServerName serverName, final Procedure proc) {<a name="line.1065"></a>
<span class="sourceLineNo">1066</span> final ServerStateNode serverNode = regionStates.getOrCreateServer(serverName);<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span> return serverNode.getReportEvent().suspendIfNotReady(proc);<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span> }<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span><a name="line.1069"></a>
-<span class="sourceLineNo">1070</span> protected void wakeServerReportEvent(final ServerStateNode serverNode) {<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span> serverNode.getReportEvent().wake(getProcedureScheduler());<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span> }<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span><a name="line.1073"></a>
-<span class="sourceLineNo">1074</span> // ============================================================================================<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span> // RIT chore<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span> // ============================================================================================<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span> private static class RegionInTransitionChore extends ProcedureInMemoryChore<MasterProcedureEnv> {<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span> public RegionInTransitionChore(final int timeoutMsec) {<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span> super(timeoutMsec);<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span> }<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span><a name="line.1081"></a>
-<span class="sourceLineNo">1082</span> @Override<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span> protected void periodicExecute(final MasterProcedureEnv env) {<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span> final AssignmentManager am = env.getAssignmentManager();<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span><a name="line.1085"></a>
-<span class="sourceLineNo">1086</span> final RegionInTransitionStat ritStat = am.computeRegionInTransitionStat();<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span> if (ritStat.hasRegionsOverThreshold()) {<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span> for (RegionState hri: ritStat.getRegionOverThreshold()) {<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span> am.handleRegionOverStuckWarningThreshold(hri.getRegion());<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span> }<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span> }<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span><a name="line.1092"></a>
-<span class="sourceLineNo">1093</span> // update metrics<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span> am.updateRegionsInTransitionMetrics(ritStat);<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span> }<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span> }<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span><a name="line.1097"></a>
-<span class="sourceLineNo">1098</span> public RegionInTransitionStat computeRegionInTransitionStat() {<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span> final RegionInTransitionStat rit = new RegionInTransitionStat(getConfiguration());<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span> rit.update(this);<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span> return rit;<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span> }<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span><a name="line.1103"></a>
-<span class="sourceLineNo">1104</span> public static class RegionInTransitionStat {<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span> private final int ritThreshold;<a name="line.1105"></a>
+<span class="sourceLineNo">1067</span> if (serverNode == null) {<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span> LOG.warn("serverName=null; {}", proc);<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span> }<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span> return serverNode.getReportEvent().suspendIfNotReady(proc);<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span> }<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span><a name="line.1072"></a>
+<span class="sourceLineNo">1073</span> protected void wakeServerReportEvent(final ServerStateNode serverNode) {<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span> serverNode.getReportEvent().wake(getProcedureScheduler());<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span> }<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span><a name="line.1076"></a>
+<span class="sourceLineNo">1077</span> // ============================================================================================<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span> // RIT chore<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span> // ============================================================================================<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span> private static class RegionInTransitionChore extends ProcedureInMemoryChore<MasterProcedureEnv> {<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span> public RegionInTransitionChore(final int timeoutMsec) {<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span> super(timeoutMsec);<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span> }<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span><a name="line.1084"></a>
+<span class="sourceLineNo">1085</span> @Override<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span> protected void periodicExecute(final MasterProcedureEnv env) {<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span> final AssignmentManager am = env.getAssignmentManager();<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span><a name="line.1088"></a>
+<span class="sourceLineNo">1089</span> final RegionInTransitionStat ritStat = am.computeRegionInTransitionStat();<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span> if (ritStat.hasRegionsOverThreshold()) {<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span> for (RegionState hri: ritStat.getRegionOverThreshold()) {<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span> am.handleRegionOverStuckWarningThreshold(hri.getRegion());<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span> }<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span> }<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span><a name="line.1095"></a>
+<span class="sourceLineNo">1096</span> // update metrics<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span> am.updateRegionsInTransitionMetrics(ritStat);<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span> }<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span> }<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span><a name="line.1100"></a>
+<span class="sourceLineNo">1101</span> public RegionInTransitionStat computeRegionInTransitionStat() {<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span> final RegionInTransitionStat rit = new RegionInTransitionStat(getConfiguration());<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span> rit.update(this);<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span> return rit;<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span> }<a name="line.1105"></a>
<span class="sourceLineNo">1106</span><a name="line.1106"></a>
-<span class="sourceLineNo">1107</span> private HashMap<String, RegionState> ritsOverThreshold = null;<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span> private long statTimestamp;<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span> private long oldestRITTime = 0;<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span> private int totalRITsTwiceThreshold = 0;<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span> private int totalRITs = 0;<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span><a name="line.1112"></a>
-<span class="sourceLineNo">1113</span> @VisibleForTesting<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span> public RegionInTransitionStat(final Configuration conf) {<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span> this.ritThreshold =<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span> conf.getInt(METRICS_RIT_STUCK_WARNING_THRESHOLD, DEFAULT_RIT_STUCK_WARNING_THRESHOLD);<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span> }<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span><a name="line.1118"></a>
-<span class="sourceLineNo">1119</span> public int getRITThreshold() {<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span> return ritThreshold;<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span> }<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span><a name="line.1122"></a>
-<span class="sourceLineNo">1123</span> public long getTimestamp() {<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span> return statTimestamp;<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span> }<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span><a name="line.1126"></a>
-<span class="sourceLineNo">1127</span> public int getTotalRITs() {<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span> return totalRITs;<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span> }<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span><a name="line.1130"></a>
-<span class="sourceLineNo">1131</span> public long getOldestRITTime() {<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span> return oldestRITTime;<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span> }<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span><a name="line.1134"></a>
-<span class="sourceLineNo">1135</span> public int getTotalRITsOverThreshold() {<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span> return m != null ? m.size() : 0;<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span> }<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span><a name="line.1139"></a>
-<span class="sourceLineNo">1140</span> public boolean hasRegionsTwiceOverThreshold() {<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span> return totalRITsTwiceThreshold > 0;<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span> }<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span><a name="line.1143"></a>
-<span class="sourceLineNo">1144</span> public boolean hasRegionsOverThreshold() {<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span> return m != null && !m.isEmpty();<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span> }<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span><a name="line.1148"></a>
-<span class="sourceLineNo">1149</span> public Collection<RegionState> getRegionOverThreshold() {<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span> return m != null? m.values(): Collections.EMPTY_SET;<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span> }<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span><a name="line.1153"></a>
-<span class="sourceLineNo">1154</span> public boolean isRegionOverThreshold(final RegionInfo regionInfo) {<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span> return m != null && m.containsKey(regionInfo.getEncodedName());<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span> }<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span><a name="line.1158"></a>
-<span class="sourceLineNo">1159</span> public boolean isRegionTwiceOverThreshold(final RegionInfo regionInfo) {<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span> if (m == null) return false;<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span> final RegionState state = m.get(regionInfo.getEncodedName());<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span> if (state == null) return false;<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span> return (statTimestamp - state.getStamp()) > (ritThreshold * 2);<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span> }<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span><a name="line.1166"></a>
-<span class="sourceLineNo">1167</span> protected void update(final AssignmentManager am) {<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span> final RegionStates regionStates = am.getRegionStates();<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span> this.statTimestamp = EnvironmentEdgeManager.currentTime();<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span> update(regionStates.getRegionsStateInTransition(), statTimestamp);<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span> update(regionStates.getRegionFailedOpen(), statTimestamp);<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span> }<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span><a name="line.1173"></a>
-<span class="sourceLineNo">1174</span> private void update(final Collection<RegionState> regions, final long currentTime) {<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span> for (RegionState state: regions) {<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span> totalRITs++;<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span> final long ritTime = currentTime - state.getStamp();<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span> if (ritTime > ritThreshold) {<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span> if (ritsOverThreshold == null) {<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span> ritsOverThreshold = new HashMap<String, RegionState>();<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span> }<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span> ritsOverThreshold.put(state.getRegion().getEncodedName(), state);<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span> totalRITsTwiceThreshold += (ritTime > (ritThreshold * 2)) ? 1 : 0;<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span> }<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span> if (oldestRITTime < ritTime) {<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span> oldestRITTime = ritTime;<a name="line.1186"></a>
+<span class="sourceLineNo">1107</span> public static class RegionInTransitionStat {<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span> private final int ritThreshold;<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span><a name="line.1109"></a>
+<span class="sourceLineNo">1110</span> private HashMap<String, RegionState> ritsOverThreshold = null;<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span> private long statTimestamp;<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span> private long oldestRITTime = 0;<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span> private int totalRITsTwiceThreshold = 0;<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span> private int totalRITs = 0;<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span><a name="line.1115"></a>
+<span class="sourceLineNo">1116</span> @VisibleForTesting<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span> public RegionInTransitionStat(final Configuration conf) {<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span> this.ritThreshold =<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span> conf.getInt(METRICS_RIT_STUCK_WARNING_THRESHOLD, DEFAULT_RIT_STUCK_WARNING_THRESHOLD);<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span> }<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span><a name="line.1121"></a>
+<span class="sourceLineNo">1122</span> public int getRITThreshold() {<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span> return ritThreshold;<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span> }<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span><a name="line.1125"></a>
+<span class="sourceLineNo">1126</span> public long getTimestamp() {<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span> return statTimestamp;<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span> }<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span><a name="line.1129"></a>
+<span class="sourceLineNo">1130</span> public int getTotalRITs() {<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span> return totalRITs;<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span> }<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span><a name="line.1133"></a>
+<span class="sourceLineNo">1134</span> public long getOldestRITTime() {<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span> return oldestRITTime;<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span> }<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span><a name="line.1137"></a>
+<span class="sourceLineNo">1138</span> public int getTotalRITsOverThreshold() {<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span> return m != null ? m.size() : 0;<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span> }<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span><a name="line.1142"></a>
+<span class="sourceLineNo">1143</span> public boolean hasRegionsTwiceOverThreshold() {<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span> return totalRITsTwiceThreshold > 0;<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span> }<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span><a name="line.1146"></a>
+<span class="sourceLineNo">1147</span> public boolean hasRegionsOverThreshold() {<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span> return m != null && !m.isEmpty();<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span> }<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span><a name="line.1151"></a>
+<span class="sourceLineNo">1152</span> public Collection<RegionState> getRegionOverThreshold() {<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span> return m != null? m.values(): Collections.EMPTY_SET;<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span> }<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span><a name="line.1156"></a>
+<span class="sourceLineNo">1157</span> public boolean isRegionOverThreshold(final RegionInfo regionInfo) {<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span> return m != null && m.containsKey(regionInfo.getEncodedName());<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span> }<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span><a name="line.1161"></a>
+<span class="sourceLineNo">1162</span> public boolean isRegionTwiceOverThreshold(final RegionInfo regionInfo) {<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span> Map<String, RegionState> m = this.ritsOverThreshold;<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span> if (m == null) return false;<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span> final RegionState state = m.get(regionInfo.getEncodedName());<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span> if (state == null) return false;<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span> return (statTimestamp - state.getStamp()) > (ritThreshold * 2);<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span> }<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span><a name="line.1169"></a>
+<span class="sourceLineNo">1170</span> protected void update(final AssignmentManager am) {<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span> final RegionStates regionStates = am.getRegionStates();<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span> this.statTimestamp = EnvironmentEdgeManager.currentTime();<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span> update(regionStates.getRegionsStateInTransition(), statTimestamp);<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span> update(regionStates.getRegionFailedOpen(), statTimestamp);<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span> }<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span><a name="line.1176"></a>
+<span class="sourceLineNo">1177</span> private void update(final Collection<RegionState> regions, final long currentTime) {<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span> for (RegionState state: regions) {<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span> totalRITs++;<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span> final long ritTime = currentTime - state.getStamp();<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span> if (ritTime > ritThreshold) {<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span> if (ritsOverThreshold == null) {<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span> ritsOverThreshold = new HashMap<String, RegionState>();<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span> }<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span> ritsOverThreshold.put(state.getRegion().getEncodedName(), state);<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span> totalRITsTwiceThreshold += (ritTime > (ritThreshold * 2)) ? 1 : 0;<a name="line.1186"></a>
<span class="sourceLineNo">1187</span> }<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span> }<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span> }<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span> }<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span><a name="line.1191"></a>
-<span class="sourceLineNo">1192</span> private void updateRegionsInTransitionMetrics(final RegionInTransitionStat ritStat) {<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span> metrics.updateRITOldestAge(ritStat.getOldestRITTime());<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span> metrics.updateRITCount(ritStat.getTotalRITs());<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span> metrics.updateRITCountOverThreshold(ritStat.getTotalRITsOverThreshold());<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span> }<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span><a name="line.1197"></a>
-<span class="sourceLineNo">1198</span> private void handleRegionOverStuckWarningThreshold(final RegionInfo regionInfo) {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span> final RegionStateNode regionNode = regionStates.getRegionStateNode(regionInfo);<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span> //if (regionNode.isStuck()) {<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span> LOG.warn("STUCK Region-In-Transition {}", regionNode);<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span> }<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span><a name="line.1203"></a>
-<span class="sourceLineNo">1204</span> // ============================================================================================<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span> // TODO: Master load/bootstrap<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span> // ============================================================================================<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span> public void joinCluster() throws IOException {<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span> final long startTime = System.currentTimeMillis();<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span> LOG.debug("Joining cluster...");<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span><a name="line.1210"></a>
-<span class="sourceLineNo">1211</span> // Scan hbase:meta to build list of existing regions, servers, and assignment<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span> // hbase:meta is online when we get to here and TableStateManager has been started.<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span> loadMeta();<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span><a name="line.1214"></a>
-<span class="sourceLineNo">1215</span> for (int i = 0; master.getServerManager().countOfRegionServers() < 1; ++i) {<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span> LOG.info("Waiting for RegionServers to join; current count=" +<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span> master.getServerManager().countOfRegionServers());<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span> Threads.sleep(250);<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span> }<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span> LOG.info("Number of RegionServers=" + master.getServerManager().countOfRegionServers());<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span><a name="line.1221"></a>
-<span class="sourceLineNo">1222</span> boolean failover = processofflineServersWithOnlineRegions();<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span><a name="line.1223"></a>
-<span class="sourceLineNo">1224</span> // Start the RIT chore<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span> master.getMasterProcedureExecutor().addChore(this.ritChore);<a name="line.1225"></a>
+<span class="sourceLineNo">1188</span> if (oldestRITTime < ritTime) {<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span> oldestRITTime = ritTime;<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span> }<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span> }<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span> }<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span> }<a name="line.1193"></a>
+<span class="sourceLineNo">1194</span><a name="line.1194"></a>
+<span class="sourceLineNo">1195</span> private void updateRegionsInTransitionMetrics(final RegionInTransitionStat ritStat) {<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span> metrics.updateRITOldestAge(ritStat.getOldestRITTime());<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span> metrics.updateRITCount(ritStat.getTotalRITs());<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span> metrics.updateRITCountOverThreshold(ritStat.getTotalRITsOverThreshold());<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span> }<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span><a name="line.1200"></a>
+<span class="sourceLineNo">1201</span> private void handleRegionOverStuckWarningThreshold(final RegionInfo regionInfo) {<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span> final RegionStateNode regionNode = regionStates.getRegionStateNode(regionInfo);<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span> //if (regionNode.isStuck()) {<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span> LOG.warn("STUCK Region-In-Transition {}", regionNode);<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span> }<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span><a name="line.1206"></a>
+<span class="sourceLineNo">1207</span> // ============================================================================================<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span> // TODO: Master load/bootstrap<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span> // ============================================================================================<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span> public void joinCluster() throws IOException {<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span> final long startTime = System.currentTimeMillis();<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span> LOG.debug("Joining cluster...");<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span><a name="line.1213"></a>
+<span class="sourceLineNo">1214</span> // Scan hbase:meta to build list of existing regions, servers, and assignment<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span> // hbase:meta is online when we get to here and TableStateManager has been started.<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span> loadMeta();<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span><a name="line.1217"></a>
+<span class="sourceLineNo">1218</span> for (int i = 0; master.getServerManager().countOfRegionServers() < 1; ++i) {<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span> LOG.info("Waiting for RegionServers to join; current count=" +<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span> master.getServerManager().countOfRegionServers());<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span> Threads.sleep(250);<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span> }<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span> LOG.info("Number of RegionServers=" + master.getServerManager().countOfRegionServers());<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span><a name="line.1224"></a>
+<span class="sourceLineNo">1225</span> boolean failover = processofflineServersWithOnlineRegions();<a name="line.1225"></a>
<span class="sourceLineNo">1226</span><a name="line.1226"></a>
-<span class="sourceLineNo">1227</span> LOG.info(String.format("Joined the cluster in %s, failover=%s",<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span> StringUtils.humanTimeDiff(System.currentTimeMillis() - startTime), failover));<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span> }<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span><a name="line.1230"></a>
-<span class="sourceLineNo">1231</span> private void loadMeta() throws IOException {<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span> // TODO: use a thread pool<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span> regionStateStore.visitMeta(new RegionStateStore.RegionStateVisitor() {<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span> @Override<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span> public void visitRegionState(final RegionInfo regionInfo, final State state,<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span> final ServerName regionLocation, final ServerName lastHost, final long openSeqNum) {<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span> final RegionStateNode regionNode = regionStates.getOrCreateRegionStateNode(regionInfo);<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span> State localState = state;<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span> if (localState == null) {<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span> // No region state column data in hbase:meta table! Are I doing a rolling upgrade from<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span> // hbase1 to hbase2? Am I restoring a SNAPSHOT or otherwise adding a region to hbase:meta?<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span> // In any of these cases, state is empty. For now, presume OFFLINE but there are probably<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span> // cases where we need to probe more to be sure this correct; TODO informed by experience.<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span> LOG.info(regionInfo.getEncodedName() + " regionState=null; presuming " + State.OFFLINE);<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span> localState = State.OFFLINE;<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span> }<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span> synchronized (regionNode) {<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span> if (!regionNode.isInTransition()) {<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span> regionNode.setState(localState);<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span> regionNode.setLastHost(lastHost);<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span> regionNode.setRegionLocation(regionLocation);<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span> regionNode.setOpenSeqNum(openSeqNum);<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span><a name="line.1253"></a>
-<span class="sourceLineNo">1254</span> if (localState == State.OPEN) {<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span> assert regionLocation != null : "found null region location for " + regionNode;<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span> regionStates.addRegionToServer(regionNode);<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span> } else if (localState == State.OFFLINE || regionInfo.isOffline()) {<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span> regionStates.addToOfflineRegions(regionNode);<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span> } else if (localState == State.CLOSED && getTableStateManager().<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span> isTableState(regionNode.getTable(), TableState.State.DISABLED,<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span> TableState.State.DISABLING)) {<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span> // The region is CLOSED and the table is DISABLED/ DISABLING, there is nothing to<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span> // schedule; the region is inert.<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span> } else {<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span> // These regions should have a procedure in replay<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span> regionStates.addRegionInTransition(regionNode, null);<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span> }<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span> }<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span> }<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span> }<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span> });<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span><a name="line.1272"></a>
-<span class="sourceLineNo">1273</span> // every assignment is blocked until meta is loaded.<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span> wakeMetaLoadedEvent();<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span> }<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span><a name="line.1276"></a>
-<span class="sourceLineNo">1277</span> /**<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span> * Look at what is in meta and the list of servers that have checked in and make reconciliation.<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span> * We cannot tell definitively the difference between a clean shutdown and a cluster that has<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span> * been crashed down. At this stage of a Master startup, they look the same: they have the<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span> * same state in hbase:meta. We could do detective work probing ZK and the FS for old WALs to<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span> * split but SCP does this already so just let it do its job.<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span> * <p>>The profiles of clean shutdown and cluster crash-down are the same because on clean<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span> * shutdown currently, we do not update hbase:meta with region close state (In AMv2, region<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span> * state is kept in hbse:meta). Usually the master runs all region transitions as of AMv2 but on<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span> * cluster controlled shutdown, the RegionServers close all their regions only reporting the<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span> * final change to the Master. Currently this report is ignored. Later we could take it and<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span> * update as many regions as we can before hbase:meta goes down or have the master run the<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span> * close of all regions out on the cluster but we may never be able to achieve the proper state on<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span> * all regions (at least not w/o lots of painful manipulations and waiting) so clean shutdown<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span> * might not be possible especially on big clusters.... And clean shutdown will take time. Given<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span> * this current state of affairs, we just run ServerCrashProcedure in both cases. It will always<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span> * do the right thing.<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span> * @return True if for sure this is a failover where a Master is starting up into an already<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span> * running cluster.<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span> */<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span> // The assumption here is that if RSs are crashing while we are executing this<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span> // they will be handled by the SSH that are put in the ServerManager deadservers "queue".<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span> private boolean processofflineServersWithOnlineRegions() {<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span> boolean deadServers = !master.getServerManager().getDeadServers().isEmpty();<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span> final Set<ServerName> offlineServersWithOnlineRegions = new HashSet<>();<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span> int size = regionStates.getRegionStateNodes().size();<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span> final List<RegionInfo> offlineRegionsToAssign = new ArrayList<>(size);<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span> // If deadservers then its a failover, else, we are not sure yet.<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span> boolean failover = deadServers;<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span> for (RegionStateNode regionNode: regionStates.getRegionStateNodes()) {<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span> // Region State can be OPEN even if we did controlled cluster shutdown; Master does not close<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span> // the regions in this case. The RegionServer does the close so hbase:meta is state in<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span> // hbase:meta is not updated -- Master does all updates -- and is left with OPEN as region<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span> // state in meta. How to tell difference between ordered shutdown and crashed-down cluster<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span> // then? We can't. Not currently. Perhaps if we updated hbase:meta with CLOSED on ordered<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span> // shutdown. This would slow shutdown though and not all edits would make it in anyways.<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span> // TODO: Examine.<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span> // Because we can't be sure it an ordered shutdown, we run ServerCrashProcedure always.<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span> // ServerCrashProcedure will try to retain old deploy when it goes to assign.<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span> if (regionNode.getState() == State.OPEN) {<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span> final ServerName serverName = regionNode.getRegionLocation();<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span> if (!master.getServerManager().isServerOnline(serverName)) {<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span> offlineServersWithOnlineRegions.add(serverName);<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span> } else {<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span> // Server is online. This a failover. Master is starting into already-running cluster.<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span> failover = true;<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span> }<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span> } else if (regionNode.getState() == State.OFFLINE) {<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span> if (isTableEnabled(regionNode.getTable())) {<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span> offlineRegionsToAssign.add(regionNode.getRegionInfo());<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span> }<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span> }<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span> }<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span> // Kill servers with online regions just-in-case. Runs ServerCrashProcedure.<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span> for (ServerName serverName: offlineServersWithOnlineRegions) {<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span> if (!master.getServerManager().isServerOnline(serverName)) {<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span> LOG.info("KILL RegionServer=" + serverName + " hosting regions but not online.");<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span> killRegionServer(serverName);<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span> }<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span> }<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span> setFailoverCleanupDone(true);<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span><a name="line.1338"></a>
-<span class="sourceLineNo">1339</span> // Assign offline regions. Uses round-robin.<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span> if (offlineRegionsToAssign.size() > 0) {<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span> master.getMasterProcedureExecutor().submitProcedures(master.getAssignmentManager().<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span> createRoundRobinAssignProcedures(offlineRegionsToAssign));<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span> }<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span><a name="line.1344"></a>
-<span class="sourceLineNo">1345</span> return failover;<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span> }<a name="line.1346"></a>
+<span class="sourceLineNo">1227</span> // Start the RIT chore<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span> master.getMasterProcedureExecutor().addChore(this.ritChore);<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span><a name="line.1229"></a>
+<span class="sourceLineNo">1230</span> LOG.info(String.format("Joined the cluster in %s, failover=%s",<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span> StringUtils.humanTimeDiff(System.currentTimeMillis() - startTime), failover));<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span> }<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span><a name="line.1233"></a>
+<span class="sourceLineNo">1234</span> private void loadMeta() throws IOException {<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span> // TODO: use a thread pool<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span> regionStateStore.visitMeta(new RegionStateStore.RegionStateVisitor() {<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span> @Override<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span> public void visitRegionState(final RegionInfo regionInfo, final State state,<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span> final ServerName regionLocation, final ServerName lastHost, final long openSeqNum) {<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span> final RegionStateNode regionNode = regionStates.getOrCreateRegionStateNode(regionInfo);<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span> State localState = state;<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span> if (localState == null) {<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span> // No region state column data in hbase:meta table! Are I doing a rolling upgrade from<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span> // hbase1 to hbase2? Am I restoring a SNAPSHOT or otherwise adding a region to hbase:meta?<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span> // In any of these cases, state is empty. For now, presume OFFLINE but there are probably<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span> // cases where we need to probe more to be sure this correct; TODO informed by experience.<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span> LOG.info(regionInfo.getEncodedName() + " regionState=null; presuming " + State.OFFLINE);<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span> localState = State.OFFLINE;<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span> }<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span> synchronized (regionNode) {<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span> if (!regionNode.isInTransition()) {<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span> regionNode.setState(localState);<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span> regionNode.setLastHost(lastHost);<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span> regionNode.setRegionLocation(regionLocation);<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span> regionNode.setOpenSeqNum(openSeqNum);<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span><a name="line.1256"></a>
+<span class="sourceLineNo">1257</span> if (localState == State.OPEN) {<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span> assert regionLocation != null : "found null region location for " + regionNode;<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span> regionStates.addRegionToServer(regionNode);<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span> } else if (localState == State.OFFLINE || regionInfo.isOffline()) {<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span> regionStates.addToOfflineRegions(regionNode);<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span> } else if (localState == State.CLOSED && getTableStateManager().<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span> isTableState(regionNode.getTable(), TableState.State.DISABLED,<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span> TableState.State.DISABLING)) {<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span> // The region is CLOSED and the table is DISABLED/ DISABLING, there is nothing to<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span> // schedule; the region is inert.<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span> } else {<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span> // These regions should have a procedure in replay<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span> regionStates.addRegionInTransition(regionNode, null);<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span> }<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span> }<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span> }<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span> }<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span> });<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span><a name="line.1275"></a>
+<span class="sourceLineNo">1276</span> // every assignment is blocked until meta is loaded.<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span> wakeMetaLoadedEvent();<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span> }<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span><a name="line.1279"></a>
+<span class="sourceLineNo">1280</span> /**<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span> * Look at what is in meta and the list of servers that have checked in and make reconciliation.<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span> * We cannot tell definitively the difference between a clean shutdown and a cluster that has<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span> * been crashed down. At this stage of a Master startup, they look the same: they have the<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span> * same state in hbase:meta. We could do detective work probing ZK and the FS for old WALs to<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span> * split but SCP does this already so just let it do its job.<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span> * <p>>The profiles of clean shutdown and cluster crash-down are the same because on clean<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span> * shutdown currently, we do not update hbase:meta with region close state (In AMv2, region<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span> * state is kept in hbse:meta). Usually the master runs all region transitions as of AMv2 but on<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span> * cluster controlled shutdown, the RegionServers close all their regions only reporting the<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span> * final change to the Master. Currently this report is ignored. Later we could take it and<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span> * update as many regions as we can before hbase:meta goes down or have the master run the<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span> * close of all regions out on the cluster but we may never be able to achieve the proper state on<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span> * all regions (at least not w/o lots of painful manipulations and waiting) so clean shutdown<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span> * might not be possible especially on big clusters.... And clean shutdown will take time. Given<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span> * this current state of affairs, we just run ServerCrashProcedure in both cases. It will always<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span> * do the right thing.<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span> * @return True if for sure this is a failover where a Master is starting up into an already<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span> * running cluster.<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span> */<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span> // The assumption here is that if RSs are crashing while we are executing this<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span> // they will be handled by the SSH that are put in the ServerManager deadservers "queue".<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span> private boolean processofflineServersWithOnlineRegions() {<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span> boolean deadServers = !master.getServerManager().getDeadServers().isEmpty();<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span> final Set<ServerName> offlineServersWithOnlineRegions = new HashSet<>();<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span> int size = regionStates.getRegionStateNodes().size();<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span> final List<RegionInfo> offlineRegionsToAssign = new ArrayList<>(size);<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span> // If deadservers then its a failover, else, we are not sure yet.<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span> boolean failover = deadServers;<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span> for (RegionStateNode regionNode: regionStates.getRegionStateNodes()) {<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span> // Region State can be OPEN even if we did controlled cluster shutdown; Master does not close<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span> // the regions in this case. The RegionServer does the close so hbase:meta is state in<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span> // hbase:meta is not updated -- Master does all updates -- and is left with OPEN as region<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span> // state in meta. How to tell difference between ordered shutdown and crashed-down cluster<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span> // then? We can't. Not currently. Perhaps if we updated hbase:meta with CLOSED on ordered<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span> // shutdown. This would slow shutdown though and not all edits would make it in anyways.<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span> // TODO: Examine.<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span> // Because we can't be sure it an ordered shutdown, we run ServerCrashProcedure always.<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span> // ServerCrashProcedure will try to retain old deploy when it goes to assign.<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span> if (regionNode.getState() == State.OPEN) {<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span> final ServerName serverName = regionNode.getRegionLocation();<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span> if (!master.getServerManager().isServerOnline(serverName)) {<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span> offlineServersWithOnlineRegions.add(serverName);<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span> } else {<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span> // Server is online. This a failover. Master is starting into already-running cluster.<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span> failover = true;<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span> }<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span> } else if (regionNode.getState() == State.OFFLINE) {<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span> if (isTableEnabled(regionNode.getTable())) {<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span> offlineRegionsToAssign.add(regionNode.getRegionInfo());<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span> }<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span> }<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span> }<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span> // Kill servers with online regions just-in-case. Runs ServerCrashProcedure.<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span> for (ServerName serverName: offlineServersWithOnlineRegions) {<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span> if (!master.getServerManager().isServerOnline(serverName)) {<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span> LOG.info("KILL RegionServer=" + serverName + " hosting regions but not online.");<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span> killRegionServer(serverName);<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span> }<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span> }<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span> setFailoverCleanupDone(true);<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span><a name="line.1341"></a>
+<span class="sourceLineNo">1342</span> // Assign offline regions. Uses round-robin.<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span> if (offlineRegionsToAssign.size() > 0) {<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span> master.getMasterProcedureExecutor().submitProcedures(master.getAssignmentManager().<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span> createRoundRobinAssignProcedures(offlineRegionsToAssign));<a name="line.1345"></a>
+<span class="sourceLineNo">1346</span> }<a name="line.1346"></a>
<span class="sourceLineNo">1347</span><a name="line.1347"></a>
-<span class="sourceLineNo">1348</span> /**<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span> * Used by ServerCrashProcedure to make sure AssignmentManager has completed<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span> * the failover cleanup before re-assigning regions of dead servers. So that<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span> * when re-assignment happens, AssignmentManager has proper region states.<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span> */<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span> public boolean isFailoverCleanupDone() {<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span> return failoverCleanupDone.isReady();<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span> }<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span><a name="line.1356"></a>
-<span class="sourceLineNo">1357</span> /**<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span> * Used by ServerCrashProcedure tests verify the ability to suspend the<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span> * execution of the ServerCrashProcedure.<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span> */<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span> @VisibleForTesting<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span> public void setFailoverCleanupDone(final boolean b) {<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span> master.getMasterProcedureExecutor().getEnvironment()<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span> .setEventReady(failoverCleanupDone, b);<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span> }<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span><a name="line.1366"></a>
-<span class="sourceLineNo">1367</span> public ProcedureEvent getFailoverCleanupEvent() {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span> return failoverCleanupDone;<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span> }<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span><a name="line.1370"></a>
-<span class="sourceLineNo">1371</span> /**<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span> * Used to check if the failover cleanup is done.<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span> * if not we throw PleaseHoldException since we are rebuilding the RegionStates<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span> * @param hri region to check if it is already rebuild<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span> * @throws PleaseHoldException if the failover cleanup is not completed<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span> */<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span> private void checkFailoverCleanupCompleted(final RegionInfo hri) throws PleaseHoldException {<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span> if (!isRunning()) {<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span> throw new PleaseHoldException("AssignmentManager not running");<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span> }<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span><a name="line.1381"></a>
-<span class="sourceLineNo">1382</span> // TODO: can we avoid throwing an exception if hri is already loaded?<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span> // at the moment we bypass only meta<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span> boolean meta = isMetaRegion(hri);<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span> boolean cleanup = isFailoverCleanupDone();<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span> if (!isMetaRegion(hri) && !isFailoverCleanupDone()) {<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span> String msg = "Master not fully online; hbase:meta=" + meta + ", failoverCleanup=" + cleanup;<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span> throw new PleaseHoldException(msg);<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span> }<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span> }<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span><a name="line.1391"></a>
-<span class="sourceLineNo">1392</span> // ============================================================================================<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span> // TODO: Metrics<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span> // ============================================================================================<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span> public int getNumRegionsOpened() {<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span> // TODO: Used by TestRegionPlacement.java and assume monotonically increasing value<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span> return 0;<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span> }<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span><a name="line.1399"></a>
-<span class="sourceLineNo">1400</span> public void submitServerCrash(final ServerName serverName, final boolean shouldSplitWal) {<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span> boolean carryingMeta = isCarryingMeta(serverName);<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span> ProcedureExecutor<MasterProcedureEnv> procExec = this.master.getMasterProcedureExecutor();<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span> procExec.submitProcedure(new ServerCrashProcedure(procExec.getEnvironment(), serverName,<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span> shouldSplitWal, carryingMeta));<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span> LOG.debug("Added=" + serverName +<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span> " to dead servers, submitted shutdown handler to be executed meta=" + carryingMeta);<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span> }<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span><a name="line.1408"></a>
-<span class="sourceLineNo">1409</span> public void offlineRegion(final RegionInfo regionInfo) {<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span> // TODO used by MasterRpcServices ServerCrashProcedure<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span> final RegionStateNode node = regionStates.getRegionStateNode(regionInfo);<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span> if (node != null) node.offline();<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span> }<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span><a name="line.1414"></a>
-<span class="sourceLineNo">1415</span> public void onlineRegion(final RegionInfo regionInfo, final ServerName serverName) {<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span> // TODO used by TestSplitTransactionOnCluster.java<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span> }<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span><a name="line.1418"></a>
-<span class="sourceLineNo">1419</span> public Map<ServerName, List<RegionInfo>> getSnapShotOfAssignment(<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span> final Collection<RegionInfo> regions) {<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span> return regionStates.getSnapShotOfAssignment(regions);<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span> }<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span><a name="line.1423"></a>
-<span class="sourceLineNo">1424</span> // ============================================================================================<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span> // TODO: UTILS/HELPERS?<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span> // ============================================================================================<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span> /**<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span> * Used by the client (via master) to identify if all regions have the schema updates<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span> *<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span> * @param tableName<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span> * @return Pair indicating the status of the alter command (pending/total)<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span> * @throws IOException<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span> */<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span> public Pair<Integer, Integer> getReopenStatus(TableName tableName) {<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span> if (isTableDisabled(tableName)) return new Pair<Integer, Integer>(0, 0);<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span><a name="line.1436"></a>
-<span class="sourceLineNo">1437</span> final List<RegionState> states = regionStates.getTableRegionStates(tableName);<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span> int ritCount = 0;<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span> for (RegionState regionState: states) {<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span> if (!regionState.isOpened()) ritCount++;<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span> }<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span> return new Pair<Integer, Integer>(ritCount, states.size());<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span> }<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span><a name="line.1444"></a>
-<span class="sourceLineNo">1445</span> // ============================================================================================<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span> // TODO: Region State In Transition<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span> // ============================================================================================<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span> protected boolean addRegionInTransition(final RegionStateNode regionNode,<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span> final RegionTransitionProcedure procedure) {<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span> return regionStates.addRegionInTransition(regionNode, procedure);<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span> }<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span><a name="line.1452"></a>
-<span class="sourceLineNo">1453</span> protected void removeRegionInTransition(final RegionStateNode regionNode,<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span> final RegionTransitionProcedure procedure) {<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span> regionStates.removeRegionInTransition(regionNode, procedure);<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span> }<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span><a name="line.1457"></a>
-<span class="sourceLineNo">1458</span> public boolean hasRegionsInTransition() {<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span> return regionStates.hasRegionsInTransition();<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span> }<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span><a name="line.1461"></a>
-<span class="sourceLineNo">1462</span> public List<RegionStateNode> getRegionsInTransition() {<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span> return regionStates.getRegionsInTransition();<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span> }<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span><a name="line.1465"></a>
-<span class="sourceLineNo">1466</span> public List<RegionInfo> getAssignedRegions() {<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span> return regionStates.getAssignedRegions();<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span> }<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span><a name="line.1469"></a>
-<span class="sourceLineNo">1470</span> public RegionInfo getRegionInfo(final byte[] regionName) {<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span> final RegionStateNode regionState = regionStates.getRegionStateNodeFromName(regionName);<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span> return regionState != null ? regionState.getRegionInfo() : null;<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span> }<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span><a name="line.1474"></a>
-<span class="sourceLineNo">1475</span> // ============================================================================================<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span> // TODO: Region Status update<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span> // ============================================================================================<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span> private void sendRegionOpenedNotification(final RegionInfo regionInfo,<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span> final ServerName serverName) {<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span> getBalancer().regionOnline(regionInfo, serverName);<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span> if (!this.listeners.isEmpty()) {<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span> for (AssignmentListener listener : this.listeners) {<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span> listener.regionOpened(regionInfo, serverName);<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span> }<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span> }<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span> }<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span><a name="line.1487"></a>
-<span class="sourceLineNo">1488</span> private void sendRegionClosedNotification(final RegionInfo regionInfo) {<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span> getBalancer().regionOffline(regionInfo);<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span> if (!this.listeners.isEmpty()) {<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span> for (AssignmentListener listener : this.listeners) {<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span> listener.regionClosed(regionInfo);<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span> }<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span> }<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span> }<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span><a name="line.1496"></a>
-<span class="sourceLineNo">1497</span> public void markRegionAsOpening(final RegionStateNode regionNode) throws IOException {<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span> synchronized (regionNode) {<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span> regionNode.transitionState(State.OPENING, RegionStates.STATES_EXPECTED_ON_OPEN);<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span> regionStates.addRegionToServer(regionNode);<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span> regionStateStore.updateRegionLocation(regionNode);<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span> }<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span><a name="line.1503"></a>
-<span class="sourceLineNo">1504</span> // update the operation count metrics<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span> metrics.incrementOperationCounter();<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span> }<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span><a name="line.1507"></a>
-<span class="sourceLineNo">1508</span> public void undoRegionAsOpening(final RegionStateNode regionNode) {<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span> boolean opening = false;<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span> synchronized (regionNode) {<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span> if (regionNode.isInState(State.OPENING)) {<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span> opening = true;<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span> regionStates.removeRegionFromServer(regionNode.getRegionLocation(), regionNode);<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span> }<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span> // Should we update hbase:meta?<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span> }<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span> if (opening) {<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span> // TODO: Metrics. Do opposite of metrics.incrementOperationCounter();<a name="line.1518"></a>
+<span class="sourceLineNo">1348</span> return failover;<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span> }<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span><a name="line.1350"></a>
+<span class="sourceLineNo">1351</span> /**<a name="line.1351"></a>
+<span class="sourceLineNo">1352</span> * Used by ServerCrashProcedure to make sure AssignmentManager has completed<a name="line.1352"></a>
+<span class="sourceLineNo">1353</span> * the failover cleanup before re-assigning regions of dead servers. So that<a name="line.1353"></a>
+<span class="sourceLineNo">1354</span> * when re-assignment happens, AssignmentManager has proper region states.<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span> */<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span> public boolean isFailoverCleanupDone() {<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span> return failoverCleanupDone.isReady();<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span> }<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span><a name="line.1359"></a>
+<span class="sourceLineNo">1360</span> /**<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span> * Used by ServerCrashProcedure tests verify the ability to suspend the<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span> * execution of the ServerCrashProcedure.<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span> */<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span> @VisibleForTesting<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span> public void setFailoverCleanupDone(final boolean b) {<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span> master.getMasterProcedureExecutor().getEnvironment()<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span> .setEventReady(failoverCleanupDone, b);<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span> }<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span><a name="line.1369"></a>
+<span class="sourceLineNo">1370</span> public ProcedureEvent getFailoverCleanupEvent() {<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span> return failoverCleanupDone;<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span> }<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span><a name="line.1373"></a>
+<span class="sourceLineNo">1374</span> /**<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span> * Used to check if the failover cleanup is done.<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span> * if not we throw PleaseHoldException since we are rebuilding the RegionStates<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span> * @param hri region to check if it is already rebuild<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span> * @throws PleaseHoldException if the failover cleanup is not completed<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span> */<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span> private void checkFailoverCleanupCompleted(final RegionInfo hri) throws PleaseHoldException {<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span> if (!isRunning()) {<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span> throw new PleaseHoldException("AssignmentManager not running");<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span> }<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span><a name="line.1384"></a>
+<span class="sourceLineNo">1385</span> // TODO: can we avoid throwing an exception if hri is already loaded?<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span> // at the moment we bypass only meta<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span> boolean meta = isMetaRegion(hri);<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span> boolean cleanup = isFailoverCleanupDone();<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span> if (!isMetaRegion(hri) && !isFailoverCleanupDone()) {<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span> String msg = "Master not fully online; hbase:meta=" + meta + ", failoverCleanup=" + cleanup;<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span> throw new PleaseHoldException(msg);<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span> }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span> }<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span><a name="line.1394"></a>
+<span class="sourceLineNo">1395</span> // ============================================================================================<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span> // TODO: Metrics<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span> // ============================================================================================<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span> public int getNumRegionsOpened() {<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span> // TODO: Used by TestRegionPlacement.java and assume monotonically increasing value<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span> return 0;<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span> }<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span><a name="line.1402"></a>
+<span class="sourceLineNo">1403</span> public void submitServerCrash(final ServerName serverName, final boolean shouldSplitWal) {<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span> boolean carryingMeta = isCarryingMeta(serverName);<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span> ProcedureExecutor<MasterProcedureEnv> procExec = this.master.getMasterProcedureExecutor();<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span> procExec.submitProcedure(new ServerCrashProcedure(procExec.getEnvironment(), serverName,<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span> shouldSplitWal, carryingMeta));<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span> LOG.debug("Added=" + serverName +<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span> " to dead servers, submitted shutdown handler to be executed meta=" + carryingMeta);<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span> }<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span><a name="line.1411"></a>
+<span class="sourceLineNo">1412</span> public void offlineRegion(final RegionInfo regionInfo) {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span> // TODO used by MasterRpcServices ServerCrashProcedure<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span> final RegionStateNode node = regionStates.getRegionStateNode(regionInfo);<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span> if (node != null) node.offline();<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span> }<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span><a name="line.1417"></a>
+<span class="sourceLineNo">1418</span> public void onlineRegion(final RegionInfo regionInfo, final ServerName serverName) {<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span> // TODO used by TestSplitTransactionOnCluster.java<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span> }<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span><a name="line.1421"></a>
+<span class="sourceLineNo">1422</span> public Map<ServerName, List<RegionInfo>> getSnapShotOfAssignment(<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span> final Collection<RegionInfo> regions) {<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span> return regionStates.getSnapShotOfAssignment(regions);<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span> }<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span><a name="line.1426"></a>
+<span class="sourceLineNo">1427</span> // ============================================================================================<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span> // TODO: UTILS/HELPERS?<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span> // ============================================================================================<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span> /**<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span> * Used by the client (via master) to identify if all regions have the schema updates<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span> *<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span> * @param tableName<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span> * @return Pair indicating the status of the alter command (pending/total)<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span> * @throws IOException<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span> */<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span> public Pair<Integer, Integer> getReopenStatus(TableName tableName) {<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span> if (isTableDisabled(tableName)) return new Pair<Integer, Integer>(0, 0);<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span><a name="line.1439"></a>
+<span class="sourceLineNo">1440</span> final List<RegionState> states = regionStates.getTableRegionStates(tableName);<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span> int ritCount = 0;<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span> for (RegionState regionState: states) {<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span> if (!regionState.isOpened()) ritCount++;<a name="line
<TRUNCATED>
[06/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html
index 594ef24..17d5c40 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html
@@ -170,241 +170,242 @@
<span class="sourceLineNo">162</span> }<a name="line.162"></a>
<span class="sourceLineNo">163</span><a name="line.163"></a>
<span class="sourceLineNo">164</span> /**<a name="line.164"></a>
-<span class="sourceLineNo">165</span> * Add a remote rpc. Be sure to check result for successful add.<a name="line.165"></a>
+<span class="sourceLineNo">165</span> * Add a remote rpc.<a name="line.165"></a>
<span class="sourceLineNo">166</span> * @param key the node identifier<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * @return True if we successfully added the operation.<a name="line.167"></a>
-<span class="sourceLineNo">168</span> */<a name="line.168"></a>
-<span class="sourceLineNo">169</span> public boolean addOperationToNode(final TRemote key, RemoteProcedure rp) {<a name="line.169"></a>
+<span class="sourceLineNo">167</span> */<a name="line.167"></a>
+<span class="sourceLineNo">168</span> public void addOperationToNode(final TRemote key, RemoteProcedure rp)<a name="line.168"></a>
+<span class="sourceLineNo">169</span> throws NullTargetServerDispatchException, NoServerDispatchException, NoNodeDispatchException {<a name="line.169"></a>
<span class="sourceLineNo">170</span> if (key == null) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span> // Key is remote server name. Be careful. It could have been nulled by a concurrent<a name="line.171"></a>
-<span class="sourceLineNo">172</span> // ServerCrashProcedure shutting down outstanding RPC requests. See remoteCallFailed.<a name="line.172"></a>
-<span class="sourceLineNo">173</span> return false;<a name="line.173"></a>
-<span class="sourceLineNo">174</span> }<a name="line.174"></a>
-<span class="sourceLineNo">175</span> assert key != null : "found null key for node";<a name="line.175"></a>
-<span class="sourceLineNo">176</span> BufferNode node = nodeMap.get(key);<a name="line.176"></a>
-<span class="sourceLineNo">177</span> if (node == null) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span> return false;<a name="line.178"></a>
-<span class="sourceLineNo">179</span> }<a name="line.179"></a>
-<span class="sourceLineNo">180</span> node.add(rp);<a name="line.180"></a>
-<span class="sourceLineNo">181</span> // Check our node still in the map; could have been removed by #removeNode.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> return nodeMap.containsValue(node);<a name="line.182"></a>
-<span class="sourceLineNo">183</span> }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span> /**<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * Remove a remote node<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * @param key the node identifier<a name="line.187"></a>
-<span class="sourceLineNo">188</span> */<a name="line.188"></a>
-<span class="sourceLineNo">189</span> public boolean removeNode(final TRemote key) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span> final BufferNode node = nodeMap.remove(key);<a name="line.190"></a>
-<span class="sourceLineNo">191</span> if (node == null) return false;<a name="line.191"></a>
-<span class="sourceLineNo">192</span> node.abortOperationsInQueue();<a name="line.192"></a>
-<span class="sourceLineNo">193</span> return true;<a name="line.193"></a>
-<span class="sourceLineNo">194</span> }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span> // ============================================================================================<a name="line.196"></a>
-<span class="sourceLineNo">197</span> // Task Helpers<a name="line.197"></a>
-<span class="sourceLineNo">198</span> // ============================================================================================<a name="line.198"></a>
-<span class="sourceLineNo">199</span> protected Future<Void> submitTask(Callable<Void> task) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span> return threadPool.submit(task);<a name="line.200"></a>
-<span class="sourceLineNo">201</span> }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span> protected Future<Void> submitTask(Callable<Void> task, long delay, TimeUnit unit) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span> final FutureTask<Void> futureTask = new FutureTask(task);<a name="line.204"></a>
-<span class="sourceLineNo">205</span> timeoutExecutor.add(new DelayedTask(futureTask, delay, unit));<a name="line.205"></a>
-<span class="sourceLineNo">206</span> return futureTask;<a name="line.206"></a>
-<span class="sourceLineNo">207</span> }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span> protected abstract void remoteDispatch(TRemote key, Set<RemoteProcedure> operations);<a name="line.209"></a>
-<span class="sourceLineNo">210</span> protected abstract void abortPendingOperations(TRemote key, Set<RemoteProcedure> operations);<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span> /**<a name="line.212"></a>
-<span class="sourceLineNo">213</span> * Data structure with reference to remote operation.<a name="line.213"></a>
-<span class="sourceLineNo">214</span> */<a name="line.214"></a>
-<span class="sourceLineNo">215</span> public static abstract class RemoteOperation {<a name="line.215"></a>
-<span class="sourceLineNo">216</span> private final RemoteProcedure remoteProcedure;<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span> protected RemoteOperation(final RemoteProcedure remoteProcedure) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span> this.remoteProcedure = remoteProcedure;<a name="line.219"></a>
-<span class="sourceLineNo">220</span> }<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span> public RemoteProcedure getRemoteProcedure() {<a name="line.222"></a>
-<span class="sourceLineNo">223</span> return remoteProcedure;<a name="line.223"></a>
-<span class="sourceLineNo">224</span> }<a name="line.224"></a>
-<span class="sourceLineNo">225</span> }<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span> /**<a name="line.227"></a>
-<span class="sourceLineNo">228</span> * Remote procedure reference.<a name="line.228"></a>
-<span class="sourceLineNo">229</span> */<a name="line.229"></a>
-<span class="sourceLineNo">230</span> public interface RemoteProcedure<TEnv, TRemote> {<a name="line.230"></a>
-<span class="sourceLineNo">231</span> /**<a name="line.231"></a>
-<span class="sourceLineNo">232</span> * For building the remote operation.<a name="line.232"></a>
-<span class="sourceLineNo">233</span> */<a name="line.233"></a>
-<span class="sourceLineNo">234</span> RemoteOperation remoteCallBuild(TEnv env, TRemote remote);<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span> /**<a name="line.236"></a>
-<span class="sourceLineNo">237</span> * Called when the executeProcedure call is failed.<a name="line.237"></a>
-<span class="sourceLineNo">238</span> */<a name="line.238"></a>
-<span class="sourceLineNo">239</span> void remoteCallFailed(TEnv env, TRemote remote, IOException exception);<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span> /**<a name="line.241"></a>
-<span class="sourceLineNo">242</span> * Called when RS tells the remote procedure is succeeded through the<a name="line.242"></a>
-<span class="sourceLineNo">243</span> * {@code reportProcedureDone} method.<a name="line.243"></a>
-<span class="sourceLineNo">244</span> */<a name="line.244"></a>
-<span class="sourceLineNo">245</span> void remoteOperationCompleted(TEnv env);<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span> /**<a name="line.247"></a>
-<span class="sourceLineNo">248</span> * Called when RS tells the remote procedure is failed through the {@code reportProcedureDone}<a name="line.248"></a>
-<span class="sourceLineNo">249</span> * method.<a name="line.249"></a>
-<span class="sourceLineNo">250</span> */<a name="line.250"></a>
-<span class="sourceLineNo">251</span> void remoteOperationFailed(TEnv env, RemoteProcedureException error);<a name="line.251"></a>
-<span class="sourceLineNo">252</span> }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span> /**<a name="line.254"></a>
-<span class="sourceLineNo">255</span> * Account of what procedures are running on remote node.<a name="line.255"></a>
-<span class="sourceLineNo">256</span> * @param <TEnv><a name="line.256"></a>
-<span class="sourceLineNo">257</span> * @param <TRemote><a name="line.257"></a>
-<span class="sourceLineNo">258</span> */<a name="line.258"></a>
-<span class="sourceLineNo">259</span> public interface RemoteNode<TEnv, TRemote> {<a name="line.259"></a>
-<span class="sourceLineNo">260</span> TRemote getKey();<a name="line.260"></a>
-<span class="sourceLineNo">261</span> void add(RemoteProcedure<TEnv, TRemote> operation);<a name="line.261"></a>
-<span class="sourceLineNo">262</span> void dispatch();<a name="line.262"></a>
-<span class="sourceLineNo">263</span> }<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span> protected ArrayListMultimap<Class<?>, RemoteOperation> buildAndGroupRequestByType(final TEnv env,<a name="line.265"></a>
-<span class="sourceLineNo">266</span> final TRemote remote, final Set<RemoteProcedure> remoteProcedures) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span> final ArrayListMultimap<Class<?>, RemoteOperation> requestByType = ArrayListMultimap.create();<a name="line.267"></a>
-<span class="sourceLineNo">268</span> for (RemoteProcedure proc: remoteProcedures) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span> RemoteOperation operation = proc.remoteCallBuild(env, remote);<a name="line.269"></a>
-<span class="sourceLineNo">270</span> requestByType.put(operation.getClass(), operation);<a name="line.270"></a>
-<span class="sourceLineNo">271</span> }<a name="line.271"></a>
-<span class="sourceLineNo">272</span> return requestByType;<a name="line.272"></a>
-<span class="sourceLineNo">273</span> }<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span> protected <T extends RemoteOperation> List<T> fetchType(<a name="line.275"></a>
-<span class="sourceLineNo">276</span> final ArrayListMultimap<Class<?>, RemoteOperation> requestByType, final Class<T> type) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span> return (List<T>)requestByType.removeAll(type);<a name="line.277"></a>
-<span class="sourceLineNo">278</span> }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span> // ============================================================================================<a name="line.280"></a>
-<span class="sourceLineNo">281</span> // Timeout Helpers<a name="line.281"></a>
-<span class="sourceLineNo">282</span> // ============================================================================================<a name="line.282"></a>
-<span class="sourceLineNo">283</span> private final class TimeoutExecutorThread extends Thread {<a name="line.283"></a>
-<span class="sourceLineNo">284</span> private final DelayQueue<DelayedWithTimeout> queue = new DelayQueue<DelayedWithTimeout>();<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span> public TimeoutExecutorThread() {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> super("ProcedureDispatcherTimeoutThread");<a name="line.287"></a>
-<span class="sourceLineNo">288</span> }<a name="line.288"></a>
-<span class="sourceLineNo">289</span><a name="line.289"></a>
-<span class="sourceLineNo">290</span> @Override<a name="line.290"></a>
-<span class="sourceLineNo">291</span> public void run() {<a name="line.291"></a>
-<span class="sourceLineNo">292</span> while (running.get()) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span> final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.293"></a>
-<span class="sourceLineNo">294</span> if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span> // the executor may be shutting down, and the task is just the shutdown request<a name="line.295"></a>
-<span class="sourceLineNo">296</span> continue;<a name="line.296"></a>
-<span class="sourceLineNo">297</span> }<a name="line.297"></a>
-<span class="sourceLineNo">298</span> if (task instanceof DelayedTask) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span> threadPool.execute(((DelayedTask)task).getObject());<a name="line.299"></a>
-<span class="sourceLineNo">300</span> } else {<a name="line.300"></a>
-<span class="sourceLineNo">301</span> ((BufferNode)task).dispatch();<a name="line.301"></a>
-<span class="sourceLineNo">302</span> }<a name="line.302"></a>
-<span class="sourceLineNo">303</span> }<a name="line.303"></a>
-<span class="sourceLineNo">304</span> }<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span> public void add(final DelayedWithTimeout delayed) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span> queue.add(delayed);<a name="line.307"></a>
-<span class="sourceLineNo">308</span> }<a name="line.308"></a>
-<span class="sourceLineNo">309</span><a name="line.309"></a>
-<span class="sourceLineNo">310</span> public void remove(final DelayedWithTimeout delayed) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span> queue.remove(delayed);<a name="line.311"></a>
-<span class="sourceLineNo">312</span> }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span> public void sendStopSignal() {<a name="line.314"></a>
-<span class="sourceLineNo">315</span> queue.add(DelayedUtil.DELAYED_POISON);<a name="line.315"></a>
-<span class="sourceLineNo">316</span> }<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span> public void awaitTermination() {<a name="line.318"></a>
-<span class="sourceLineNo">319</span> try {<a name="line.319"></a>
-<span class="sourceLineNo">320</span> final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.320"></a>
-<span class="sourceLineNo">321</span> for (int i = 0; isAlive(); ++i) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span> sendStopSignal();<a name="line.322"></a>
-<span class="sourceLineNo">323</span> join(250);<a name="line.323"></a>
-<span class="sourceLineNo">324</span> if (i > 0 && (i % 8) == 0) {<a name="line.324"></a>
-<span class="sourceLineNo">325</span> LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.325"></a>
-<span class="sourceLineNo">326</span> StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.326"></a>
-<span class="sourceLineNo">327</span> }<a name="line.327"></a>
-<span class="sourceLineNo">328</span> }<a name="line.328"></a>
-<span class="sourceLineNo">329</span> } catch (InterruptedException e) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span> LOG.warn(getName() + " join wait got interrupted", e);<a name="line.330"></a>
-<span class="sourceLineNo">331</span> }<a name="line.331"></a>
-<span class="sourceLineNo">332</span> }<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> // ============================================================================================<a name="line.335"></a>
-<span class="sourceLineNo">336</span> // Internals Helpers<a name="line.336"></a>
-<span class="sourceLineNo">337</span> // ============================================================================================<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span> /**<a name="line.339"></a>
-<span class="sourceLineNo">340</span> * Node that contains a set of RemoteProcedures<a name="line.340"></a>
-<span class="sourceLineNo">341</span> */<a name="line.341"></a>
-<span class="sourceLineNo">342</span> protected final class BufferNode extends DelayedContainerWithTimestamp<TRemote><a name="line.342"></a>
-<span class="sourceLineNo">343</span> implements RemoteNode<TEnv, TRemote> {<a name="line.343"></a>
-<span class="sourceLineNo">344</span> private Set<RemoteProcedure> operations;<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span> protected BufferNode(final TRemote key) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> super(key, 0);<a name="line.347"></a>
-<span class="sourceLineNo">348</span> }<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span> @Override<a name="line.350"></a>
-<span class="sourceLineNo">351</span> public TRemote getKey() {<a name="line.351"></a>
-<span class="sourceLineNo">352</span> return getObject();<a name="line.352"></a>
-<span class="sourceLineNo">353</span> }<a name="line.353"></a>
-<span class="sourceLineNo">354</span><a name="line.354"></a>
-<span class="sourceLineNo">355</span> @Override<a name="line.355"></a>
-<span class="sourceLineNo">356</span> public synchronized void add(final RemoteProcedure operation) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span> if (this.operations == null) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> this.operations = new HashSet<>();<a name="line.358"></a>
-<span class="sourceLineNo">359</span> setTimeout(EnvironmentEdgeManager.currentTime() + operationDelay);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> timeoutExecutor.add(this);<a name="line.360"></a>
-<span class="sourceLineNo">361</span> }<a name="line.361"></a>
-<span class="sourceLineNo">362</span> this.operations.add(operation);<a name="line.362"></a>
-<span class="sourceLineNo">363</span> if (this.operations.size() > queueMaxSize) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span> timeoutExecutor.remove(this);<a name="line.364"></a>
-<span class="sourceLineNo">365</span> dispatch();<a name="line.365"></a>
-<span class="sourceLineNo">366</span> }<a name="line.366"></a>
-<span class="sourceLineNo">367</span> }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span> @Override<a name="line.369"></a>
-<span class="sourceLineNo">370</span> public synchronized void dispatch() {<a name="line.370"></a>
-<span class="sourceLineNo">371</span> if (operations != null) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span> remoteDispatch(getKey(), operations);<a name="line.372"></a>
-<span class="sourceLineNo">373</span> this.operations = null;<a name="line.373"></a>
-<span class="sourceLineNo">374</span> }<a name="line.374"></a>
-<span class="sourceLineNo">375</span> }<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span> public synchronized void abortOperationsInQueue() {<a name="line.377"></a>
-<span class="sourceLineNo">378</span> if (operations != null) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span> abortPendingOperations(getKey(), operations);<a name="line.379"></a>
-<span class="sourceLineNo">380</span> this.operations = null;<a name="line.380"></a>
-<span class="sourceLineNo">381</span> }<a name="line.381"></a>
-<span class="sourceLineNo">382</span> }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span> @Override<a name="line.384"></a>
-<span class="sourceLineNo">385</span> public String toString() {<a name="line.385"></a>
-<span class="sourceLineNo">386</span> return super.toString() + ", operations=" + this.operations;<a name="line.386"></a>
-<span class="sourceLineNo">387</span> }<a name="line.387"></a>
-<span class="sourceLineNo">388</span> }<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span> /**<a name="line.390"></a>
-<span class="sourceLineNo">391</span> * Delayed object that holds a FutureTask.<a name="line.391"></a>
-<span class="sourceLineNo">392</span> * used to submit something later to the thread-pool.<a name="line.392"></a>
-<span class="sourceLineNo">393</span> */<a name="line.393"></a>
-<span class="sourceLineNo">394</span> private static final class DelayedTask extends DelayedContainerWithTimestamp<FutureTask<Void>> {<a name="line.394"></a>
-<span class="sourceLineNo">395</span> public DelayedTask(final FutureTask<Void> task, final long delay, final TimeUnit unit) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span> super(task, EnvironmentEdgeManager.currentTime() + unit.toMillis(delay));<a name="line.396"></a>
-<span class="sourceLineNo">397</span> }<a name="line.397"></a>
-<span class="sourceLineNo">398</span> }<a name="line.398"></a>
-<span class="sourceLineNo">399</span>}<a name="line.399"></a>
+<span class="sourceLineNo">171</span> throw new NullTargetServerDispatchException(rp.toString());<a name="line.171"></a>
+<span class="sourceLineNo">172</span> }<a name="line.172"></a>
+<span class="sourceLineNo">173</span> BufferNode node = nodeMap.get(key);<a name="line.173"></a>
+<span class="sourceLineNo">174</span> if (node == null) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span> // If null here, it means node has been removed because it crashed. This happens when server<a name="line.175"></a>
+<span class="sourceLineNo">176</span> // is expired in ServerManager. ServerCrashProcedure may or may not have run.<a name="line.176"></a>
+<span class="sourceLineNo">177</span> throw new NoServerDispatchException(key.toString() + "; " + rp.toString());<a name="line.177"></a>
+<span class="sourceLineNo">178</span> }<a name="line.178"></a>
+<span class="sourceLineNo">179</span> node.add(rp);<a name="line.179"></a>
+<span class="sourceLineNo">180</span> // Check our node still in the map; could have been removed by #removeNode.<a name="line.180"></a>
+<span class="sourceLineNo">181</span> if (!nodeMap.containsValue(node)) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span> throw new NoNodeDispatchException(key.toString() + "; " + rp.toString());<a name="line.182"></a>
+<span class="sourceLineNo">183</span> }<a name="line.183"></a>
+<span class="sourceLineNo">184</span> }<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span> /**<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * Remove a remote node<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * @param key the node identifier<a name="line.188"></a>
+<span class="sourceLineNo">189</span> */<a name="line.189"></a>
+<span class="sourceLineNo">190</span> public boolean removeNode(final TRemote key) {<a name="line.190"></a>
+<span class="sourceLineNo">191</span> final BufferNode node = nodeMap.remove(key);<a name="line.191"></a>
+<span class="sourceLineNo">192</span> if (node == null) return false;<a name="line.192"></a>
+<span class="sourceLineNo">193</span> node.abortOperationsInQueue();<a name="line.193"></a>
+<span class="sourceLineNo">194</span> return true;<a name="line.194"></a>
+<span class="sourceLineNo">195</span> }<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span> // ============================================================================================<a name="line.197"></a>
+<span class="sourceLineNo">198</span> // Task Helpers<a name="line.198"></a>
+<span class="sourceLineNo">199</span> // ============================================================================================<a name="line.199"></a>
+<span class="sourceLineNo">200</span> protected Future<Void> submitTask(Callable<Void> task) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span> return threadPool.submit(task);<a name="line.201"></a>
+<span class="sourceLineNo">202</span> }<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span> protected Future<Void> submitTask(Callable<Void> task, long delay, TimeUnit unit) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span> final FutureTask<Void> futureTask = new FutureTask(task);<a name="line.205"></a>
+<span class="sourceLineNo">206</span> timeoutExecutor.add(new DelayedTask(futureTask, delay, unit));<a name="line.206"></a>
+<span class="sourceLineNo">207</span> return futureTask;<a name="line.207"></a>
+<span class="sourceLineNo">208</span> }<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span> protected abstract void remoteDispatch(TRemote key, Set<RemoteProcedure> operations);<a name="line.210"></a>
+<span class="sourceLineNo">211</span> protected abstract void abortPendingOperations(TRemote key, Set<RemoteProcedure> operations);<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span> /**<a name="line.213"></a>
+<span class="sourceLineNo">214</span> * Data structure with reference to remote operation.<a name="line.214"></a>
+<span class="sourceLineNo">215</span> */<a name="line.215"></a>
+<span class="sourceLineNo">216</span> public static abstract class RemoteOperation {<a name="line.216"></a>
+<span class="sourceLineNo">217</span> private final RemoteProcedure remoteProcedure;<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span> protected RemoteOperation(final RemoteProcedure remoteProcedure) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span> this.remoteProcedure = remoteProcedure;<a name="line.220"></a>
+<span class="sourceLineNo">221</span> }<a name="line.221"></a>
+<span class="sourceLineNo">222</span><a name="line.222"></a>
+<span class="sourceLineNo">223</span> public RemoteProcedure getRemoteProcedure() {<a name="line.223"></a>
+<span class="sourceLineNo">224</span> return remoteProcedure;<a name="line.224"></a>
+<span class="sourceLineNo">225</span> }<a name="line.225"></a>
+<span class="sourceLineNo">226</span> }<a name="line.226"></a>
+<span class="sourceLineNo">227</span><a name="line.227"></a>
+<span class="sourceLineNo">228</span> /**<a name="line.228"></a>
+<span class="sourceLineNo">229</span> * Remote procedure reference.<a name="line.229"></a>
+<span class="sourceLineNo">230</span> */<a name="line.230"></a>
+<span class="sourceLineNo">231</span> public interface RemoteProcedure<TEnv, TRemote> {<a name="line.231"></a>
+<span class="sourceLineNo">232</span> /**<a name="line.232"></a>
+<span class="sourceLineNo">233</span> * For building the remote operation.<a name="line.233"></a>
+<span class="sourceLineNo">234</span> */<a name="line.234"></a>
+<span class="sourceLineNo">235</span> RemoteOperation remoteCallBuild(TEnv env, TRemote remote);<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span> /**<a name="line.237"></a>
+<span class="sourceLineNo">238</span> * Called when the executeProcedure call is failed.<a name="line.238"></a>
+<span class="sourceLineNo">239</span> */<a name="line.239"></a>
+<span class="sourceLineNo">240</span> void remoteCallFailed(TEnv env, TRemote remote, IOException exception);<a name="line.240"></a>
+<span class="sourceLineNo">241</span><a name="line.241"></a>
+<span class="sourceLineNo">242</span> /**<a name="line.242"></a>
+<span class="sourceLineNo">243</span> * Called when RS tells the remote procedure is succeeded through the<a name="line.243"></a>
+<span class="sourceLineNo">244</span> * {@code reportProcedureDone} method.<a name="line.244"></a>
+<span class="sourceLineNo">245</span> */<a name="line.245"></a>
+<span class="sourceLineNo">246</span> void remoteOperationCompleted(TEnv env);<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span> /**<a name="line.248"></a>
+<span class="sourceLineNo">249</span> * Called when RS tells the remote procedure is failed through the {@code reportProcedureDone}<a name="line.249"></a>
+<span class="sourceLineNo">250</span> * method.<a name="line.250"></a>
+<span class="sourceLineNo">251</span> */<a name="line.251"></a>
+<span class="sourceLineNo">252</span> void remoteOperationFailed(TEnv env, RemoteProcedureException error);<a name="line.252"></a>
+<span class="sourceLineNo">253</span> }<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span> /**<a name="line.255"></a>
+<span class="sourceLineNo">256</span> * Account of what procedures are running on remote node.<a name="line.256"></a>
+<span class="sourceLineNo">257</span> * @param <TEnv><a name="line.257"></a>
+<span class="sourceLineNo">258</span> * @param <TRemote><a name="line.258"></a>
+<span class="sourceLineNo">259</span> */<a name="line.259"></a>
+<span class="sourceLineNo">260</span> public interface RemoteNode<TEnv, TRemote> {<a name="line.260"></a>
+<span class="sourceLineNo">261</span> TRemote getKey();<a name="line.261"></a>
+<span class="sourceLineNo">262</span> void add(RemoteProcedure<TEnv, TRemote> operation);<a name="line.262"></a>
+<span class="sourceLineNo">263</span> void dispatch();<a name="line.263"></a>
+<span class="sourceLineNo">264</span> }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span> protected ArrayListMultimap<Class<?>, RemoteOperation> buildAndGroupRequestByType(final TEnv env,<a name="line.266"></a>
+<span class="sourceLineNo">267</span> final TRemote remote, final Set<RemoteProcedure> remoteProcedures) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span> final ArrayListMultimap<Class<?>, RemoteOperation> requestByType = ArrayListMultimap.create();<a name="line.268"></a>
+<span class="sourceLineNo">269</span> for (RemoteProcedure proc: remoteProcedures) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span> RemoteOperation operation = proc.remoteCallBuild(env, remote);<a name="line.270"></a>
+<span class="sourceLineNo">271</span> requestByType.put(operation.getClass(), operation);<a name="line.271"></a>
+<span class="sourceLineNo">272</span> }<a name="line.272"></a>
+<span class="sourceLineNo">273</span> return requestByType;<a name="line.273"></a>
+<span class="sourceLineNo">274</span> }<a name="line.274"></a>
+<span class="sourceLineNo">275</span><a name="line.275"></a>
+<span class="sourceLineNo">276</span> protected <T extends RemoteOperation> List<T> fetchType(<a name="line.276"></a>
+<span class="sourceLineNo">277</span> final ArrayListMultimap<Class<?>, RemoteOperation> requestByType, final Class<T> type) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span> return (List<T>)requestByType.removeAll(type);<a name="line.278"></a>
+<span class="sourceLineNo">279</span> }<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span> // ============================================================================================<a name="line.281"></a>
+<span class="sourceLineNo">282</span> // Timeout Helpers<a name="line.282"></a>
+<span class="sourceLineNo">283</span> // ============================================================================================<a name="line.283"></a>
+<span class="sourceLineNo">284</span> private final class TimeoutExecutorThread extends Thread {<a name="line.284"></a>
+<span class="sourceLineNo">285</span> private final DelayQueue<DelayedWithTimeout> queue = new DelayQueue<DelayedWithTimeout>();<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span> public TimeoutExecutorThread() {<a name="line.287"></a>
+<span class="sourceLineNo">288</span> super("ProcedureDispatcherTimeoutThread");<a name="line.288"></a>
+<span class="sourceLineNo">289</span> }<a name="line.289"></a>
+<span class="sourceLineNo">290</span><a name="line.290"></a>
+<span class="sourceLineNo">291</span> @Override<a name="line.291"></a>
+<span class="sourceLineNo">292</span> public void run() {<a name="line.292"></a>
+<span class="sourceLineNo">293</span> while (running.get()) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span> final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.294"></a>
+<span class="sourceLineNo">295</span> if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.295"></a>
+<span class="sourceLineNo">296</span> // the executor may be shutting down, and the task is just the shutdown request<a name="line.296"></a>
+<span class="sourceLineNo">297</span> continue;<a name="line.297"></a>
+<span class="sourceLineNo">298</span> }<a name="line.298"></a>
+<span class="sourceLineNo">299</span> if (task instanceof DelayedTask) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span> threadPool.execute(((DelayedTask)task).getObject());<a name="line.300"></a>
+<span class="sourceLineNo">301</span> } else {<a name="line.301"></a>
+<span class="sourceLineNo">302</span> ((BufferNode)task).dispatch();<a name="line.302"></a>
+<span class="sourceLineNo">303</span> }<a name="line.303"></a>
+<span class="sourceLineNo">304</span> }<a name="line.304"></a>
+<span class="sourceLineNo">305</span> }<a name="line.305"></a>
+<span class="sourceLineNo">306</span><a name="line.306"></a>
+<span class="sourceLineNo">307</span> public void add(final DelayedWithTimeout delayed) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span> queue.add(delayed);<a name="line.308"></a>
+<span class="sourceLineNo">309</span> }<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span> public void remove(final DelayedWithTimeout delayed) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span> queue.remove(delayed);<a name="line.312"></a>
+<span class="sourceLineNo">313</span> }<a name="line.313"></a>
+<span class="sourceLineNo">314</span><a name="line.314"></a>
+<span class="sourceLineNo">315</span> public void sendStopSignal() {<a name="line.315"></a>
+<span class="sourceLineNo">316</span> queue.add(DelayedUtil.DELAYED_POISON);<a name="line.316"></a>
+<span class="sourceLineNo">317</span> }<a name="line.317"></a>
+<span class="sourceLineNo">318</span><a name="line.318"></a>
+<span class="sourceLineNo">319</span> public void awaitTermination() {<a name="line.319"></a>
+<span class="sourceLineNo">320</span> try {<a name="line.320"></a>
+<span class="sourceLineNo">321</span> final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.321"></a>
+<span class="sourceLineNo">322</span> for (int i = 0; isAlive(); ++i) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span> sendStopSignal();<a name="line.323"></a>
+<span class="sourceLineNo">324</span> join(250);<a name="line.324"></a>
+<span class="sourceLineNo">325</span> if (i > 0 && (i % 8) == 0) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span> LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.326"></a>
+<span class="sourceLineNo">327</span> StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.327"></a>
+<span class="sourceLineNo">328</span> }<a name="line.328"></a>
+<span class="sourceLineNo">329</span> }<a name="line.329"></a>
+<span class="sourceLineNo">330</span> } catch (InterruptedException e) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span> LOG.warn(getName() + " join wait got interrupted", e);<a name="line.331"></a>
+<span class="sourceLineNo">332</span> }<a name="line.332"></a>
+<span class="sourceLineNo">333</span> }<a name="line.333"></a>
+<span class="sourceLineNo">334</span> }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span> // ============================================================================================<a name="line.336"></a>
+<span class="sourceLineNo">337</span> // Internals Helpers<a name="line.337"></a>
+<span class="sourceLineNo">338</span> // ============================================================================================<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span> /**<a name="line.340"></a>
+<span class="sourceLineNo">341</span> * Node that contains a set of RemoteProcedures<a name="line.341"></a>
+<span class="sourceLineNo">342</span> */<a name="line.342"></a>
+<span class="sourceLineNo">343</span> protected final class BufferNode extends DelayedContainerWithTimestamp<TRemote><a name="line.343"></a>
+<span class="sourceLineNo">344</span> implements RemoteNode<TEnv, TRemote> {<a name="line.344"></a>
+<span class="sourceLineNo">345</span> private Set<RemoteProcedure> operations;<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span> protected BufferNode(final TRemote key) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span> super(key, 0);<a name="line.348"></a>
+<span class="sourceLineNo">349</span> }<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span> @Override<a name="line.351"></a>
+<span class="sourceLineNo">352</span> public TRemote getKey() {<a name="line.352"></a>
+<span class="sourceLineNo">353</span> return getObject();<a name="line.353"></a>
+<span class="sourceLineNo">354</span> }<a name="line.354"></a>
+<span class="sourceLineNo">355</span><a name="line.355"></a>
+<span class="sourceLineNo">356</span> @Override<a name="line.356"></a>
+<span class="sourceLineNo">357</span> public synchronized void add(final RemoteProcedure operation) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span> if (this.operations == null) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span> this.operations = new HashSet<>();<a name="line.359"></a>
+<span class="sourceLineNo">360</span> setTimeout(EnvironmentEdgeManager.currentTime() + operationDelay);<a name="line.360"></a>
+<span class="sourceLineNo">361</span> timeoutExecutor.add(this);<a name="line.361"></a>
+<span class="sourceLineNo">362</span> }<a name="line.362"></a>
+<span class="sourceLineNo">363</span> this.operations.add(operation);<a name="line.363"></a>
+<span class="sourceLineNo">364</span> if (this.operations.size() > queueMaxSize) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span> timeoutExecutor.remove(this);<a name="line.365"></a>
+<span class="sourceLineNo">366</span> dispatch();<a name="line.366"></a>
+<span class="sourceLineNo">367</span> }<a name="line.367"></a>
+<span class="sourceLineNo">368</span> }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span> @Override<a name="line.370"></a>
+<span class="sourceLineNo">371</span> public synchronized void dispatch() {<a name="line.371"></a>
+<span class="sourceLineNo">372</span> if (operations != null) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> remoteDispatch(getKey(), operations);<a name="line.373"></a>
+<span class="sourceLineNo">374</span> this.operations = null;<a name="line.374"></a>
+<span class="sourceLineNo">375</span> }<a name="line.375"></a>
+<span class="sourceLineNo">376</span> }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span> public synchronized void abortOperationsInQueue() {<a name="line.378"></a>
+<span class="sourceLineNo">379</span> if (operations != null) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span> abortPendingOperations(getKey(), operations);<a name="line.380"></a>
+<span class="sourceLineNo">381</span> this.operations = null;<a name="line.381"></a>
+<span class="sourceLineNo">382</span> }<a name="line.382"></a>
+<span class="sourceLineNo">383</span> }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
+<span class="sourceLineNo">386</span> public String toString() {<a name="line.386"></a>
+<span class="sourceLineNo">387</span> return super.toString() + ", operations=" + this.operations;<a name="line.387"></a>
+<span class="sourceLineNo">388</span> }<a name="line.388"></a>
+<span class="sourceLineNo">389</span> }<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span> /**<a name="line.391"></a>
+<span class="sourceLineNo">392</span> * Delayed object that holds a FutureTask.<a name="line.392"></a>
+<span class="sourceLineNo">393</span> * used to submit something later to the thread-pool.<a name="line.393"></a>
+<span class="sourceLineNo">394</span> */<a name="line.394"></a>
+<span class="sourceLineNo">395</span> private static final class DelayedTask extends DelayedContainerWithTimestamp<FutureTask<Void>> {<a name="line.395"></a>
+<span class="sourceLineNo">396</span> public DelayedTask(final FutureTask<Void> task, final long delay, final TimeUnit unit) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span> super(task, EnvironmentEdgeManager.currentTime() + unit.toMillis(delay));<a name="line.397"></a>
+<span class="sourceLineNo">398</span> }<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>}<a name="line.400"></a>
[44/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/HMaster.html b/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
index 9e6fbef..b8d9f62 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
@@ -3799,13 +3799,16 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>isInMaintenanceMode</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2825">isInMaintenanceMode</a>()</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2825">isInMaintenanceMode</a>()
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Report whether this master is in maintenance mode.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#isInMaintenanceMode--">isInMaintenanceMode</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if master is in maintenanceMode</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - if the inquiry failed due to an IO problem</dd>
</dl>
</li>
</ul>
@@ -3815,7 +3818,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>setInitialized</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2830">setInitialized</a>(boolean isInitialized)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2833">setInitialized</a>(boolean isInitialized)</pre>
</li>
</ul>
<a name="getInitializedEvent--">
@@ -3824,7 +3827,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getInitializedEvent</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureEvent.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureEvent</a><?> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2835">getInitializedEvent</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureEvent.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureEvent</a><?> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2838">getInitializedEvent</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getInitializedEvent--">getInitializedEvent</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -3839,7 +3842,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>isServerCrashProcessingEnabled</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2845">isServerCrashProcessingEnabled</a>()</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2848">isServerCrashProcessingEnabled</a>()</pre>
<div class="block">ServerCrashProcessingEnabled is set false before completing assignMeta to prevent processing
of crashed servers.</div>
<dl>
@@ -3856,7 +3859,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>setServerCrashProcessingEnabled</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2850">setServerCrashProcessingEnabled</a>(boolean b)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2853">setServerCrashProcessingEnabled</a>(boolean b)</pre>
</li>
</ul>
<a name="getServerCrashProcessingEnabledEvent--">
@@ -3865,7 +3868,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getServerCrashProcessingEnabledEvent</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureEvent.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureEvent</a><?> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2854">getServerCrashProcessingEnabledEvent</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureEvent.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureEvent</a><?> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2857">getServerCrashProcessingEnabledEvent</a>()</pre>
</li>
</ul>
<a name="getAverageLoad--">
@@ -3874,7 +3877,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getAverageLoad</h4>
-<pre>public double <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2864">getAverageLoad</a>()</pre>
+<pre>public double <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2867">getAverageLoad</a>()</pre>
<div class="block">Compute the average load across all region servers.
Currently, this uses a very naive computation - just uses the number of
regions being served, ignoring stats about number of requests.</div>
@@ -3890,7 +3893,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getSplitPlanCount</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2879">getSplitPlanCount</a>()</pre>
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2882">getSplitPlanCount</a>()</pre>
</li>
</ul>
<a name="getMergePlanCount--">
@@ -3899,7 +3902,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getMergePlanCount</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2886">getMergePlanCount</a>()</pre>
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2889">getMergePlanCount</a>()</pre>
</li>
</ul>
<a name="registerService-com.google.protobuf.Service-">
@@ -3908,7 +3911,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>registerService</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2891">registerService</a>(com.google.protobuf.Service instance)</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2894">registerService</a>(com.google.protobuf.Service instance)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#registerService-com.google.protobuf.Service-">RegionServerServices</a></code></span></div>
<div class="block">Registers a new protocol buffer <code>Service</code> subclass as a coprocessor endpoint to be
available for handling</div>
@@ -3932,7 +3935,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>constructMaster</h4>
-<pre>public static <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2916">constructMaster</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><? extends <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a>> masterClass,
+<pre>public static <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2919">constructMaster</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><? extends <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a>> masterClass,
org.apache.hadoop.conf.Configuration conf)</pre>
<div class="block">Utility for constructing an instance of the passed HMaster class.</div>
<dl>
@@ -3949,7 +3952,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>main</h4>
-<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2935">main</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)</pre>
+<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2938">main</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)</pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../org/apache/hadoop/hbase/master/HMasterCommandLine.html" title="class in org.apache.hadoop.hbase.master"><code>HMasterCommandLine</code></a></dd>
@@ -3962,7 +3965,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getHFileCleaner</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">HFileCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2941">getHFileCleaner</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">HFileCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2944">getHFileCleaner</a>()</pre>
</li>
</ul>
<a name="getLogCleaner--">
@@ -3971,7 +3974,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getLogCleaner</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/master/cleaner/LogCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">LogCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2945">getLogCleaner</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/master/cleaner/LogCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">LogCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2948">getLogCleaner</a>()</pre>
</li>
</ul>
<a name="getSnapshotManager--">
@@ -3980,7 +3983,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getSnapshotManager</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2953">getSnapshotManager</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2956">getSnapshotManager</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getSnapshotManager--">getSnapshotManager</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -3995,7 +3998,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getMasterProcedureManagerHost</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/procedure/MasterProcedureManagerHost.html" title="class in org.apache.hadoop.hbase.procedure">MasterProcedureManagerHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2961">getMasterProcedureManagerHost</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/procedure/MasterProcedureManagerHost.html" title="class in org.apache.hadoop.hbase.procedure">MasterProcedureManagerHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2964">getMasterProcedureManagerHost</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getMasterProcedureManagerHost--">getMasterProcedureManagerHost</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -4010,7 +4013,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getClusterSchema</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/master/ClusterSchema.html" title="interface in org.apache.hadoop.hbase.master">ClusterSchema</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2966">getClusterSchema</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/master/ClusterSchema.html" title="interface in org.apache.hadoop.hbase.master">ClusterSchema</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2969">getClusterSchema</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getClusterSchema--">getClusterSchema</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -4025,7 +4028,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>createNamespace</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2978">createNamespace</a>(<a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a> namespaceDescriptor,
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2981">createNamespace</a>(<a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a> namespaceDescriptor,
long nonceGroup,
long nonce)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4049,7 +4052,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>modifyNamespace</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3014">modifyNamespace</a>(<a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a> newNsDescriptor,
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3017">modifyNamespace</a>(<a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a> newNsDescriptor,
long nonceGroup,
long nonce)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4072,7 +4075,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>deleteNamespace</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3052">deleteNamespace</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name,
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3055">deleteNamespace</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name,
long nonceGroup,
long nonce)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4095,7 +4098,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getNamespace</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3087">getNamespace</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)
+<pre><a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3090">getNamespace</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Get a Namespace</div>
<dl>
@@ -4114,7 +4117,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getNamespaces</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3099">getNamespaces</a>()
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3102">getNamespaces</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Get all Namespaces</div>
<dl>
@@ -4131,7 +4134,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>listTableNamesByNamespace</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3113">listTableNamesByNamespace</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3116">listTableNamesByNamespace</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#listTableNamesByNamespace-java.lang.String-">MasterServices</a></code></span></div>
<div class="block">Get list of table names by namespace</div>
@@ -4153,7 +4156,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>listTableDescriptorsByNamespace</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3119">listTableDescriptorsByNamespace</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3122">listTableDescriptorsByNamespace</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#listTableDescriptorsByNamespace-java.lang.String-">MasterServices</a></code></span></div>
<div class="block">Get list of table descriptors by namespace</div>
@@ -4175,7 +4178,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>abortProcedure</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3125">abortProcedure</a>(long procId,
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3128">abortProcedure</a>(long procId,
boolean mayInterruptIfRunning)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#abortProcedure-long-boolean-">MasterServices</a></code></span></div>
@@ -4199,7 +4202,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getProcedures</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><?>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3141">getProcedures</a>()
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><?>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3144">getProcedures</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getProcedures--">MasterServices</a></code></span></div>
<div class="block">Get procedures</div>
@@ -4219,7 +4222,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getLocks</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResource.html" title="class in org.apache.hadoop.hbase.procedure2">LockedResource</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3156">getLocks</a>()
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResource.html" title="class in org.apache.hadoop.hbase.procedure2">LockedResource</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3159">getLocks</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getLocks--">MasterServices</a></code></span></div>
<div class="block">Get locks</div>
@@ -4239,7 +4242,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>listTableDescriptors</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3180">listTableDescriptors</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> namespace,
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3183">listTableDescriptors</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> namespace,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> regex,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>> tableNameList,
boolean includeSysTables)
@@ -4264,7 +4267,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>listTableNames</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3201">listTableNames</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> namespace,
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3204">listTableNames</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> namespace,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> regex,
boolean includeSysTables)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4287,7 +4290,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getTableDescriptors</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3221">getTableDescriptors</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>> htds,
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3224">getTableDescriptors</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>> htds,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> namespace,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> regex,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>> tableNameList,
@@ -4308,7 +4311,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>filterTablesByRegex</h4>
-<pre>private static void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3262">filterTablesByRegex</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>> descriptors,
+<pre>private static void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3265">filterTablesByRegex</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>> descriptors,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a> pattern)</pre>
<div class="block">Removes the table descriptors that don't match the pattern.</div>
<dl>
@@ -4324,7 +4327,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getLastMajorCompactionTimestamp</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3280">getLastMajorCompactionTimestamp</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> table)
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3283">getLastMajorCompactionTimestamp</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> table)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -4345,7 +4348,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getLastMajorCompactionTimestampForRegion</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3286">getLastMajorCompactionTimestampForRegion</a>(byte[] regionName)
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3289">getLastMajorCompactionTimestampForRegion</a>(byte[] regionName)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -4364,7 +4367,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getMobCompactionState</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3300">getMobCompactionState</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)</pre>
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3303">getMobCompactionState</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)</pre>
<div class="block">Gets the mob file compaction state for a specific table.
Whether all the mob files are selected is known during the compaction execution, but
the statistic is done just before compaction starts, it is hard to know the compaction
@@ -4384,7 +4387,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>reportMobCompactionStart</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3308">reportMobCompactionStart</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3311">reportMobCompactionStart</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -4398,7 +4401,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>reportMobCompactionEnd</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3325">reportMobCompactionEnd</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3328">reportMobCompactionEnd</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -4412,7 +4415,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>requestMobCompaction</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3350">requestMobCompaction</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3353">requestMobCompaction</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>> columns,
boolean allFiles)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4433,7 +4436,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>isBalancerOn</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3361">isBalancerOn</a>()</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3364">isBalancerOn</a>()</pre>
<div class="block">Queries the state of the <a href="../../../../../org/apache/hadoop/hbase/zookeeper/LoadBalancerTracker.html" title="class in org.apache.hadoop.hbase.zookeeper"><code>LoadBalancerTracker</code></a>. If the balancer is not initialized,
false is returned.</div>
<dl>
@@ -4448,7 +4451,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>isNormalizerOn</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3372">isNormalizerOn</a>()</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3379">isNormalizerOn</a>()</pre>
<div class="block">Queries the state of the <a href="../../../../../org/apache/hadoop/hbase/zookeeper/RegionNormalizerTracker.html" title="class in org.apache.hadoop.hbase.zookeeper"><code>RegionNormalizerTracker</code></a>. If it's not initialized,
false is returned.</div>
</li>
@@ -4459,7 +4462,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>isSplitOrMergeEnabled</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3384">isSplitOrMergeEnabled</a>(<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client">MasterSwitchType</a> switchType)</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3395">isSplitOrMergeEnabled</a>(<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client">MasterSwitchType</a> switchType)</pre>
<div class="block">Queries the state of the <a href="../../../../../org/apache/hadoop/hbase/master/SplitOrMergeTracker.html" title="class in org.apache.hadoop.hbase.master"><code>SplitOrMergeTracker</code></a>. If it is not initialized,
false is returned. If switchType is illegal, false will return.</div>
<dl>
@@ -4478,7 +4481,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getLoadBalancerClassName</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3396">getLoadBalancerClassName</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3411">getLoadBalancerClassName</a>()</pre>
<div class="block">Fetch the configured <a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master"><code>LoadBalancer</code></a> class name. If none is set, a default is returned.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -4492,7 +4495,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getRegionNormalizerTracker</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/zookeeper/RegionNormalizerTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">RegionNormalizerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3404">getRegionNormalizerTracker</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/zookeeper/RegionNormalizerTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">RegionNormalizerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3419">getRegionNormalizerTracker</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>RegionNormalizerTracker instance</dd>
@@ -4505,7 +4508,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getSplitOrMergeTracker</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/master/SplitOrMergeTracker.html" title="class in org.apache.hadoop.hbase.master">SplitOrMergeTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3408">getSplitOrMergeTracker</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/master/SplitOrMergeTracker.html" title="class in org.apache.hadoop.hbase.master">SplitOrMergeTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3423">getSplitOrMergeTracker</a>()</pre>
</li>
</ul>
<a name="getLoadBalancer--">
@@ -4514,7 +4517,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getLoadBalancer</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master">LoadBalancer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3413">getLoadBalancer</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master">LoadBalancer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3428">getLoadBalancer</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getLoadBalancer--">getLoadBalancer</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -4529,7 +4532,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getFavoredNodesManager</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesManager.html" title="class in org.apache.hadoop.hbase.favored">FavoredNodesManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3418">getFavoredNodesManager</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesManager.html" title="class in org.apache.hadoop.hbase.favored">FavoredNodesManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3433">getFavoredNodesManager</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getFavoredNodesManager--">getFavoredNodesManager</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -4544,7 +4547,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>executePeerProcedure</h4>
-<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3422">executePeerProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a> procedure)
+<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3437">executePeerProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a> procedure)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -4558,7 +4561,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>addReplicationPeer</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3429">addReplicationPeer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId,
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3444">addReplicationPeer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId,
<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a> peerConfig,
boolean enabled)
throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a>,
@@ -4584,7 +4587,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>removeReplicationPeer</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3437">removeReplicationPeer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3452">removeReplicationPeer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)
throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#removeReplicationPeer-java.lang.String-">MasterServices</a></code></span></div>
@@ -4606,7 +4609,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>enableReplicationPeer</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3443">enableReplicationPeer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3458">enableReplicationPeer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)
throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#enableReplicationPeer-java.lang.String-">MasterServices</a></code></span></div>
@@ -4628,7 +4631,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>disableReplicationPeer</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3449">disableReplicationPeer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3464">disableReplicationPeer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)
throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#disableReplicationPeer-java.lang.String-">MasterServices</a></code></span></div>
@@ -4650,7 +4653,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getReplicationPeerConfig</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3455">getReplicationPeerConfig</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3470">getReplicationPeerConfig</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)
throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getReplicationPeerConfig-java.lang.String-">MasterServices</a></code></span></div>
@@ -4674,7 +4677,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>updateReplicationPeerConfig</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3470">updateReplicationPeerConfig</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId,
+<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3485">updateReplicationPeerConfig</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId,
<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a> peerConfig)
throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4698,7 +4701,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>listReplicationPeers</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerDescription</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3478">listReplicationPeers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> regex)
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerDescription</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3493">listReplicationPeers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> regex)
throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#listReplicationPeers-java.lang.String-">MasterServices</a></code></span></div>
@@ -4722,7 +4725,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>decommissionRegionServers</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3499">decommissionRegionServers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> servers,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3514">decommissionRegionServers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> servers,
boolean offload)
throws <a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
<div class="block">Mark region server(s) as decommissioned (previously called 'draining') to prevent additional
@@ -4741,7 +4744,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>listDecommissionedRegionServers</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3539">listDecommissionedRegionServers</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3554">listDecommissionedRegionServers</a>()</pre>
<div class="block">List region servers marked as decommissioned (previously called 'draining') to not get regions
assigned to them.</div>
<dl>
@@ -4756,7 +4759,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>recommissionRegionServer</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3549">recommissionRegionServer</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> server,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3564">recommissionRegionServer</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> server,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><byte[]> encodedRegionNames)
throws <a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
<div class="block">Remove decommission marker (previously called 'draining') from a region server to allow regions
@@ -4775,7 +4778,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getLockManager</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/master/locking/LockManager.html" title="class in org.apache.hadoop.hbase.master.locking">LockManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3588">getLockManager</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/master/locking/LockManager.html" title="class in org.apache.hadoop.hbase.master.locking">LockManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3603">getLockManager</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getLockManager--">getLockManager</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -4790,7 +4793,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>recoverMeta</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3593">recoverMeta</a>()
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3608">recoverMeta</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#recoverMeta--">MasterServices</a></code></span></div>
<div class="block">Recover meta table. Will result in no-op is meta is already initialized. Any code that has
@@ -4810,7 +4813,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getQuotaObserverChore</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaObserverChore.html" title="class in org.apache.hadoop.hbase.quotas">QuotaObserverChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3602">getQuotaObserverChore</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaObserverChore.html" title="class in org.apache.hadoop.hbase.quotas">QuotaObserverChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3617">getQuotaObserverChore</a>()</pre>
</li>
</ul>
<a name="getSpaceQuotaSnapshotNotifier--">
@@ -4819,7 +4822,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getSpaceQuotaSnapshotNotifier</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifier.html" title="interface in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshotNotifier</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3606">getSpaceQuotaSnapshotNotifier</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifier.html" title="interface in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshotNotifier</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3621">getSpaceQuotaSnapshotNotifier</a>()</pre>
</li>
</ul>
<a name="getRemoteProcedure-long-">
@@ -4828,7 +4831,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getRemoteProcedure</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a><<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>,?> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3611">getRemoteProcedure</a>(long procId)</pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a><<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>,?> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3626">getRemoteProcedure</a>(long procId)</pre>
</li>
</ul>
<a name="remoteProcedureCompleted-long-">
@@ -4837,7 +4840,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>remoteProcedureCompleted</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3620">remoteProcedureCompleted</a>(long procId)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3635">remoteProcedureCompleted</a>(long procId)</pre>
</li>
</ul>
<a name="remoteProcedureFailed-long-org.apache.hadoop.hbase.procedure2.RemoteProcedureException-">
@@ -4846,7 +4849,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>remoteProcedureFailed</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3627">remoteProcedureFailed</a>(long procId,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3642">remoteProcedureFailed</a>(long procId,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureException</a> error)</pre>
</li>
</ul>
@@ -4856,7 +4859,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>getReplicationPeerManager</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.html" title="class in org.apache.hadoop.hbase.master.replication">ReplicationPeerManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3635">getReplicationPeerManager</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.html" title="class in org.apache.hadoop.hbase.master.replication">ReplicationPeerManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3650">getReplicationPeerManager</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getReplicationPeerManager--">MasterServices</a></code></span></div>
<div class="block">Returns the <a href="../../../../../org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.html" title="class in org.apache.hadoop.hbase.master.replication"><code>ReplicationPeerManager</code></a>.</div>
<dl>
@@ -4871,7 +4874,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockList">
<li class="blockList">
<h4>decorateMasterConfiguration</h4>
-<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3643">decorateMasterConfiguration</a>(org.apache.hadoop.conf.Configuration conf)</pre>
+<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3658">decorateMasterConfiguration</a>(org.apache.hadoop.conf.Configuration conf)</pre>
<div class="block">This method modifies the master's configuration in order to inject replication-related features</div>
</li>
</ul>
@@ -4881,7 +4884,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
<ul class="blockListLast">
<li class="blockList">
<h4>getSnapshotQuotaObserverChore</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/quotas/SnapshotQuotaObserverChore.html" title="class in org.apache.hadoop.hbase.quotas">SnapshotQuotaObserverChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3658">getSnapshotQuotaObserverChore</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/quotas/SnapshotQuotaObserverChore.html" title="class in org.apache.hadoop.hbase.quotas">SnapshotQuotaObserverChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3673">getSnapshotQuotaObserverChore</a>()</pre>
</li>
</ul>
</li>
[07/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.DelayedTask.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.DelayedTask.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.DelayedTask.html
index 594ef24..17d5c40 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.DelayedTask.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.DelayedTask.html
@@ -170,241 +170,242 @@
<span class="sourceLineNo">162</span> }<a name="line.162"></a>
<span class="sourceLineNo">163</span><a name="line.163"></a>
<span class="sourceLineNo">164</span> /**<a name="line.164"></a>
-<span class="sourceLineNo">165</span> * Add a remote rpc. Be sure to check result for successful add.<a name="line.165"></a>
+<span class="sourceLineNo">165</span> * Add a remote rpc.<a name="line.165"></a>
<span class="sourceLineNo">166</span> * @param key the node identifier<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * @return True if we successfully added the operation.<a name="line.167"></a>
-<span class="sourceLineNo">168</span> */<a name="line.168"></a>
-<span class="sourceLineNo">169</span> public boolean addOperationToNode(final TRemote key, RemoteProcedure rp) {<a name="line.169"></a>
+<span class="sourceLineNo">167</span> */<a name="line.167"></a>
+<span class="sourceLineNo">168</span> public void addOperationToNode(final TRemote key, RemoteProcedure rp)<a name="line.168"></a>
+<span class="sourceLineNo">169</span> throws NullTargetServerDispatchException, NoServerDispatchException, NoNodeDispatchException {<a name="line.169"></a>
<span class="sourceLineNo">170</span> if (key == null) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span> // Key is remote server name. Be careful. It could have been nulled by a concurrent<a name="line.171"></a>
-<span class="sourceLineNo">172</span> // ServerCrashProcedure shutting down outstanding RPC requests. See remoteCallFailed.<a name="line.172"></a>
-<span class="sourceLineNo">173</span> return false;<a name="line.173"></a>
-<span class="sourceLineNo">174</span> }<a name="line.174"></a>
-<span class="sourceLineNo">175</span> assert key != null : "found null key for node";<a name="line.175"></a>
-<span class="sourceLineNo">176</span> BufferNode node = nodeMap.get(key);<a name="line.176"></a>
-<span class="sourceLineNo">177</span> if (node == null) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span> return false;<a name="line.178"></a>
-<span class="sourceLineNo">179</span> }<a name="line.179"></a>
-<span class="sourceLineNo">180</span> node.add(rp);<a name="line.180"></a>
-<span class="sourceLineNo">181</span> // Check our node still in the map; could have been removed by #removeNode.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> return nodeMap.containsValue(node);<a name="line.182"></a>
-<span class="sourceLineNo">183</span> }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span> /**<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * Remove a remote node<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * @param key the node identifier<a name="line.187"></a>
-<span class="sourceLineNo">188</span> */<a name="line.188"></a>
-<span class="sourceLineNo">189</span> public boolean removeNode(final TRemote key) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span> final BufferNode node = nodeMap.remove(key);<a name="line.190"></a>
-<span class="sourceLineNo">191</span> if (node == null) return false;<a name="line.191"></a>
-<span class="sourceLineNo">192</span> node.abortOperationsInQueue();<a name="line.192"></a>
-<span class="sourceLineNo">193</span> return true;<a name="line.193"></a>
-<span class="sourceLineNo">194</span> }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span> // ============================================================================================<a name="line.196"></a>
-<span class="sourceLineNo">197</span> // Task Helpers<a name="line.197"></a>
-<span class="sourceLineNo">198</span> // ============================================================================================<a name="line.198"></a>
-<span class="sourceLineNo">199</span> protected Future<Void> submitTask(Callable<Void> task) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span> return threadPool.submit(task);<a name="line.200"></a>
-<span class="sourceLineNo">201</span> }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span> protected Future<Void> submitTask(Callable<Void> task, long delay, TimeUnit unit) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span> final FutureTask<Void> futureTask = new FutureTask(task);<a name="line.204"></a>
-<span class="sourceLineNo">205</span> timeoutExecutor.add(new DelayedTask(futureTask, delay, unit));<a name="line.205"></a>
-<span class="sourceLineNo">206</span> return futureTask;<a name="line.206"></a>
-<span class="sourceLineNo">207</span> }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span> protected abstract void remoteDispatch(TRemote key, Set<RemoteProcedure> operations);<a name="line.209"></a>
-<span class="sourceLineNo">210</span> protected abstract void abortPendingOperations(TRemote key, Set<RemoteProcedure> operations);<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span> /**<a name="line.212"></a>
-<span class="sourceLineNo">213</span> * Data structure with reference to remote operation.<a name="line.213"></a>
-<span class="sourceLineNo">214</span> */<a name="line.214"></a>
-<span class="sourceLineNo">215</span> public static abstract class RemoteOperation {<a name="line.215"></a>
-<span class="sourceLineNo">216</span> private final RemoteProcedure remoteProcedure;<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span> protected RemoteOperation(final RemoteProcedure remoteProcedure) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span> this.remoteProcedure = remoteProcedure;<a name="line.219"></a>
-<span class="sourceLineNo">220</span> }<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span> public RemoteProcedure getRemoteProcedure() {<a name="line.222"></a>
-<span class="sourceLineNo">223</span> return remoteProcedure;<a name="line.223"></a>
-<span class="sourceLineNo">224</span> }<a name="line.224"></a>
-<span class="sourceLineNo">225</span> }<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span> /**<a name="line.227"></a>
-<span class="sourceLineNo">228</span> * Remote procedure reference.<a name="line.228"></a>
-<span class="sourceLineNo">229</span> */<a name="line.229"></a>
-<span class="sourceLineNo">230</span> public interface RemoteProcedure<TEnv, TRemote> {<a name="line.230"></a>
-<span class="sourceLineNo">231</span> /**<a name="line.231"></a>
-<span class="sourceLineNo">232</span> * For building the remote operation.<a name="line.232"></a>
-<span class="sourceLineNo">233</span> */<a name="line.233"></a>
-<span class="sourceLineNo">234</span> RemoteOperation remoteCallBuild(TEnv env, TRemote remote);<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span> /**<a name="line.236"></a>
-<span class="sourceLineNo">237</span> * Called when the executeProcedure call is failed.<a name="line.237"></a>
-<span class="sourceLineNo">238</span> */<a name="line.238"></a>
-<span class="sourceLineNo">239</span> void remoteCallFailed(TEnv env, TRemote remote, IOException exception);<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span> /**<a name="line.241"></a>
-<span class="sourceLineNo">242</span> * Called when RS tells the remote procedure is succeeded through the<a name="line.242"></a>
-<span class="sourceLineNo">243</span> * {@code reportProcedureDone} method.<a name="line.243"></a>
-<span class="sourceLineNo">244</span> */<a name="line.244"></a>
-<span class="sourceLineNo">245</span> void remoteOperationCompleted(TEnv env);<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span> /**<a name="line.247"></a>
-<span class="sourceLineNo">248</span> * Called when RS tells the remote procedure is failed through the {@code reportProcedureDone}<a name="line.248"></a>
-<span class="sourceLineNo">249</span> * method.<a name="line.249"></a>
-<span class="sourceLineNo">250</span> */<a name="line.250"></a>
-<span class="sourceLineNo">251</span> void remoteOperationFailed(TEnv env, RemoteProcedureException error);<a name="line.251"></a>
-<span class="sourceLineNo">252</span> }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span> /**<a name="line.254"></a>
-<span class="sourceLineNo">255</span> * Account of what procedures are running on remote node.<a name="line.255"></a>
-<span class="sourceLineNo">256</span> * @param <TEnv><a name="line.256"></a>
-<span class="sourceLineNo">257</span> * @param <TRemote><a name="line.257"></a>
-<span class="sourceLineNo">258</span> */<a name="line.258"></a>
-<span class="sourceLineNo">259</span> public interface RemoteNode<TEnv, TRemote> {<a name="line.259"></a>
-<span class="sourceLineNo">260</span> TRemote getKey();<a name="line.260"></a>
-<span class="sourceLineNo">261</span> void add(RemoteProcedure<TEnv, TRemote> operation);<a name="line.261"></a>
-<span class="sourceLineNo">262</span> void dispatch();<a name="line.262"></a>
-<span class="sourceLineNo">263</span> }<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span> protected ArrayListMultimap<Class<?>, RemoteOperation> buildAndGroupRequestByType(final TEnv env,<a name="line.265"></a>
-<span class="sourceLineNo">266</span> final TRemote remote, final Set<RemoteProcedure> remoteProcedures) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span> final ArrayListMultimap<Class<?>, RemoteOperation> requestByType = ArrayListMultimap.create();<a name="line.267"></a>
-<span class="sourceLineNo">268</span> for (RemoteProcedure proc: remoteProcedures) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span> RemoteOperation operation = proc.remoteCallBuild(env, remote);<a name="line.269"></a>
-<span class="sourceLineNo">270</span> requestByType.put(operation.getClass(), operation);<a name="line.270"></a>
-<span class="sourceLineNo">271</span> }<a name="line.271"></a>
-<span class="sourceLineNo">272</span> return requestByType;<a name="line.272"></a>
-<span class="sourceLineNo">273</span> }<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span> protected <T extends RemoteOperation> List<T> fetchType(<a name="line.275"></a>
-<span class="sourceLineNo">276</span> final ArrayListMultimap<Class<?>, RemoteOperation> requestByType, final Class<T> type) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span> return (List<T>)requestByType.removeAll(type);<a name="line.277"></a>
-<span class="sourceLineNo">278</span> }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span> // ============================================================================================<a name="line.280"></a>
-<span class="sourceLineNo">281</span> // Timeout Helpers<a name="line.281"></a>
-<span class="sourceLineNo">282</span> // ============================================================================================<a name="line.282"></a>
-<span class="sourceLineNo">283</span> private final class TimeoutExecutorThread extends Thread {<a name="line.283"></a>
-<span class="sourceLineNo">284</span> private final DelayQueue<DelayedWithTimeout> queue = new DelayQueue<DelayedWithTimeout>();<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span> public TimeoutExecutorThread() {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> super("ProcedureDispatcherTimeoutThread");<a name="line.287"></a>
-<span class="sourceLineNo">288</span> }<a name="line.288"></a>
-<span class="sourceLineNo">289</span><a name="line.289"></a>
-<span class="sourceLineNo">290</span> @Override<a name="line.290"></a>
-<span class="sourceLineNo">291</span> public void run() {<a name="line.291"></a>
-<span class="sourceLineNo">292</span> while (running.get()) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span> final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.293"></a>
-<span class="sourceLineNo">294</span> if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span> // the executor may be shutting down, and the task is just the shutdown request<a name="line.295"></a>
-<span class="sourceLineNo">296</span> continue;<a name="line.296"></a>
-<span class="sourceLineNo">297</span> }<a name="line.297"></a>
-<span class="sourceLineNo">298</span> if (task instanceof DelayedTask) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span> threadPool.execute(((DelayedTask)task).getObject());<a name="line.299"></a>
-<span class="sourceLineNo">300</span> } else {<a name="line.300"></a>
-<span class="sourceLineNo">301</span> ((BufferNode)task).dispatch();<a name="line.301"></a>
-<span class="sourceLineNo">302</span> }<a name="line.302"></a>
-<span class="sourceLineNo">303</span> }<a name="line.303"></a>
-<span class="sourceLineNo">304</span> }<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span> public void add(final DelayedWithTimeout delayed) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span> queue.add(delayed);<a name="line.307"></a>
-<span class="sourceLineNo">308</span> }<a name="line.308"></a>
-<span class="sourceLineNo">309</span><a name="line.309"></a>
-<span class="sourceLineNo">310</span> public void remove(final DelayedWithTimeout delayed) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span> queue.remove(delayed);<a name="line.311"></a>
-<span class="sourceLineNo">312</span> }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span> public void sendStopSignal() {<a name="line.314"></a>
-<span class="sourceLineNo">315</span> queue.add(DelayedUtil.DELAYED_POISON);<a name="line.315"></a>
-<span class="sourceLineNo">316</span> }<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span> public void awaitTermination() {<a name="line.318"></a>
-<span class="sourceLineNo">319</span> try {<a name="line.319"></a>
-<span class="sourceLineNo">320</span> final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.320"></a>
-<span class="sourceLineNo">321</span> for (int i = 0; isAlive(); ++i) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span> sendStopSignal();<a name="line.322"></a>
-<span class="sourceLineNo">323</span> join(250);<a name="line.323"></a>
-<span class="sourceLineNo">324</span> if (i > 0 && (i % 8) == 0) {<a name="line.324"></a>
-<span class="sourceLineNo">325</span> LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.325"></a>
-<span class="sourceLineNo">326</span> StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.326"></a>
-<span class="sourceLineNo">327</span> }<a name="line.327"></a>
-<span class="sourceLineNo">328</span> }<a name="line.328"></a>
-<span class="sourceLineNo">329</span> } catch (InterruptedException e) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span> LOG.warn(getName() + " join wait got interrupted", e);<a name="line.330"></a>
-<span class="sourceLineNo">331</span> }<a name="line.331"></a>
-<span class="sourceLineNo">332</span> }<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> // ============================================================================================<a name="line.335"></a>
-<span class="sourceLineNo">336</span> // Internals Helpers<a name="line.336"></a>
-<span class="sourceLineNo">337</span> // ============================================================================================<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span> /**<a name="line.339"></a>
-<span class="sourceLineNo">340</span> * Node that contains a set of RemoteProcedures<a name="line.340"></a>
-<span class="sourceLineNo">341</span> */<a name="line.341"></a>
-<span class="sourceLineNo">342</span> protected final class BufferNode extends DelayedContainerWithTimestamp<TRemote><a name="line.342"></a>
-<span class="sourceLineNo">343</span> implements RemoteNode<TEnv, TRemote> {<a name="line.343"></a>
-<span class="sourceLineNo">344</span> private Set<RemoteProcedure> operations;<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span> protected BufferNode(final TRemote key) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> super(key, 0);<a name="line.347"></a>
-<span class="sourceLineNo">348</span> }<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span> @Override<a name="line.350"></a>
-<span class="sourceLineNo">351</span> public TRemote getKey() {<a name="line.351"></a>
-<span class="sourceLineNo">352</span> return getObject();<a name="line.352"></a>
-<span class="sourceLineNo">353</span> }<a name="line.353"></a>
-<span class="sourceLineNo">354</span><a name="line.354"></a>
-<span class="sourceLineNo">355</span> @Override<a name="line.355"></a>
-<span class="sourceLineNo">356</span> public synchronized void add(final RemoteProcedure operation) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span> if (this.operations == null) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> this.operations = new HashSet<>();<a name="line.358"></a>
-<span class="sourceLineNo">359</span> setTimeout(EnvironmentEdgeManager.currentTime() + operationDelay);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> timeoutExecutor.add(this);<a name="line.360"></a>
-<span class="sourceLineNo">361</span> }<a name="line.361"></a>
-<span class="sourceLineNo">362</span> this.operations.add(operation);<a name="line.362"></a>
-<span class="sourceLineNo">363</span> if (this.operations.size() > queueMaxSize) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span> timeoutExecutor.remove(this);<a name="line.364"></a>
-<span class="sourceLineNo">365</span> dispatch();<a name="line.365"></a>
-<span class="sourceLineNo">366</span> }<a name="line.366"></a>
-<span class="sourceLineNo">367</span> }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span> @Override<a name="line.369"></a>
-<span class="sourceLineNo">370</span> public synchronized void dispatch() {<a name="line.370"></a>
-<span class="sourceLineNo">371</span> if (operations != null) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span> remoteDispatch(getKey(), operations);<a name="line.372"></a>
-<span class="sourceLineNo">373</span> this.operations = null;<a name="line.373"></a>
-<span class="sourceLineNo">374</span> }<a name="line.374"></a>
-<span class="sourceLineNo">375</span> }<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span> public synchronized void abortOperationsInQueue() {<a name="line.377"></a>
-<span class="sourceLineNo">378</span> if (operations != null) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span> abortPendingOperations(getKey(), operations);<a name="line.379"></a>
-<span class="sourceLineNo">380</span> this.operations = null;<a name="line.380"></a>
-<span class="sourceLineNo">381</span> }<a name="line.381"></a>
-<span class="sourceLineNo">382</span> }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span> @Override<a name="line.384"></a>
-<span class="sourceLineNo">385</span> public String toString() {<a name="line.385"></a>
-<span class="sourceLineNo">386</span> return super.toString() + ", operations=" + this.operations;<a name="line.386"></a>
-<span class="sourceLineNo">387</span> }<a name="line.387"></a>
-<span class="sourceLineNo">388</span> }<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span> /**<a name="line.390"></a>
-<span class="sourceLineNo">391</span> * Delayed object that holds a FutureTask.<a name="line.391"></a>
-<span class="sourceLineNo">392</span> * used to submit something later to the thread-pool.<a name="line.392"></a>
-<span class="sourceLineNo">393</span> */<a name="line.393"></a>
-<span class="sourceLineNo">394</span> private static final class DelayedTask extends DelayedContainerWithTimestamp<FutureTask<Void>> {<a name="line.394"></a>
-<span class="sourceLineNo">395</span> public DelayedTask(final FutureTask<Void> task, final long delay, final TimeUnit unit) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span> super(task, EnvironmentEdgeManager.currentTime() + unit.toMillis(delay));<a name="line.396"></a>
-<span class="sourceLineNo">397</span> }<a name="line.397"></a>
-<span class="sourceLineNo">398</span> }<a name="line.398"></a>
-<span class="sourceLineNo">399</span>}<a name="line.399"></a>
+<span class="sourceLineNo">171</span> throw new NullTargetServerDispatchException(rp.toString());<a name="line.171"></a>
+<span class="sourceLineNo">172</span> }<a name="line.172"></a>
+<span class="sourceLineNo">173</span> BufferNode node = nodeMap.get(key);<a name="line.173"></a>
+<span class="sourceLineNo">174</span> if (node == null) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span> // If null here, it means node has been removed because it crashed. This happens when server<a name="line.175"></a>
+<span class="sourceLineNo">176</span> // is expired in ServerManager. ServerCrashProcedure may or may not have run.<a name="line.176"></a>
+<span class="sourceLineNo">177</span> throw new NoServerDispatchException(key.toString() + "; " + rp.toString());<a name="line.177"></a>
+<span class="sourceLineNo">178</span> }<a name="line.178"></a>
+<span class="sourceLineNo">179</span> node.add(rp);<a name="line.179"></a>
+<span class="sourceLineNo">180</span> // Check our node still in the map; could have been removed by #removeNode.<a name="line.180"></a>
+<span class="sourceLineNo">181</span> if (!nodeMap.containsValue(node)) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span> throw new NoNodeDispatchException(key.toString() + "; " + rp.toString());<a name="line.182"></a>
+<span class="sourceLineNo">183</span> }<a name="line.183"></a>
+<span class="sourceLineNo">184</span> }<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span> /**<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * Remove a remote node<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * @param key the node identifier<a name="line.188"></a>
+<span class="sourceLineNo">189</span> */<a name="line.189"></a>
+<span class="sourceLineNo">190</span> public boolean removeNode(final TRemote key) {<a name="line.190"></a>
+<span class="sourceLineNo">191</span> final BufferNode node = nodeMap.remove(key);<a name="line.191"></a>
+<span class="sourceLineNo">192</span> if (node == null) return false;<a name="line.192"></a>
+<span class="sourceLineNo">193</span> node.abortOperationsInQueue();<a name="line.193"></a>
+<span class="sourceLineNo">194</span> return true;<a name="line.194"></a>
+<span class="sourceLineNo">195</span> }<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span> // ============================================================================================<a name="line.197"></a>
+<span class="sourceLineNo">198</span> // Task Helpers<a name="line.198"></a>
+<span class="sourceLineNo">199</span> // ============================================================================================<a name="line.199"></a>
+<span class="sourceLineNo">200</span> protected Future<Void> submitTask(Callable<Void> task) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span> return threadPool.submit(task);<a name="line.201"></a>
+<span class="sourceLineNo">202</span> }<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span> protected Future<Void> submitTask(Callable<Void> task, long delay, TimeUnit unit) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span> final FutureTask<Void> futureTask = new FutureTask(task);<a name="line.205"></a>
+<span class="sourceLineNo">206</span> timeoutExecutor.add(new DelayedTask(futureTask, delay, unit));<a name="line.206"></a>
+<span class="sourceLineNo">207</span> return futureTask;<a name="line.207"></a>
+<span class="sourceLineNo">208</span> }<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span> protected abstract void remoteDispatch(TRemote key, Set<RemoteProcedure> operations);<a name="line.210"></a>
+<span class="sourceLineNo">211</span> protected abstract void abortPendingOperations(TRemote key, Set<RemoteProcedure> operations);<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span> /**<a name="line.213"></a>
+<span class="sourceLineNo">214</span> * Data structure with reference to remote operation.<a name="line.214"></a>
+<span class="sourceLineNo">215</span> */<a name="line.215"></a>
+<span class="sourceLineNo">216</span> public static abstract class RemoteOperation {<a name="line.216"></a>
+<span class="sourceLineNo">217</span> private final RemoteProcedure remoteProcedure;<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span> protected RemoteOperation(final RemoteProcedure remoteProcedure) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span> this.remoteProcedure = remoteProcedure;<a name="line.220"></a>
+<span class="sourceLineNo">221</span> }<a name="line.221"></a>
+<span class="sourceLineNo">222</span><a name="line.222"></a>
+<span class="sourceLineNo">223</span> public RemoteProcedure getRemoteProcedure() {<a name="line.223"></a>
+<span class="sourceLineNo">224</span> return remoteProcedure;<a name="line.224"></a>
+<span class="sourceLineNo">225</span> }<a name="line.225"></a>
+<span class="sourceLineNo">226</span> }<a name="line.226"></a>
+<span class="sourceLineNo">227</span><a name="line.227"></a>
+<span class="sourceLineNo">228</span> /**<a name="line.228"></a>
+<span class="sourceLineNo">229</span> * Remote procedure reference.<a name="line.229"></a>
+<span class="sourceLineNo">230</span> */<a name="line.230"></a>
+<span class="sourceLineNo">231</span> public interface RemoteProcedure<TEnv, TRemote> {<a name="line.231"></a>
+<span class="sourceLineNo">232</span> /**<a name="line.232"></a>
+<span class="sourceLineNo">233</span> * For building the remote operation.<a name="line.233"></a>
+<span class="sourceLineNo">234</span> */<a name="line.234"></a>
+<span class="sourceLineNo">235</span> RemoteOperation remoteCallBuild(TEnv env, TRemote remote);<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span> /**<a name="line.237"></a>
+<span class="sourceLineNo">238</span> * Called when the executeProcedure call is failed.<a name="line.238"></a>
+<span class="sourceLineNo">239</span> */<a name="line.239"></a>
+<span class="sourceLineNo">240</span> void remoteCallFailed(TEnv env, TRemote remote, IOException exception);<a name="line.240"></a>
+<span class="sourceLineNo">241</span><a name="line.241"></a>
+<span class="sourceLineNo">242</span> /**<a name="line.242"></a>
+<span class="sourceLineNo">243</span> * Called when RS tells the remote procedure is succeeded through the<a name="line.243"></a>
+<span class="sourceLineNo">244</span> * {@code reportProcedureDone} method.<a name="line.244"></a>
+<span class="sourceLineNo">245</span> */<a name="line.245"></a>
+<span class="sourceLineNo">246</span> void remoteOperationCompleted(TEnv env);<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span> /**<a name="line.248"></a>
+<span class="sourceLineNo">249</span> * Called when RS tells the remote procedure is failed through the {@code reportProcedureDone}<a name="line.249"></a>
+<span class="sourceLineNo">250</span> * method.<a name="line.250"></a>
+<span class="sourceLineNo">251</span> */<a name="line.251"></a>
+<span class="sourceLineNo">252</span> void remoteOperationFailed(TEnv env, RemoteProcedureException error);<a name="line.252"></a>
+<span class="sourceLineNo">253</span> }<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span> /**<a name="line.255"></a>
+<span class="sourceLineNo">256</span> * Account of what procedures are running on remote node.<a name="line.256"></a>
+<span class="sourceLineNo">257</span> * @param <TEnv><a name="line.257"></a>
+<span class="sourceLineNo">258</span> * @param <TRemote><a name="line.258"></a>
+<span class="sourceLineNo">259</span> */<a name="line.259"></a>
+<span class="sourceLineNo">260</span> public interface RemoteNode<TEnv, TRemote> {<a name="line.260"></a>
+<span class="sourceLineNo">261</span> TRemote getKey();<a name="line.261"></a>
+<span class="sourceLineNo">262</span> void add(RemoteProcedure<TEnv, TRemote> operation);<a name="line.262"></a>
+<span class="sourceLineNo">263</span> void dispatch();<a name="line.263"></a>
+<span class="sourceLineNo">264</span> }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span> protected ArrayListMultimap<Class<?>, RemoteOperation> buildAndGroupRequestByType(final TEnv env,<a name="line.266"></a>
+<span class="sourceLineNo">267</span> final TRemote remote, final Set<RemoteProcedure> remoteProcedures) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span> final ArrayListMultimap<Class<?>, RemoteOperation> requestByType = ArrayListMultimap.create();<a name="line.268"></a>
+<span class="sourceLineNo">269</span> for (RemoteProcedure proc: remoteProcedures) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span> RemoteOperation operation = proc.remoteCallBuild(env, remote);<a name="line.270"></a>
+<span class="sourceLineNo">271</span> requestByType.put(operation.getClass(), operation);<a name="line.271"></a>
+<span class="sourceLineNo">272</span> }<a name="line.272"></a>
+<span class="sourceLineNo">273</span> return requestByType;<a name="line.273"></a>
+<span class="sourceLineNo">274</span> }<a name="line.274"></a>
+<span class="sourceLineNo">275</span><a name="line.275"></a>
+<span class="sourceLineNo">276</span> protected <T extends RemoteOperation> List<T> fetchType(<a name="line.276"></a>
+<span class="sourceLineNo">277</span> final ArrayListMultimap<Class<?>, RemoteOperation> requestByType, final Class<T> type) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span> return (List<T>)requestByType.removeAll(type);<a name="line.278"></a>
+<span class="sourceLineNo">279</span> }<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span> // ============================================================================================<a name="line.281"></a>
+<span class="sourceLineNo">282</span> // Timeout Helpers<a name="line.282"></a>
+<span class="sourceLineNo">283</span> // ============================================================================================<a name="line.283"></a>
+<span class="sourceLineNo">284</span> private final class TimeoutExecutorThread extends Thread {<a name="line.284"></a>
+<span class="sourceLineNo">285</span> private final DelayQueue<DelayedWithTimeout> queue = new DelayQueue<DelayedWithTimeout>();<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span> public TimeoutExecutorThread() {<a name="line.287"></a>
+<span class="sourceLineNo">288</span> super("ProcedureDispatcherTimeoutThread");<a name="line.288"></a>
+<span class="sourceLineNo">289</span> }<a name="line.289"></a>
+<span class="sourceLineNo">290</span><a name="line.290"></a>
+<span class="sourceLineNo">291</span> @Override<a name="line.291"></a>
+<span class="sourceLineNo">292</span> public void run() {<a name="line.292"></a>
+<span class="sourceLineNo">293</span> while (running.get()) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span> final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.294"></a>
+<span class="sourceLineNo">295</span> if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.295"></a>
+<span class="sourceLineNo">296</span> // the executor may be shutting down, and the task is just the shutdown request<a name="line.296"></a>
+<span class="sourceLineNo">297</span> continue;<a name="line.297"></a>
+<span class="sourceLineNo">298</span> }<a name="line.298"></a>
+<span class="sourceLineNo">299</span> if (task instanceof DelayedTask) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span> threadPool.execute(((DelayedTask)task).getObject());<a name="line.300"></a>
+<span class="sourceLineNo">301</span> } else {<a name="line.301"></a>
+<span class="sourceLineNo">302</span> ((BufferNode)task).dispatch();<a name="line.302"></a>
+<span class="sourceLineNo">303</span> }<a name="line.303"></a>
+<span class="sourceLineNo">304</span> }<a name="line.304"></a>
+<span class="sourceLineNo">305</span> }<a name="line.305"></a>
+<span class="sourceLineNo">306</span><a name="line.306"></a>
+<span class="sourceLineNo">307</span> public void add(final DelayedWithTimeout delayed) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span> queue.add(delayed);<a name="line.308"></a>
+<span class="sourceLineNo">309</span> }<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span> public void remove(final DelayedWithTimeout delayed) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span> queue.remove(delayed);<a name="line.312"></a>
+<span class="sourceLineNo">313</span> }<a name="line.313"></a>
+<span class="sourceLineNo">314</span><a name="line.314"></a>
+<span class="sourceLineNo">315</span> public void sendStopSignal() {<a name="line.315"></a>
+<span class="sourceLineNo">316</span> queue.add(DelayedUtil.DELAYED_POISON);<a name="line.316"></a>
+<span class="sourceLineNo">317</span> }<a name="line.317"></a>
+<span class="sourceLineNo">318</span><a name="line.318"></a>
+<span class="sourceLineNo">319</span> public void awaitTermination() {<a name="line.319"></a>
+<span class="sourceLineNo">320</span> try {<a name="line.320"></a>
+<span class="sourceLineNo">321</span> final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.321"></a>
+<span class="sourceLineNo">322</span> for (int i = 0; isAlive(); ++i) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span> sendStopSignal();<a name="line.323"></a>
+<span class="sourceLineNo">324</span> join(250);<a name="line.324"></a>
+<span class="sourceLineNo">325</span> if (i > 0 && (i % 8) == 0) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span> LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.326"></a>
+<span class="sourceLineNo">327</span> StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.327"></a>
+<span class="sourceLineNo">328</span> }<a name="line.328"></a>
+<span class="sourceLineNo">329</span> }<a name="line.329"></a>
+<span class="sourceLineNo">330</span> } catch (InterruptedException e) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span> LOG.warn(getName() + " join wait got interrupted", e);<a name="line.331"></a>
+<span class="sourceLineNo">332</span> }<a name="line.332"></a>
+<span class="sourceLineNo">333</span> }<a name="line.333"></a>
+<span class="sourceLineNo">334</span> }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span> // ============================================================================================<a name="line.336"></a>
+<span class="sourceLineNo">337</span> // Internals Helpers<a name="line.337"></a>
+<span class="sourceLineNo">338</span> // ============================================================================================<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span> /**<a name="line.340"></a>
+<span class="sourceLineNo">341</span> * Node that contains a set of RemoteProcedures<a name="line.341"></a>
+<span class="sourceLineNo">342</span> */<a name="line.342"></a>
+<span class="sourceLineNo">343</span> protected final class BufferNode extends DelayedContainerWithTimestamp<TRemote><a name="line.343"></a>
+<span class="sourceLineNo">344</span> implements RemoteNode<TEnv, TRemote> {<a name="line.344"></a>
+<span class="sourceLineNo">345</span> private Set<RemoteProcedure> operations;<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span> protected BufferNode(final TRemote key) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span> super(key, 0);<a name="line.348"></a>
+<span class="sourceLineNo">349</span> }<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span> @Override<a name="line.351"></a>
+<span class="sourceLineNo">352</span> public TRemote getKey() {<a name="line.352"></a>
+<span class="sourceLineNo">353</span> return getObject();<a name="line.353"></a>
+<span class="sourceLineNo">354</span> }<a name="line.354"></a>
+<span class="sourceLineNo">355</span><a name="line.355"></a>
+<span class="sourceLineNo">356</span> @Override<a name="line.356"></a>
+<span class="sourceLineNo">357</span> public synchronized void add(final RemoteProcedure operation) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span> if (this.operations == null) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span> this.operations = new HashSet<>();<a name="line.359"></a>
+<span class="sourceLineNo">360</span> setTimeout(EnvironmentEdgeManager.currentTime() + operationDelay);<a name="line.360"></a>
+<span class="sourceLineNo">361</span> timeoutExecutor.add(this);<a name="line.361"></a>
+<span class="sourceLineNo">362</span> }<a name="line.362"></a>
+<span class="sourceLineNo">363</span> this.operations.add(operation);<a name="line.363"></a>
+<span class="sourceLineNo">364</span> if (this.operations.size() > queueMaxSize) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span> timeoutExecutor.remove(this);<a name="line.365"></a>
+<span class="sourceLineNo">366</span> dispatch();<a name="line.366"></a>
+<span class="sourceLineNo">367</span> }<a name="line.367"></a>
+<span class="sourceLineNo">368</span> }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span> @Override<a name="line.370"></a>
+<span class="sourceLineNo">371</span> public synchronized void dispatch() {<a name="line.371"></a>
+<span class="sourceLineNo">372</span> if (operations != null) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> remoteDispatch(getKey(), operations);<a name="line.373"></a>
+<span class="sourceLineNo">374</span> this.operations = null;<a name="line.374"></a>
+<span class="sourceLineNo">375</span> }<a name="line.375"></a>
+<span class="sourceLineNo">376</span> }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span> public synchronized void abortOperationsInQueue() {<a name="line.378"></a>
+<span class="sourceLineNo">379</span> if (operations != null) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span> abortPendingOperations(getKey(), operations);<a name="line.380"></a>
+<span class="sourceLineNo">381</span> this.operations = null;<a name="line.381"></a>
+<span class="sourceLineNo">382</span> }<a name="line.382"></a>
+<span class="sourceLineNo">383</span> }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
+<span class="sourceLineNo">386</span> public String toString() {<a name="line.386"></a>
+<span class="sourceLineNo">387</span> return super.toString() + ", operations=" + this.operations;<a name="line.387"></a>
+<span class="sourceLineNo">388</span> }<a name="line.388"></a>
+<span class="sourceLineNo">389</span> }<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span> /**<a name="line.391"></a>
+<span class="sourceLineNo">392</span> * Delayed object that holds a FutureTask.<a name="line.392"></a>
+<span class="sourceLineNo">393</span> * used to submit something later to the thread-pool.<a name="line.393"></a>
+<span class="sourceLineNo">394</span> */<a name="line.394"></a>
+<span class="sourceLineNo">395</span> private static final class DelayedTask extends DelayedContainerWithTimestamp<FutureTask<Void>> {<a name="line.395"></a>
+<span class="sourceLineNo">396</span> public DelayedTask(final FutureTask<Void> task, final long delay, final TimeUnit unit) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span> super(task, EnvironmentEdgeManager.currentTime() + unit.toMillis(delay));<a name="line.397"></a>
+<span class="sourceLineNo">398</span> }<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>}<a name="line.400"></a>
[46/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html b/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html
index 0f40fe4..f4a02d0 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html
@@ -5216,39 +5216,43 @@ service.</div>
</tr>
<tr class="altColor">
<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
-<td class="colLast"><span class="typeNameLabel">StoreFileScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#delayedSeekKV">delayedSeekKV</a></span></code> </td>
+<td class="colLast"><span class="typeNameLabel">SnapshotSegmentScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#current">current</a></span></code> </td>
</tr>
<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
+<td class="colLast"><span class="typeNameLabel">StoreFileScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#delayedSeekKV">delayedSeekKV</a></span></code> </td>
+</tr>
+<tr class="altColor">
<td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
<td class="colLast"><span class="typeNameLabel">HRegion.RegionScannerImpl.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#joinedContinuationRow">joinedContinuationRow</a></span></code>
<div class="block">If the joined heap data gathering is interrupted due to scan limits, this will
contain the row for which we are populating the values.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
<td class="colLast"><span class="typeNameLabel">SegmentScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SegmentScanner.html#last">last</a></span></code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
<td class="colLast"><span class="typeNameLabel">StripeMultiFileWriter.BoundaryMultiWriter.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StripeMultiFileWriter.BoundaryMultiWriter.html#lastCell">lastCell</a></span></code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
<td class="colLast"><span class="typeNameLabel">StripeMultiFileWriter.SizeMultiWriter.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StripeMultiFileWriter.SizeMultiWriter.html#lastCell">lastCell</a></span></code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
<td class="colLast"><span class="typeNameLabel">ScannerContext.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#lastPeekedCell">lastPeekedCell</a></span></code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
<td class="colLast"><span class="typeNameLabel">KeyValueScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#NO_NEXT_INDEXED_KEY">NO_NEXT_INDEXED_KEY</a></span></code>
<div class="block">The byte array represents for NO_NEXT_INDEXED_KEY;
The actual value is irrelevant because this is always compared by reference.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
<td class="colLast"><span class="typeNameLabel">StoreScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#prevCell">prevCell</a></span></code> </td>
</tr>
@@ -5282,18 +5286,22 @@ service.</div>
<td class="colLast"><span class="typeNameLabel">SegmentScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SegmentScanner.html#iter">iter</a></span></code> </td>
</tr>
<tr class="rowColor">
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
+<td class="colLast"><span class="typeNameLabel">SnapshotSegmentScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#iter">iter</a></span></code> </td>
+</tr>
+<tr class="altColor">
<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">MemStoreCompactorSegmentsIterator.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactorSegmentsIterator.html#kvs">kvs</a></span></code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">MemStoreCompactorSegmentsIterator.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactorSegmentsIterator.html#kvsIterator">kvsIterator</a></span></code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">HStoreFile.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html#lastKey">lastKey</a></span></code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">HRegion.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html#MOCKED_LIST">MOCKED_LIST</a></span></code>
<div class="block">A mocked list implementation - discards all updates.</div>
@@ -5574,28 +5582,36 @@ service.</div>
</tr>
<tr class="rowColor">
<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
-<td class="colLast"><span class="typeNameLabel">KeyValueHeap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html#peek--">peek</a></span>()</code> </td>
+<td class="colLast"><span class="typeNameLabel">SnapshotSegmentScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#next--">next</a></span>()</code> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
+<td class="colLast"><span class="typeNameLabel">KeyValueHeap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html#peek--">peek</a></span>()</code> </td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
<td class="colLast"><span class="typeNameLabel">KeyValueScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#peek--">peek</a></span>()</code>
<div class="block">Look at the next Cell in this scanner, but do not iterate scanner.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
<td class="colLast"><span class="typeNameLabel">SegmentScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SegmentScanner.html#peek--">peek</a></span>()</code>
<div class="block">Look at the next Cell in this scanner, but do not iterate the scanner</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
<td class="colLast"><span class="typeNameLabel">StoreScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#peek--">peek</a></span>()</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
<td class="colLast"><span class="typeNameLabel">StoreFileScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#peek--">peek</a></span>()</code> </td>
</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
+<td class="colLast"><span class="typeNameLabel">SnapshotSegmentScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#peek--">peek</a></span>()</code> </td>
+</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
<td class="colLast"><span class="typeNameLabel">CellSet.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellSet.html#pollFirst--">pollFirst</a></span>()</code> </td>
@@ -5686,36 +5702,36 @@ service.</div>
<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#comparator--">comparator</a></span>()</code> </td>
</tr>
<tr class="altColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
+<td class="colLast"><span class="typeNameLabel">SnapshotSegmentScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#createIterator-org.apache.hadoop.hbase.regionserver.Segment-">createIterator</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Segment.html" title="class in org.apache.hadoop.hbase.regionserver">Segment</a> segment)</code> </td>
+</tr>
+<tr class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellSet.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellSet.html#descendingIterator--">descendingIterator</a></span>()</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#descendingKeySet--">descendingKeySet</a></span>()</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#descendingMap--">descendingMap</a></span>()</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#descendingMap--">descendingMap</a></span>()</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellSet.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellSet.html#descendingSet--">descendingSet</a></span>()</code> </td>
</tr>
-<tr class="rowColor">
-<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>>></code></td>
-<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#entrySet--">entrySet</a></span>()</code> </td>
-</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>>></code></td>
<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#entrySet--">entrySet</a></span>()</code> </td>
</tr>
<tr class="rowColor">
-<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
-<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#firstEntry--">firstEntry</a></span>()</code> </td>
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>>></code></td>
+<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#entrySet--">entrySet</a></span>()</code> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
@@ -5723,32 +5739,36 @@ service.</div>
</tr>
<tr class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
-<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#floorEntry-org.apache.hadoop.hbase.Cell-">floorEntry</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> k)</code> </td>
+<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#firstEntry--">firstEntry</a></span>()</code> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#floorEntry-org.apache.hadoop.hbase.Cell-">floorEntry</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> k)</code> </td>
</tr>
<tr class="rowColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
+<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#floorEntry-org.apache.hadoop.hbase.Cell-">floorEntry</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> k)</code> </td>
+</tr>
+<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">HRegion.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html#get-org.apache.hadoop.hbase.client.Get-boolean-">get</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a> get,
boolean withCoprocessor)</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">Region.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#get-org.apache.hadoop.hbase.client.Get-boolean-">get</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a> get,
boolean withCoprocessor)</code>
<div class="block">Do a get based on the get parameter.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">HRegion.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html#get-org.apache.hadoop.hbase.client.Get-boolean-long-long-">get</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a> get,
boolean withCoprocessor,
long nonceGroup,
long nonce)</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">HRegion.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html#get-org.apache.hadoop.hbase.client.Mutation-org.apache.hadoop.hbase.regionserver.HStore-java.util.List-org.apache.hadoop.hbase.client.IsolationLevel-org.apache.hadoop.hbase.io.TimeRange-">get</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a> mutation,
<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a> store,
@@ -5758,150 +5778,150 @@ service.</div>
<div class="block">Do a specific Get on passed <code>columnFamily</code> and column qualifiers.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>(package private) <a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellSet.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellSet.html#getDelegatee--">getDelegatee</a></span>()</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>(package private) <a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellSet.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellSet.html#getDelegatee--">getDelegatee</a></span>()</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">StoreFileReader.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileReader.html#getFirstKey--">getFirstKey</a></span>()</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">HStoreFile.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html#getFirstKey--">getFirstKey</a></span>()</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">StoreFile.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html#getFirstKey--">getFirstKey</a></span>()</code>
<div class="block">Get the first key in this store file.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">SegmentScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SegmentScanner.html#getIterator-org.apache.hadoop.hbase.Cell-">getIterator</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">StoreFileReader.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileReader.html#getLastKey--">getLastKey</a></span>()</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">HStoreFile.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html#getLastKey--">getLastKey</a></span>()</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">StoreFile.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html#getLastKey--">getLastKey</a></span>()</code>
<div class="block">Get the last key in this store file.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#headMap-org.apache.hadoop.hbase.Cell-">headMap</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> k)</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#headMap-org.apache.hadoop.hbase.Cell-">headMap</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> k)</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#headMap-org.apache.hadoop.hbase.Cell-boolean-">headMap</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> toKey,
boolean inclusive)</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#headMap-org.apache.hadoop.hbase.Cell-boolean-">headMap</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> toKey,
boolean inclusive)</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CompositeImmutableSegment.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html#headSet-org.apache.hadoop.hbase.Cell-">headSet</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstKeyOnRow)</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">Segment.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Segment.html#headSet-org.apache.hadoop.hbase.Cell-">headSet</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstKeyOnRow)</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellSet.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellSet.html#headSet-org.apache.hadoop.hbase.Cell-">headSet</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> toElement)</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellSet.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellSet.html#headSet-org.apache.hadoop.hbase.Cell-boolean-">headSet</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> toElement,
boolean inclusive)</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#higherEntry-org.apache.hadoop.hbase.Cell-">higherEntry</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> k)</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#higherEntry-org.apache.hadoop.hbase.Cell-">higherEntry</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> k)</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CompositeImmutableSegment.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html#iterator--">iterator</a></span>()</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">Segment.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Segment.html#iterator--">iterator</a></span>()</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellSet.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellSet.html#iterator--">iterator</a></span>()</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellFlatMap.CellFlatMapCollection.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.CellFlatMapCollection.html#iterator--">iterator</a></span>()</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#keySet--">keySet</a></span>()</code> </td>
</tr>
-<tr class="rowColor">
-<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
-<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#lastEntry--">lastEntry</a></span>()</code> </td>
-</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#lastEntry--">lastEntry</a></span>()</code> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
-<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#lowerEntry-org.apache.hadoop.hbase.Cell-">lowerEntry</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> k)</code> </td>
+<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#lastEntry--">lastEntry</a></span>()</code> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#lowerEntry-org.apache.hadoop.hbase.Cell-">lowerEntry</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> k)</code> </td>
</tr>
<tr class="rowColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
+<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#lowerEntry-org.apache.hadoop.hbase.Cell-">lowerEntry</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> k)</code> </td>
+</tr>
+<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">StoreFileReader.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileReader.html#midKey--">midKey</a></span>()</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#navigableKeySet--">navigableKeySet</a></span>()</code> </td>
</tr>
-<tr class="rowColor">
-<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
-<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#pollFirstEntry--">pollFirstEntry</a></span>()</code> </td>
-</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#pollFirstEntry--">pollFirstEntry</a></span>()</code> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
-<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#pollLastEntry--">pollLastEntry</a></span>()</code> </td>
+<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#pollFirstEntry--">pollFirstEntry</a></span>()</code> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#pollLastEntry--">pollLastEntry</a></span>()</code> </td>
</tr>
<tr class="rowColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
+<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#pollLastEntry--">pollLastEntry</a></span>()</code> </td>
+</tr>
+<tr class="altColor">
<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">HRegion.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html#reckonDeltasByStore-org.apache.hadoop.hbase.regionserver.HStore-org.apache.hadoop.hbase.regionserver.Region.Operation-org.apache.hadoop.hbase.client.Mutation-org.apache.hadoop.hbase.client.Durability-long-java.util.List-java.util.List-">reckonDeltasByStore</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a> store,
<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a> op,
@@ -5914,87 +5934,87 @@ service.</div>
column family/Store.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">HRegion.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html#sort-java.util.List-org.apache.hadoop.hbase.CellComparator-">sort</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>> cells,
<a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a> comparator)</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#subMap-org.apache.hadoop.hbase.Cell-boolean-org.apache.hadoop.hbase.Cell-boolean-">subMap</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> fromKey,
boolean fromInclusive,
<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> toKey,
boolean toInclusive)</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#subMap-org.apache.hadoop.hbase.Cell-boolean-org.apache.hadoop.hbase.Cell-boolean-">subMap</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> fromKey,
boolean fromInclusive,
<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> toKey,
boolean toInclusive)</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#subMap-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">subMap</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> k1,
<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> k2)</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#subMap-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">subMap</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> k1,
<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> k2)</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellSet.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellSet.html#subSet-org.apache.hadoop.hbase.Cell-boolean-org.apache.hadoop.hbase.Cell-boolean-">subSet</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> fromElement,
boolean fromInclusive,
<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> toElement,
boolean toInclusive)</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellSet.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellSet.html#subSet-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">subSet</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> fromElement,
<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> toElement)</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#tailMap-org.apache.hadoop.hbase.Cell-">tailMap</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> k)</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#tailMap-org.apache.hadoop.hbase.Cell-">tailMap</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> k)</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#tailMap-org.apache.hadoop.hbase.Cell-boolean-">tailMap</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> fromKey,
boolean inclusive)</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>,<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#tailMap-org.apache.hadoop.hbase.Cell-boolean-">tailMap</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> fromKey,
boolean inclusive)</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CompositeImmutableSegment.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html#tailSet-org.apache.hadoop.hbase.Cell-">tailSet</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstCell)</code>
<div class="block">Returns a subset of the segment cell set, which starts with the given cell</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">Segment.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Segment.html#tailSet-org.apache.hadoop.hbase.Cell-">tailSet</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstCell)</code>
<div class="block">Returns a subset of the segment cell set, which starts with the given cell</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellSet.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellSet.html#tailSet-org.apache.hadoop.hbase.Cell-">tailSet</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> fromElement)</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellSet.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellSet.html#tailSet-org.apache.hadoop.hbase.Cell-boolean-">tailSet</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> fromElement,
boolean inclusive)</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>></code></td>
<td class="colLast"><span class="typeNameLabel">CellFlatMap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellFlatMap.html#values--">values</a></span>()</code> </td>
</tr>
@@ -6638,25 +6658,29 @@ service.</div>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">ReversedStoreScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html#reseek-org.apache.hadoop.hbase.Cell-">reseek</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> kv)</code> </td>
+<td class="colLast"><span class="typeNameLabel">SnapshotSegmentScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#reseek-org.apache.hadoop.hbase.Cell-">reseek</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> seekCell)</code> </td>
</tr>
<tr class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">ReversedStoreScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html#reseek-org.apache.hadoop.hbase.Cell-">reseek</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> kv)</code> </td>
+</tr>
+<tr class="rowColor">
<td class="colFirst"><code>(package private) static boolean</code></td>
<td class="colLast"><span class="typeNameLabel">StoreFileScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#reseekAtOrAfter-org.apache.hadoop.hbase.io.hfile.HFileScanner-org.apache.hadoop.hbase.Cell-">reseekAtOrAfter</a></span>(<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanner.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileScanner</a> s,
<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> k)</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><span class="typeNameLabel">StoreScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#resetQueryMatcher-org.apache.hadoop.hbase.Cell-">resetQueryMatcher</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> lastTopKey)</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
<td class="colLast"><span class="typeNameLabel">HMobStore.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HMobStore.html#resolve-org.apache.hadoop.hbase.Cell-boolean-">resolve</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> reference,
boolean cacheBlocks)</code>
<div class="block">Reads the cell from the mob file, and the read point does not count.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
<td class="colLast"><span class="typeNameLabel">HMobStore.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HMobStore.html#resolve-org.apache.hadoop.hbase.Cell-boolean-long-boolean-">resolve</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> reference,
boolean cacheBlocks,
@@ -6665,7 +6689,7 @@ service.</div>
<div class="block">Reads the cell from the mob file.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><span class="typeNameLabel">HRegion.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html#restoreEdit-org.apache.hadoop.hbase.regionserver.HStore-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.regionserver.MemStoreSizing-">restoreEdit</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a> s,
<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell,
@@ -6673,50 +6697,54 @@ service.</div>
<div class="block">Used by tests</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><span class="typeNameLabel">StripeMultiFileWriter.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StripeMultiFileWriter.html#sanityCheckLeft-byte:A-org.apache.hadoop.hbase.Cell-">sanityCheckLeft</a></span>(byte[] left,
<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)</code>
<div class="block">Subclasses can call this method to make sure the first KV is within multi-writer range.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><span class="typeNameLabel">StripeMultiFileWriter.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StripeMultiFileWriter.html#sanityCheckRight-byte:A-org.apache.hadoop.hbase.Cell-">sanityCheckRight</a></span>(byte[] right,
<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)</code>
<div class="block">Subclasses can call this method to make sure the last KV is within multi-writer range.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><span class="typeNameLabel">KeyValueHeap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html#seek-org.apache.hadoop.hbase.Cell-">seek</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> seekKey)</code>
<div class="block">Seeks all scanners at or below the specified seek key.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><span class="typeNameLabel">ReversedKeyValueHeap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReversedKeyValueHeap.html#seek-org.apache.hadoop.hbase.Cell-">seek</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> seekKey)</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><span class="typeNameLabel">KeyValueScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#seek-org.apache.hadoop.hbase.Cell-">seek</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> key)</code>
<div class="block">Seek the scanner at or after the specified KeyValue.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><span class="typeNameLabel">SegmentScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SegmentScanner.html#seek-org.apache.hadoop.hbase.Cell-">seek</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)</code>
<div class="block">Seek the scanner at or after the specified Cell.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><span class="typeNameLabel">StoreScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#seek-org.apache.hadoop.hbase.Cell-">seek</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> key)</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><span class="typeNameLabel">StoreFileScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#seek-org.apache.hadoop.hbase.Cell-">seek</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> key)</code> </td>
</tr>
+<tr class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">SnapshotSegmentScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html#seek-org.apache.hadoop.hbase.Cell-">seek</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> seekCell)</code> </td>
+</tr>
<tr class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><span class="typeNameLabel">ReversedStoreScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html#seek-org.apache.hadoop.hbase.Cell-">seek</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> key)</code> </td>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/class-use/HBaseIOException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/HBaseIOException.html b/devapidocs/org/apache/hadoop/hbase/class-use/HBaseIOException.html
index 0253cde..411dc83 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/HBaseIOException.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/HBaseIOException.html
@@ -747,22 +747,6 @@
<!-- -->
</a>
<h3>Uses of <a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a> in <a href="../../../../../org/apache/hadoop/hbase/master/assignment/package-summary.html">org.apache.hadoop.hbase.master.assignment</a></h3>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing subclasses, and an explanation">
-<caption><span>Subclasses of <a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a> in <a href="../../../../../org/apache/hadoop/hbase/master/assignment/package-summary.html">org.apache.hadoop.hbase.master.assignment</a></span><span class="tabEnd"> </span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Class and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>class </code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.master.assignment">FailedRemoteDispatchException</a></span></code>
-<div class="block">Used internally signaling failed queue of a remote procedure
- operation.</div>
-</td>
-</tr>
-</tbody>
-</table>
<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
<caption><span>Methods in <a href="../../../../../org/apache/hadoop/hbase/master/assignment/package-summary.html">org.apache.hadoop.hbase.master.assignment</a> that throw <a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></span><span class="tabEnd"> </span></caption>
<tr>
@@ -1003,6 +987,31 @@
<td class="colFirst"><code>class </code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/BadProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2">BadProcedureException</a></span></code> </td>
</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>class </code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">FailedRemoteDispatchException</a></span></code>
+<div class="block">Used internally signaling failed queue of a remote procedure
+ operation.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>class </code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NoNodeDispatchException</a></span></code>
+<div class="block">Used internally signaling failed queue of a remote procedure operation.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>class </code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NoServerDispatchException</a></span></code>
+<div class="block">Used internally signaling failed queue of a remote procedure operation.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>class </code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NullTargetServerDispatchException</a></span></code>
+<div class="block">Used internally signaling failed queue of a remote procedure operation.</div>
+</td>
+</tr>
</tbody>
</table>
</li>
[19/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.AssignmentProcedureEvent.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.AssignmentProcedureEvent.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.AssignmentProcedureEvent.html
index 5420d82..6ea3672 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.AssignmentProcedureEvent.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.AssignmentProcedureEvent.html
@@ -316,687 +316,728 @@
<span class="sourceLineNo">308</span> }<a name="line.308"></a>
<span class="sourceLineNo">309</span> }<a name="line.309"></a>
<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span> public enum ServerState { ONLINE, SPLITTING, OFFLINE }<a name="line.311"></a>
-<span class="sourceLineNo">312</span> public static class ServerStateNode implements Comparable<ServerStateNode> {<a name="line.312"></a>
-<span class="sourceLineNo">313</span> private final ServerReportEvent reportEvent;<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> private final Set<RegionStateNode> regions;<a name="line.315"></a>
-<span class="sourceLineNo">316</span> private final ServerName serverName;<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span> private volatile ServerState state = ServerState.ONLINE;<a name="line.318"></a>
-<span class="sourceLineNo">319</span> private volatile int versionNumber = 0;<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span> public ServerStateNode(final ServerName serverName) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span> this.serverName = serverName;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> this.regions = ConcurrentHashMap.newKeySet();<a name="line.323"></a>
-<span class="sourceLineNo">324</span> this.reportEvent = new ServerReportEvent(serverName);<a name="line.324"></a>
-<span class="sourceLineNo">325</span> }<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> public ServerName getServerName() {<a name="line.327"></a>
-<span class="sourceLineNo">328</span> return serverName;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> }<a name="line.329"></a>
+<span class="sourceLineNo">311</span> /**<a name="line.311"></a>
+<span class="sourceLineNo">312</span> * Server State.<a name="line.312"></a>
+<span class="sourceLineNo">313</span> */<a name="line.313"></a>
+<span class="sourceLineNo">314</span> public enum ServerState {<a name="line.314"></a>
+<span class="sourceLineNo">315</span> /**<a name="line.315"></a>
+<span class="sourceLineNo">316</span> * Initial state. Available.<a name="line.316"></a>
+<span class="sourceLineNo">317</span> */<a name="line.317"></a>
+<span class="sourceLineNo">318</span> ONLINE,<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span> /**<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * Server expired/crashed. Currently undergoing WAL splitting.<a name="line.321"></a>
+<span class="sourceLineNo">322</span> */<a name="line.322"></a>
+<span class="sourceLineNo">323</span> SPLITTING,<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span> /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * WAL splitting done.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> */<a name="line.327"></a>
+<span class="sourceLineNo">328</span> OFFLINE<a name="line.328"></a>
+<span class="sourceLineNo">329</span> }<a name="line.329"></a>
<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> public ServerState getState() {<a name="line.331"></a>
-<span class="sourceLineNo">332</span> return state;<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> public int getVersionNumber() {<a name="line.335"></a>
-<span class="sourceLineNo">336</span> return versionNumber;<a name="line.336"></a>
-<span class="sourceLineNo">337</span> }<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span> public ProcedureEvent<?> getReportEvent() {<a name="line.339"></a>
-<span class="sourceLineNo">340</span> return reportEvent;<a name="line.340"></a>
-<span class="sourceLineNo">341</span> }<a name="line.341"></a>
+<span class="sourceLineNo">331</span> /**<a name="line.331"></a>
+<span class="sourceLineNo">332</span> * State of Server; list of hosted regions, etc.<a name="line.332"></a>
+<span class="sourceLineNo">333</span> */<a name="line.333"></a>
+<span class="sourceLineNo">334</span> public static class ServerStateNode implements Comparable<ServerStateNode> {<a name="line.334"></a>
+<span class="sourceLineNo">335</span> private final ServerReportEvent reportEvent;<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> private final Set<RegionStateNode> regions;<a name="line.337"></a>
+<span class="sourceLineNo">338</span> private final ServerName serverName;<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span> private volatile ServerState state = ServerState.ONLINE;<a name="line.340"></a>
+<span class="sourceLineNo">341</span> private volatile int versionNumber = 0;<a name="line.341"></a>
<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span> public boolean isInState(final ServerState... expected) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span> boolean expectedState = false;<a name="line.344"></a>
-<span class="sourceLineNo">345</span> if (expected != null) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span> for (int i = 0; i < expected.length; ++i) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> expectedState |= (state == expected[i]);<a name="line.347"></a>
-<span class="sourceLineNo">348</span> }<a name="line.348"></a>
-<span class="sourceLineNo">349</span> }<a name="line.349"></a>
-<span class="sourceLineNo">350</span> return expectedState;<a name="line.350"></a>
+<span class="sourceLineNo">343</span> public ServerStateNode(final ServerName serverName) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span> this.serverName = serverName;<a name="line.344"></a>
+<span class="sourceLineNo">345</span> this.regions = ConcurrentHashMap.newKeySet();<a name="line.345"></a>
+<span class="sourceLineNo">346</span> this.reportEvent = new ServerReportEvent(serverName);<a name="line.346"></a>
+<span class="sourceLineNo">347</span> }<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span> public ServerName getServerName() {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> return serverName;<a name="line.350"></a>
<span class="sourceLineNo">351</span> }<a name="line.351"></a>
<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span> public void setState(final ServerState state) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span> this.state = state;<a name="line.354"></a>
+<span class="sourceLineNo">353</span> public ServerState getState() {<a name="line.353"></a>
+<span class="sourceLineNo">354</span> return state;<a name="line.354"></a>
<span class="sourceLineNo">355</span> }<a name="line.355"></a>
<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span> public void setVersionNumber(final int versionNumber) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> this.versionNumber = versionNumber;<a name="line.358"></a>
+<span class="sourceLineNo">357</span> public int getVersionNumber() {<a name="line.357"></a>
+<span class="sourceLineNo">358</span> return versionNumber;<a name="line.358"></a>
<span class="sourceLineNo">359</span> }<a name="line.359"></a>
<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span> public Set<RegionStateNode> getRegions() {<a name="line.361"></a>
-<span class="sourceLineNo">362</span> return regions;<a name="line.362"></a>
+<span class="sourceLineNo">361</span> public ProcedureEvent<?> getReportEvent() {<a name="line.361"></a>
+<span class="sourceLineNo">362</span> return reportEvent;<a name="line.362"></a>
<span class="sourceLineNo">363</span> }<a name="line.363"></a>
<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span> public int getRegionCount() {<a name="line.365"></a>
-<span class="sourceLineNo">366</span> return regions.size();<a name="line.366"></a>
+<span class="sourceLineNo">365</span> public boolean isOffline() {<a name="line.365"></a>
+<span class="sourceLineNo">366</span> return this.state.equals(ServerState.OFFLINE);<a name="line.366"></a>
<span class="sourceLineNo">367</span> }<a name="line.367"></a>
<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span> public ArrayList<RegionInfo> getRegionInfoList() {<a name="line.369"></a>
-<span class="sourceLineNo">370</span> ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(regions.size());<a name="line.370"></a>
-<span class="sourceLineNo">371</span> for (RegionStateNode region: regions) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span> hris.add(region.getRegionInfo());<a name="line.372"></a>
-<span class="sourceLineNo">373</span> }<a name="line.373"></a>
-<span class="sourceLineNo">374</span> return hris;<a name="line.374"></a>
-<span class="sourceLineNo">375</span> }<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span> public void addRegion(final RegionStateNode regionNode) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span> this.regions.add(regionNode);<a name="line.378"></a>
-<span class="sourceLineNo">379</span> }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span> public void removeRegion(final RegionStateNode regionNode) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span> this.regions.remove(regionNode);<a name="line.382"></a>
-<span class="sourceLineNo">383</span> }<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public int compareTo(final ServerStateNode other) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> return getServerName().compareTo(other.getServerName());<a name="line.387"></a>
-<span class="sourceLineNo">388</span> }<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span> @Override<a name="line.390"></a>
-<span class="sourceLineNo">391</span> public int hashCode() {<a name="line.391"></a>
-<span class="sourceLineNo">392</span> return getServerName().hashCode();<a name="line.392"></a>
+<span class="sourceLineNo">369</span> public boolean isInState(final ServerState... expected) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span> boolean expectedState = false;<a name="line.370"></a>
+<span class="sourceLineNo">371</span> if (expected != null) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span> for (int i = 0; i < expected.length; ++i) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> expectedState |= (state == expected[i]);<a name="line.373"></a>
+<span class="sourceLineNo">374</span> }<a name="line.374"></a>
+<span class="sourceLineNo">375</span> }<a name="line.375"></a>
+<span class="sourceLineNo">376</span> return expectedState;<a name="line.376"></a>
+<span class="sourceLineNo">377</span> }<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span> public void setState(final ServerState state) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span> this.state = state;<a name="line.380"></a>
+<span class="sourceLineNo">381</span> }<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span> public void setVersionNumber(final int versionNumber) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span> this.versionNumber = versionNumber;<a name="line.384"></a>
+<span class="sourceLineNo">385</span> }<a name="line.385"></a>
+<span class="sourceLineNo">386</span><a name="line.386"></a>
+<span class="sourceLineNo">387</span> public Set<RegionStateNode> getRegions() {<a name="line.387"></a>
+<span class="sourceLineNo">388</span> return regions;<a name="line.388"></a>
+<span class="sourceLineNo">389</span> }<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span> public int getRegionCount() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span> return regions.size();<a name="line.392"></a>
<span class="sourceLineNo">393</span> }<a name="line.393"></a>
<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
-<span class="sourceLineNo">396</span> public boolean equals(final Object other) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span> if (this == other) return true;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> if (!(other instanceof ServerStateNode)) return false;<a name="line.398"></a>
-<span class="sourceLineNo">399</span> return compareTo((ServerStateNode)other) == 0;<a name="line.399"></a>
-<span class="sourceLineNo">400</span> }<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span> @Override<a name="line.402"></a>
-<span class="sourceLineNo">403</span> public String toString() {<a name="line.403"></a>
-<span class="sourceLineNo">404</span> return String.format("ServerStateNode(%s)", getServerName());<a name="line.404"></a>
+<span class="sourceLineNo">395</span> public ArrayList<RegionInfo> getRegionInfoList() {<a name="line.395"></a>
+<span class="sourceLineNo">396</span> ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(regions.size());<a name="line.396"></a>
+<span class="sourceLineNo">397</span> for (RegionStateNode region: regions) {<a name="line.397"></a>
+<span class="sourceLineNo">398</span> hris.add(region.getRegionInfo());<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span> return hris;<a name="line.400"></a>
+<span class="sourceLineNo">401</span> }<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span> public void addRegion(final RegionStateNode regionNode) {<a name="line.403"></a>
+<span class="sourceLineNo">404</span> this.regions.add(regionNode);<a name="line.404"></a>
<span class="sourceLineNo">405</span> }<a name="line.405"></a>
-<span class="sourceLineNo">406</span> }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span> public final static RegionStateStampComparator REGION_STATE_STAMP_COMPARATOR =<a name="line.408"></a>
-<span class="sourceLineNo">409</span> new RegionStateStampComparator();<a name="line.409"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span> public void removeRegion(final RegionStateNode regionNode) {<a name="line.407"></a>
+<span class="sourceLineNo">408</span> this.regions.remove(regionNode);<a name="line.408"></a>
+<span class="sourceLineNo">409</span> }<a name="line.409"></a>
<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span> // TODO: Replace the ConcurrentSkipListMaps<a name="line.411"></a>
-<span class="sourceLineNo">412</span> /**<a name="line.412"></a>
-<span class="sourceLineNo">413</span> * RegionName -- i.e. RegionInfo.getRegionName() -- as bytes to {@link RegionStateNode}<a name="line.413"></a>
-<span class="sourceLineNo">414</span> */<a name="line.414"></a>
-<span class="sourceLineNo">415</span> private final ConcurrentSkipListMap<byte[], RegionStateNode> regionsMap =<a name="line.415"></a>
-<span class="sourceLineNo">416</span> new ConcurrentSkipListMap<byte[], RegionStateNode>(Bytes.BYTES_COMPARATOR);<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionInTransition =<a name="line.418"></a>
-<span class="sourceLineNo">419</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>(RegionInfo.COMPARATOR);<a name="line.419"></a>
+<span class="sourceLineNo">411</span> @Override<a name="line.411"></a>
+<span class="sourceLineNo">412</span> public int compareTo(final ServerStateNode other) {<a name="line.412"></a>
+<span class="sourceLineNo">413</span> return getServerName().compareTo(other.getServerName());<a name="line.413"></a>
+<span class="sourceLineNo">414</span> }<a name="line.414"></a>
+<span class="sourceLineNo">415</span><a name="line.415"></a>
+<span class="sourceLineNo">416</span> @Override<a name="line.416"></a>
+<span class="sourceLineNo">417</span> public int hashCode() {<a name="line.417"></a>
+<span class="sourceLineNo">418</span> return getServerName().hashCode();<a name="line.418"></a>
+<span class="sourceLineNo">419</span> }<a name="line.419"></a>
<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span> /**<a name="line.421"></a>
-<span class="sourceLineNo">422</span> * Regions marked as offline on a read of hbase:meta. Unused or at least, once<a name="line.422"></a>
-<span class="sourceLineNo">423</span> * offlined, regions have no means of coming on line again. TODO.<a name="line.423"></a>
-<span class="sourceLineNo">424</span> */<a name="line.424"></a>
-<span class="sourceLineNo">425</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionOffline =<a name="line.425"></a>
-<span class="sourceLineNo">426</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>();<a name="line.426"></a>
+<span class="sourceLineNo">421</span> @Override<a name="line.421"></a>
+<span class="sourceLineNo">422</span> public boolean equals(final Object other) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span> if (this == other) return true;<a name="line.423"></a>
+<span class="sourceLineNo">424</span> if (!(other instanceof ServerStateNode)) return false;<a name="line.424"></a>
+<span class="sourceLineNo">425</span> return compareTo((ServerStateNode)other) == 0;<a name="line.425"></a>
+<span class="sourceLineNo">426</span> }<a name="line.426"></a>
<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span> private final ConcurrentSkipListMap<byte[], RegionFailedOpen> regionFailedOpen =<a name="line.428"></a>
-<span class="sourceLineNo">429</span> new ConcurrentSkipListMap<byte[], RegionFailedOpen>(Bytes.BYTES_COMPARATOR);<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span> private final ConcurrentHashMap<ServerName, ServerStateNode> serverMap =<a name="line.431"></a>
-<span class="sourceLineNo">432</span> new ConcurrentHashMap<ServerName, ServerStateNode>();<a name="line.432"></a>
+<span class="sourceLineNo">428</span> @Override<a name="line.428"></a>
+<span class="sourceLineNo">429</span> public String toString() {<a name="line.429"></a>
+<span class="sourceLineNo">430</span> return String.format("ServerStateNode(%s)", getServerName());<a name="line.430"></a>
+<span class="sourceLineNo">431</span> }<a name="line.431"></a>
+<span class="sourceLineNo">432</span> }<a name="line.432"></a>
<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span> public RegionStates() { }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> public void clear() {<a name="line.436"></a>
-<span class="sourceLineNo">437</span> regionsMap.clear();<a name="line.437"></a>
-<span class="sourceLineNo">438</span> regionInTransition.clear();<a name="line.438"></a>
-<span class="sourceLineNo">439</span> regionOffline.clear();<a name="line.439"></a>
-<span class="sourceLineNo">440</span> serverMap.clear();<a name="line.440"></a>
-<span class="sourceLineNo">441</span> }<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span> @VisibleForTesting<a name="line.443"></a>
-<span class="sourceLineNo">444</span> public boolean isRegionInRegionStates(final RegionInfo hri) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span> return (regionsMap.containsKey(hri.getRegionName()) || regionInTransition.containsKey(hri)<a name="line.445"></a>
-<span class="sourceLineNo">446</span> || regionOffline.containsKey(hri));<a name="line.446"></a>
-<span class="sourceLineNo">447</span> }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span> // ==========================================================================<a name="line.449"></a>
-<span class="sourceLineNo">450</span> // RegionStateNode helpers<a name="line.450"></a>
-<span class="sourceLineNo">451</span> // ==========================================================================<a name="line.451"></a>
-<span class="sourceLineNo">452</span> protected RegionStateNode createRegionStateNode(final RegionInfo regionInfo) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> RegionStateNode newNode = new RegionStateNode(regionInfo);<a name="line.453"></a>
-<span class="sourceLineNo">454</span> RegionStateNode oldNode = regionsMap.putIfAbsent(regionInfo.getRegionName(), newNode);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> return oldNode != null ? oldNode : newNode;<a name="line.455"></a>
-<span class="sourceLineNo">456</span> }<a name="line.456"></a>
-<span class="sourceLineNo">457</span><a name="line.457"></a>
-<span class="sourceLineNo">458</span> protected RegionStateNode getOrCreateRegionStateNode(final RegionInfo regionInfo) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> RegionStateNode node = regionsMap.get(regionInfo.getRegionName());<a name="line.459"></a>
-<span class="sourceLineNo">460</span> return node != null ? node : createRegionStateNode(regionInfo);<a name="line.460"></a>
-<span class="sourceLineNo">461</span> }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span> RegionStateNode getRegionStateNodeFromName(final byte[] regionName) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span> return regionsMap.get(regionName);<a name="line.464"></a>
-<span class="sourceLineNo">465</span> }<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span> protected RegionStateNode getRegionStateNode(final RegionInfo regionInfo) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span> return getRegionStateNodeFromName(regionInfo.getRegionName());<a name="line.468"></a>
-<span class="sourceLineNo">469</span> }<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span> public void deleteRegion(final RegionInfo regionInfo) {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> regionsMap.remove(regionInfo.getRegionName());<a name="line.472"></a>
-<span class="sourceLineNo">473</span> // Remove from the offline regions map too if there.<a name="line.473"></a>
-<span class="sourceLineNo">474</span> if (this.regionOffline.containsKey(regionInfo)) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span> if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> this.regionOffline.remove(regionInfo);<a name="line.476"></a>
-<span class="sourceLineNo">477</span> }<a name="line.477"></a>
-<span class="sourceLineNo">478</span> }<a name="line.478"></a>
-<span class="sourceLineNo">479</span><a name="line.479"></a>
-<span class="sourceLineNo">480</span> ArrayList<RegionStateNode> getTableRegionStateNodes(final TableName tableName) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span> final ArrayList<RegionStateNode> regions = new ArrayList<RegionStateNode>();<a name="line.481"></a>
-<span class="sourceLineNo">482</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span> if (!node.getTable().equals(tableName)) break;<a name="line.483"></a>
-<span class="sourceLineNo">484</span> regions.add(node);<a name="line.484"></a>
-<span class="sourceLineNo">485</span> }<a name="line.485"></a>
-<span class="sourceLineNo">486</span> return regions;<a name="line.486"></a>
+<span class="sourceLineNo">434</span> public final static RegionStateStampComparator REGION_STATE_STAMP_COMPARATOR =<a name="line.434"></a>
+<span class="sourceLineNo">435</span> new RegionStateStampComparator();<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span> // TODO: Replace the ConcurrentSkipListMaps<a name="line.437"></a>
+<span class="sourceLineNo">438</span> /**<a name="line.438"></a>
+<span class="sourceLineNo">439</span> * RegionName -- i.e. RegionInfo.getRegionName() -- as bytes to {@link RegionStateNode}<a name="line.439"></a>
+<span class="sourceLineNo">440</span> */<a name="line.440"></a>
+<span class="sourceLineNo">441</span> private final ConcurrentSkipListMap<byte[], RegionStateNode> regionsMap =<a name="line.441"></a>
+<span class="sourceLineNo">442</span> new ConcurrentSkipListMap<byte[], RegionStateNode>(Bytes.BYTES_COMPARATOR);<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionInTransition =<a name="line.444"></a>
+<span class="sourceLineNo">445</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>(RegionInfo.COMPARATOR);<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span> /**<a name="line.447"></a>
+<span class="sourceLineNo">448</span> * Regions marked as offline on a read of hbase:meta. Unused or at least, once<a name="line.448"></a>
+<span class="sourceLineNo">449</span> * offlined, regions have no means of coming on line again. TODO.<a name="line.449"></a>
+<span class="sourceLineNo">450</span> */<a name="line.450"></a>
+<span class="sourceLineNo">451</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionOffline =<a name="line.451"></a>
+<span class="sourceLineNo">452</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>();<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span> private final ConcurrentSkipListMap<byte[], RegionFailedOpen> regionFailedOpen =<a name="line.454"></a>
+<span class="sourceLineNo">455</span> new ConcurrentSkipListMap<byte[], RegionFailedOpen>(Bytes.BYTES_COMPARATOR);<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span> private final ConcurrentHashMap<ServerName, ServerStateNode> serverMap =<a name="line.457"></a>
+<span class="sourceLineNo">458</span> new ConcurrentHashMap<ServerName, ServerStateNode>();<a name="line.458"></a>
+<span class="sourceLineNo">459</span><a name="line.459"></a>
+<span class="sourceLineNo">460</span> public RegionStates() { }<a name="line.460"></a>
+<span class="sourceLineNo">461</span><a name="line.461"></a>
+<span class="sourceLineNo">462</span> public void clear() {<a name="line.462"></a>
+<span class="sourceLineNo">463</span> regionsMap.clear();<a name="line.463"></a>
+<span class="sourceLineNo">464</span> regionInTransition.clear();<a name="line.464"></a>
+<span class="sourceLineNo">465</span> regionOffline.clear();<a name="line.465"></a>
+<span class="sourceLineNo">466</span> serverMap.clear();<a name="line.466"></a>
+<span class="sourceLineNo">467</span> }<a name="line.467"></a>
+<span class="sourceLineNo">468</span><a name="line.468"></a>
+<span class="sourceLineNo">469</span> @VisibleForTesting<a name="line.469"></a>
+<span class="sourceLineNo">470</span> public boolean isRegionInRegionStates(final RegionInfo hri) {<a name="line.470"></a>
+<span class="sourceLineNo">471</span> return (regionsMap.containsKey(hri.getRegionName()) || regionInTransition.containsKey(hri)<a name="line.471"></a>
+<span class="sourceLineNo">472</span> || regionOffline.containsKey(hri));<a name="line.472"></a>
+<span class="sourceLineNo">473</span> }<a name="line.473"></a>
+<span class="sourceLineNo">474</span><a name="line.474"></a>
+<span class="sourceLineNo">475</span> // ==========================================================================<a name="line.475"></a>
+<span class="sourceLineNo">476</span> // RegionStateNode helpers<a name="line.476"></a>
+<span class="sourceLineNo">477</span> // ==========================================================================<a name="line.477"></a>
+<span class="sourceLineNo">478</span> protected RegionStateNode createRegionStateNode(final RegionInfo regionInfo) {<a name="line.478"></a>
+<span class="sourceLineNo">479</span> RegionStateNode newNode = new RegionStateNode(regionInfo);<a name="line.479"></a>
+<span class="sourceLineNo">480</span> RegionStateNode oldNode = regionsMap.putIfAbsent(regionInfo.getRegionName(), newNode);<a name="line.480"></a>
+<span class="sourceLineNo">481</span> return oldNode != null ? oldNode : newNode;<a name="line.481"></a>
+<span class="sourceLineNo">482</span> }<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span> protected RegionStateNode getOrCreateRegionStateNode(final RegionInfo regionInfo) {<a name="line.484"></a>
+<span class="sourceLineNo">485</span> RegionStateNode node = regionsMap.get(regionInfo.getRegionName());<a name="line.485"></a>
+<span class="sourceLineNo">486</span> return node != null ? node : createRegionStateNode(regionInfo);<a name="line.486"></a>
<span class="sourceLineNo">487</span> }<a name="line.487"></a>
<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span> ArrayList<RegionState> getTableRegionStates(final TableName tableName) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>();<a name="line.490"></a>
-<span class="sourceLineNo">491</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span> if (!node.getTable().equals(tableName)) break;<a name="line.492"></a>
-<span class="sourceLineNo">493</span> regions.add(node.toRegionState());<a name="line.493"></a>
-<span class="sourceLineNo">494</span> }<a name="line.494"></a>
-<span class="sourceLineNo">495</span> return regions;<a name="line.495"></a>
-<span class="sourceLineNo">496</span> }<a name="line.496"></a>
-<span class="sourceLineNo">497</span><a name="line.497"></a>
-<span class="sourceLineNo">498</span> ArrayList<RegionInfo> getTableRegionsInfo(final TableName tableName) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span> final ArrayList<RegionInfo> regions = new ArrayList<RegionInfo>();<a name="line.499"></a>
-<span class="sourceLineNo">500</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span> if (!node.getTable().equals(tableName)) break;<a name="line.501"></a>
-<span class="sourceLineNo">502</span> regions.add(node.getRegionInfo());<a name="line.502"></a>
+<span class="sourceLineNo">489</span> RegionStateNode getRegionStateNodeFromName(final byte[] regionName) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span> return regionsMap.get(regionName);<a name="line.490"></a>
+<span class="sourceLineNo">491</span> }<a name="line.491"></a>
+<span class="sourceLineNo">492</span><a name="line.492"></a>
+<span class="sourceLineNo">493</span> protected RegionStateNode getRegionStateNode(final RegionInfo regionInfo) {<a name="line.493"></a>
+<span class="sourceLineNo">494</span> return getRegionStateNodeFromName(regionInfo.getRegionName());<a name="line.494"></a>
+<span class="sourceLineNo">495</span> }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span> public void deleteRegion(final RegionInfo regionInfo) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span> regionsMap.remove(regionInfo.getRegionName());<a name="line.498"></a>
+<span class="sourceLineNo">499</span> // Remove from the offline regions map too if there.<a name="line.499"></a>
+<span class="sourceLineNo">500</span> if (this.regionOffline.containsKey(regionInfo)) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span> if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.501"></a>
+<span class="sourceLineNo">502</span> this.regionOffline.remove(regionInfo);<a name="line.502"></a>
<span class="sourceLineNo">503</span> }<a name="line.503"></a>
-<span class="sourceLineNo">504</span> return regions;<a name="line.504"></a>
-<span class="sourceLineNo">505</span> }<a name="line.505"></a>
-<span class="sourceLineNo">506</span><a name="line.506"></a>
-<span class="sourceLineNo">507</span> Collection<RegionStateNode> getRegionStateNodes() {<a name="line.507"></a>
-<span class="sourceLineNo">508</span> return regionsMap.values();<a name="line.508"></a>
-<span class="sourceLineNo">509</span> }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span> public ArrayList<RegionState> getRegionStates() {<a name="line.511"></a>
-<span class="sourceLineNo">512</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>(regionsMap.size());<a name="line.512"></a>
-<span class="sourceLineNo">513</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span> regions.add(node.toRegionState());<a name="line.514"></a>
-<span class="sourceLineNo">515</span> }<a name="line.515"></a>
-<span class="sourceLineNo">516</span> return regions;<a name="line.516"></a>
-<span class="sourceLineNo">517</span> }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span> // ==========================================================================<a name="line.519"></a>
-<span class="sourceLineNo">520</span> // RegionState helpers<a name="line.520"></a>
-<span class="sourceLineNo">521</span> // ==========================================================================<a name="line.521"></a>
-<span class="sourceLineNo">522</span> public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span> RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.523"></a>
-<span class="sourceLineNo">524</span> return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.524"></a>
-<span class="sourceLineNo">525</span> }<a name="line.525"></a>
-<span class="sourceLineNo">526</span><a name="line.526"></a>
-<span class="sourceLineNo">527</span> public RegionState getRegionState(final String encodedRegionName) {<a name="line.527"></a>
-<span class="sourceLineNo">528</span> // TODO: Need a map <encodedName, ...> but it is just dispatch merge...<a name="line.528"></a>
-<span class="sourceLineNo">529</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.529"></a>
-<span class="sourceLineNo">530</span> if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span> return node.toRegionState();<a name="line.531"></a>
-<span class="sourceLineNo">532</span> }<a name="line.532"></a>
-<span class="sourceLineNo">533</span> }<a name="line.533"></a>
-<span class="sourceLineNo">534</span> return null;<a name="line.534"></a>
+<span class="sourceLineNo">504</span> }<a name="line.504"></a>
+<span class="sourceLineNo">505</span><a name="line.505"></a>
+<span class="sourceLineNo">506</span> ArrayList<RegionStateNode> getTableRegionStateNodes(final TableName tableName) {<a name="line.506"></a>
+<span class="sourceLineNo">507</span> final ArrayList<RegionStateNode> regions = new ArrayList<RegionStateNode>();<a name="line.507"></a>
+<span class="sourceLineNo">508</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.508"></a>
+<span class="sourceLineNo">509</span> if (!node.getTable().equals(tableName)) break;<a name="line.509"></a>
+<span class="sourceLineNo">510</span> regions.add(node);<a name="line.510"></a>
+<span class="sourceLineNo">511</span> }<a name="line.511"></a>
+<span class="sourceLineNo">512</span> return regions;<a name="line.512"></a>
+<span class="sourceLineNo">513</span> }<a name="line.513"></a>
+<span class="sourceLineNo">514</span><a name="line.514"></a>
+<span class="sourceLineNo">515</span> ArrayList<RegionState> getTableRegionStates(final TableName tableName) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>();<a name="line.516"></a>
+<span class="sourceLineNo">517</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.517"></a>
+<span class="sourceLineNo">518</span> if (!node.getTable().equals(tableName)) break;<a name="line.518"></a>
+<span class="sourceLineNo">519</span> regions.add(node.toRegionState());<a name="line.519"></a>
+<span class="sourceLineNo">520</span> }<a name="line.520"></a>
+<span class="sourceLineNo">521</span> return regions;<a name="line.521"></a>
+<span class="sourceLineNo">522</span> }<a name="line.522"></a>
+<span class="sourceLineNo">523</span><a name="line.523"></a>
+<span class="sourceLineNo">524</span> ArrayList<RegionInfo> getTableRegionsInfo(final TableName tableName) {<a name="line.524"></a>
+<span class="sourceLineNo">525</span> final ArrayList<RegionInfo> regions = new ArrayList<RegionInfo>();<a name="line.525"></a>
+<span class="sourceLineNo">526</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span> if (!node.getTable().equals(tableName)) break;<a name="line.527"></a>
+<span class="sourceLineNo">528</span> regions.add(node.getRegionInfo());<a name="line.528"></a>
+<span class="sourceLineNo">529</span> }<a name="line.529"></a>
+<span class="sourceLineNo">530</span> return regions;<a name="line.530"></a>
+<span class="sourceLineNo">531</span> }<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span> Collection<RegionStateNode> getRegionStateNodes() {<a name="line.533"></a>
+<span class="sourceLineNo">534</span> return regionsMap.values();<a name="line.534"></a>
<span class="sourceLineNo">535</span> }<a name="line.535"></a>
<span class="sourceLineNo">536</span><a name="line.536"></a>
-<span class="sourceLineNo">537</span> // ============================================================================================<a name="line.537"></a>
-<span class="sourceLineNo">538</span> // TODO: helpers<a name="line.538"></a>
-<span class="sourceLineNo">539</span> // ============================================================================================<a name="line.539"></a>
-<span class="sourceLineNo">540</span> public boolean hasTableRegionStates(final TableName tableName) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span> // TODO<a name="line.541"></a>
-<span class="sourceLineNo">542</span> return !getTableRegionStates(tableName).isEmpty();<a name="line.542"></a>
+<span class="sourceLineNo">537</span> public ArrayList<RegionState> getRegionStates() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>(regionsMap.size());<a name="line.538"></a>
+<span class="sourceLineNo">539</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span> regions.add(node.toRegionState());<a name="line.540"></a>
+<span class="sourceLineNo">541</span> }<a name="line.541"></a>
+<span class="sourceLineNo">542</span> return regions;<a name="line.542"></a>
<span class="sourceLineNo">543</span> }<a name="line.543"></a>
<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span> /**<a name="line.545"></a>
-<span class="sourceLineNo">546</span> * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.546"></a>
-<span class="sourceLineNo">547</span> */<a name="line.547"></a>
-<span class="sourceLineNo">548</span> public List<RegionInfo> getRegionsOfTable(final TableName table) {<a name="line.548"></a>
-<span class="sourceLineNo">549</span> return getRegionsOfTable(table, false);<a name="line.549"></a>
-<span class="sourceLineNo">550</span> }<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span> /**<a name="line.552"></a>
-<span class="sourceLineNo">553</span> * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.553"></a>
-<span class="sourceLineNo">554</span> * <code>offline</code> to true. Does not include regions that are in the<a name="line.554"></a>
-<span class="sourceLineNo">555</span> * {@link State#SPLIT} state.<a name="line.555"></a>
-<span class="sourceLineNo">556</span> */<a name="line.556"></a>
-<span class="sourceLineNo">557</span> public List<RegionInfo> getRegionsOfTable(final TableName table, final boolean offline) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span> final ArrayList<RegionStateNode> nodes = getTableRegionStateNodes(table);<a name="line.558"></a>
-<span class="sourceLineNo">559</span> final ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(nodes.size());<a name="line.559"></a>
-<span class="sourceLineNo">560</span> for (RegionStateNode node: nodes) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span> if (include(node, offline)) hris.add(node.getRegionInfo());<a name="line.561"></a>
-<span class="sourceLineNo">562</span> }<a name="line.562"></a>
-<span class="sourceLineNo">563</span> return hris;<a name="line.563"></a>
-<span class="sourceLineNo">564</span> }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span> /**<a name="line.566"></a>
-<span class="sourceLineNo">567</span> * Utility. Whether to include region in list of regions. Default is to<a name="line.567"></a>
-<span class="sourceLineNo">568</span> * weed out split and offline regions.<a name="line.568"></a>
-<span class="sourceLineNo">569</span> * @return True if we should include the <code>node</code> (do not include<a name="line.569"></a>
-<span class="sourceLineNo">570</span> * if split or offline unless <code>offline</code> is set to true.<a name="line.570"></a>
-<span class="sourceLineNo">571</span> */<a name="line.571"></a>
-<span class="sourceLineNo">572</span> boolean include(final RegionStateNode node, final boolean offline) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span> if (LOG.isTraceEnabled()) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span> LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.574"></a>
-<span class="sourceLineNo">575</span> }<a name="line.575"></a>
-<span class="sourceLineNo">576</span> if (node.isInState(State.SPLIT)) return false;<a name="line.576"></a>
-<span class="sourceLineNo">577</span> if (node.isInState(State.OFFLINE) && !offline) return false;<a name="line.577"></a>
-<span class="sourceLineNo">578</span> final RegionInfo hri = node.getRegionInfo();<a name="line.578"></a>
-<span class="sourceLineNo">579</span> return (!hri.isOffline() && !hri.isSplit()) ||<a name="line.579"></a>
-<span class="sourceLineNo">580</span> ((hri.isOffline() || hri.isSplit()) && offline);<a name="line.580"></a>
-<span class="sourceLineNo">581</span> }<a name="line.581"></a>
-<span class="sourceLineNo">582</span><a name="line.582"></a>
-<span class="sourceLineNo">583</span> /**<a name="line.583"></a>
-<span class="sourceLineNo">584</span> * Returns the set of regions hosted by the specified server<a name="line.584"></a>
-<span class="sourceLineNo">585</span> * @param serverName the server we are interested in<a name="line.585"></a>
-<span class="sourceLineNo">586</span> * @return set of RegionInfo hosted by the specified server<a name="line.586"></a>
-<span class="sourceLineNo">587</span> */<a name="line.587"></a>
-<span class="sourceLineNo">588</span> public List<RegionInfo> getServerRegionInfoSet(final ServerName serverName) {<a name="line.588"></a>
-<span class="sourceLineNo">589</span> final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.589"></a>
-<span class="sourceLineNo">590</span> if (serverInfo == null) return Collections.emptyList();<a name="line.590"></a>
+<span class="sourceLineNo">545</span> // ==========================================================================<a name="line.545"></a>
+<span class="sourceLineNo">546</span> // RegionState helpers<a name="line.546"></a>
+<span class="sourceLineNo">547</span> // ==========================================================================<a name="line.547"></a>
+<span class="sourceLineNo">548</span> public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.548"></a>
+<span class="sourceLineNo">549</span> RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.549"></a>
+<span class="sourceLineNo">550</span> return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.550"></a>
+<span class="sourceLineNo">551</span> }<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span> public RegionState getRegionState(final String encodedRegionName) {<a name="line.553"></a>
+<span class="sourceLineNo">554</span> // TODO: Need a map <encodedName, ...> but it is just dispatch merge...<a name="line.554"></a>
+<span class="sourceLineNo">555</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.555"></a>
+<span class="sourceLineNo">556</span> if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span> return node.toRegionState();<a name="line.557"></a>
+<span class="sourceLineNo">558</span> }<a name="line.558"></a>
+<span class="sourceLineNo">559</span> }<a name="line.559"></a>
+<span class="sourceLineNo">560</span> return null;<a name="line.560"></a>
+<span class="sourceLineNo">561</span> }<a name="line.561"></a>
+<span class="sourceLineNo">562</span><a name="line.562"></a>
+<span class="sourceLineNo">563</span> // ============================================================================================<a name="line.563"></a>
+<span class="sourceLineNo">564</span> // TODO: helpers<a name="line.564"></a>
+<span class="sourceLineNo">565</span> // ============================================================================================<a name="line.565"></a>
+<span class="sourceLineNo">566</span> public boolean hasTableRegionStates(final TableName tableName) {<a name="line.566"></a>
+<span class="sourceLineNo">567</span> // TODO<a name="line.567"></a>
+<span class="sourceLineNo">568</span> return !getTableRegionStates(tableName).isEmpty();<a name="line.568"></a>
+<span class="sourceLineNo">569</span> }<a name="line.569"></a>
+<span class="sourceLineNo">570</span><a name="line.570"></a>
+<span class="sourceLineNo">571</span> /**<a name="line.571"></a>
+<span class="sourceLineNo">572</span> * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.572"></a>
+<span class="sourceLineNo">573</span> */<a name="line.573"></a>
+<span class="sourceLineNo">574</span> public List<RegionInfo> getRegionsOfTable(final TableName table) {<a name="line.574"></a>
+<span class="sourceLineNo">575</span> return getRegionsOfTable(table, false);<a name="line.575"></a>
+<span class="sourceLineNo">576</span> }<a name="line.576"></a>
+<span class="sourceLineNo">577</span><a name="line.577"></a>
+<span class="sourceLineNo">578</span> /**<a name="line.578"></a>
+<span class="sourceLineNo">579</span> * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.579"></a>
+<span class="sourceLineNo">580</span> * <code>offline</code> to true. Does not include regions that are in the<a name="line.580"></a>
+<span class="sourceLineNo">581</span> * {@link State#SPLIT} state.<a name="line.581"></a>
+<span class="sourceLineNo">582</span> */<a name="line.582"></a>
+<span class="sourceLineNo">583</span> public List<RegionInfo> getRegionsOfTable(final TableName table, final boolean offline) {<a name="line.583"></a>
+<span class="sourceLineNo">584</span> final ArrayList<RegionStateNode> nodes = getTableRegionStateNodes(table);<a name="line.584"></a>
+<span class="sourceLineNo">585</span> final ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(nodes.size());<a name="line.585"></a>
+<span class="sourceLineNo">586</span> for (RegionStateNode node: nodes) {<a name="line.586"></a>
+<span class="sourceLineNo">587</span> if (include(node, offline)) hris.add(node.getRegionInfo());<a name="line.587"></a>
+<span class="sourceLineNo">588</span> }<a name="line.588"></a>
+<span class="sourceLineNo">589</span> return hris;<a name="line.589"></a>
+<span class="sourceLineNo">590</span> }<a name="line.590"></a>
<span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span> synchronized (serverInfo) {<a name="line.592"></a>
-<span class="sourceLineNo">593</span> return serverInfo.getRegionInfoList();<a name="line.593"></a>
-<span class="sourceLineNo">594</span> }<a name="line.594"></a>
-<span class="sourceLineNo">595</span> }<a name="line.595"></a>
-<span class="sourceLineNo">596</span><a name="line.596"></a>
-<span class="sourceLineNo">597</span> // ============================================================================================<a name="line.597"></a>
-<span class="sourceLineNo">598</span> // TODO: split helpers<a name="line.598"></a>
-<span class="sourceLineNo">599</span> // ============================================================================================<a name="line.599"></a>
-<span class="sourceLineNo">600</span> public void logSplit(final ServerName serverName) {<a name="line.600"></a>
-<span class="sourceLineNo">601</span> final ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.601"></a>
-<span class="sourceLineNo">602</span> synchronized (serverNode) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span> serverNode.setState(ServerState.SPLITTING);<a name="line.603"></a>
-<span class="sourceLineNo">604</span> /* THIS HAS TO BE WRONG. THIS IS SPLITTING OF REGION, NOT SPLITTING WALs.<a name="line.604"></a>
-<span class="sourceLineNo">605</span> for (RegionStateNode regionNode: serverNode.getRegions()) {<a name="line.605"></a>
-<span class="sourceLineNo">606</span> synchronized (regionNode) {<a name="line.606"></a>
-<span class="sourceLineNo">607</span> // TODO: Abort procedure if present<a name="line.607"></a>
-<span class="sourceLineNo">608</span> regionNode.setState(State.SPLITTING);<a name="line.608"></a>
-<span class="sourceLineNo">609</span> }<a name="line.609"></a>
-<span class="sourceLineNo">610</span> }*/<a name="line.610"></a>
-<span class="sourceLineNo">611</span> }<a name="line.611"></a>
-<span class="sourceLineNo">612</span> }<a name="line.612"></a>
-<span class="sourceLineNo">613</span><a name="line.613"></a>
-<span class="sourceLineNo">614</span> public void logSplit(final RegionInfo regionInfo) {<a name="line.614"></a>
-<span class="sourceLineNo">615</span> final RegionStateNode regionNode = getRegionStateNode(regionInfo);<a name="line.615"></a>
-<span class="sourceLineNo">616</span> synchronized (regionNode) {<a name="line.616"></a>
-<span class="sourceLineNo">617</span> regionNode.setState(State.SPLIT);<a name="line.617"></a>
-<span class="sourceLineNo">618</span> }<a name="line.618"></a>
-<span class="sourceLineNo">619</span> }<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span> @VisibleForTesting<a name="line.621"></a>
-<span class="sourceLineNo">622</span> public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span> final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.623"></a>
-<span class="sourceLineNo">624</span> synchronized (regionNode) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span> regionNode.setState(state);<a name="line.625"></a>
-<span class="sourceLineNo">626</span> }<a name="line.626"></a>
-<span class="sourceLineNo">627</span> }<a name="line.627"></a>
-<span class="sourceLineNo">628</span><a name="line.628"></a>
-<span class="sourceLineNo">629</span> // ============================================================================================<a name="line.629"></a>
-<span class="sourceLineNo">630</span> // TODO:<a name="line.630"></a>
-<span class="sourceLineNo">631</span> // ============================================================================================<a name="line.631"></a>
-<span class="sourceLineNo">632</span> public List<RegionInfo> getAssignedRegions() {<a name="line.632"></a>
-<span class="sourceLineNo">633</span> final List<RegionInfo> result = new ArrayList<RegionInfo>();<a name="line.633"></a>
-<span class="sourceLineNo">634</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span> if (!node.isInTransition()) {<a name="line.635"></a>
-<span class="sourceLineNo">636</span> result.add(node.getRegionInfo());<a name="line.636"></a>
-<span class="sourceLineNo">637</span> }<a name="line.637"></a>
-<span class="sourceLineNo">638</span> }<a name="line.638"></a>
-<span class="sourceLineNo">639</span> return result;<a name="line.639"></a>
-<span class="sourceLineNo">640</span> }<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span> public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.643"></a>
-<span class="sourceLineNo">644</span> if (region != null) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span> synchronized (region) {<a name="line.645"></a>
-<span class="sourceLineNo">646</span> return region.isInState(state);<a name="line.646"></a>
-<span class="sourceLineNo">647</span> }<a name="line.647"></a>
-<span class="sourceLineNo">648</span> }<a name="line.648"></a>
-<span class="sourceLineNo">649</span> return false;<a name="line.649"></a>
-<span class="sourceLineNo">650</span> }<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span> public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span> return isRegionInState(regionInfo, State.OPEN);<a name="line.653"></a>
+<span class="sourceLineNo">592</span> /**<a name="line.592"></a>
+<span class="sourceLineNo">593</span> * Utility. Whether to include region in list of regions. Default is to<a name="line.593"></a>
+<span class="sourceLineNo">594</span> * weed out split and offline regions.<a name="line.594"></a>
+<span class="sourceLineNo">595</span> * @return True if we should include the <code>node</code> (do not include<a name="line.595"></a>
+<span class="sourceLineNo">596</span> * if split or offline unless <code>offline</code> is set to true.<a name="line.596"></a>
+<span class="sourceLineNo">597</span> */<a name="line.597"></a>
+<span class="sourceLineNo">598</span> boolean include(final RegionStateNode node, final boolean offline) {<a name="line.598"></a>
+<span class="sourceLineNo">599</span> if (LOG.isTraceEnabled()) {<a name="line.599"></a>
+<span class="sourceLineNo">600</span> LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.600"></a>
+<span class="sourceLineNo">601</span> }<a name="line.601"></a>
+<span class="sourceLineNo">602</span> if (node.isInState(State.SPLIT)) return false;<a name="line.602"></a>
+<span class="sourceLineNo">603</span> if (node.isInState(State.OFFLINE) && !offline) return false;<a name="line.603"></a>
+<span class="sourceLineNo">604</span> final RegionInfo hri = node.getRegionInfo();<a name="line.604"></a>
+<span class="sourceLineNo">605</span> return (!hri.isOffline() && !hri.isSplit()) ||<a name="line.605"></a>
+<span class="sourceLineNo">606</span> ((hri.isOffline() || hri.isSplit()) && offline);<a name="line.606"></a>
+<span class="sourceLineNo">607</span> }<a name="line.607"></a>
+<span class="sourceLineNo">608</span><a name="line.608"></a>
+<span class="sourceLineNo">609</span> /**<a name="line.609"></a>
+<span class="sourceLineNo">610</span> * Returns the set of regions hosted by the specified server<a name="line.610"></a>
+<span class="sourceLineNo">611</span> * @param serverName the server we are interested in<a name="line.611"></a>
+<span class="sourceLineNo">612</span> * @return set of RegionInfo hosted by the specified server<a name="line.612"></a>
+<span class="sourceLineNo">613</span> */<a name="line.613"></a>
+<span class="sourceLineNo">614</span> public List<RegionInfo> getServerRegionInfoSet(final ServerName serverName) {<a name="line.614"></a>
+<span class="sourceLineNo">615</span> final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.615"></a>
+<span class="sourceLineNo">616</span> if (serverInfo == null) return Collections.emptyList();<a name="line.616"></a>
+<span class="sourceLineNo">617</span><a name="line.617"></a>
+<span class="sourceLineNo">618</span> synchronized (serverInfo) {<a name="line.618"></a>
+<span class="sourceLineNo">619</span> return serverInfo.getRegionInfoList();<a name="line.619"></a>
+<span class="sourceLineNo">620</span> }<a name="line.620"></a>
+<span class="sourceLineNo">621</span> }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span> // ============================================================================================<a name="line.623"></a>
+<span class="sourceLineNo">624</span> // TODO: split helpers<a name="line.624"></a>
+<span class="sourceLineNo">625</span> // ============================================================================================<a name="line.625"></a>
+<span class="sourceLineNo">626</span><a name="line.626"></a>
+<span class="sourceLineNo">627</span> /**<a name="line.627"></a>
+<span class="sourceLineNo">628</span> * Call this when we start log splitting a crashed Server.<a name="line.628"></a>
+<span class="sourceLineNo">629</span> * @see #logSplit(ServerName)<a name="line.629"></a>
+<span class="sourceLineNo">630</span> */<a name="line.630"></a>
+<span class="sourceLineNo">631</span> public void logSplitting(final ServerName serverName) {<a name="line.631"></a>
+<span class="sourceLineNo">632</span> final ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.632"></a>
+<span class="sourceLineNo">633</span> synchronized (serverNode) {<a name="line.633"></a>
+<span class="sourceLineNo">634</span> serverNode.setState(ServerState.SPLITTING);<a name="line.634"></a>
+<span class="sourceLineNo">635</span> }<a name="line.635"></a>
+<span class="sourceLineNo">636</span> }<a name="line.636"></a>
+<span class="sourceLineNo">637</span><a name="line.637"></a>
+<span class="sourceLineNo">638</span> /**<a name="line.638"></a>
+<span class="sourceLineNo">639</span> * Called after we've split all logs on a crashed Server.<a name="line.639"></a>
+<span class="sourceLineNo">640</span> * @see #logSplitting(ServerName)<a name="line.640"></a>
+<span class="sourceLineNo">641</span> */<a name="line.641"></a>
+<span class="sourceLineNo">642</span> public void logSplit(final ServerName serverName) {<a name="line.642"></a>
+<span class="sourceLineNo">643</span> final ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.643"></a>
+<span class="sourceLineNo">644</span> synchronized (serverNode) {<a name="line.644"></a>
+<span class="sourceLineNo">645</span> serverNode.setState(ServerState.OFFLINE);<a name="line.645"></a>
+<span class="sourceLineNo">646</span> }<a name="line.646"></a>
+<span class="sourceLineNo">647</span> }<a name="line.647"></a>
+<span class="sourceLineNo">648</span><a name="line.648"></a>
+<span class="sourceLineNo">649</span> public void logSplit(final RegionInfo regionInfo) {<a name="line.649"></a>
+<span class="sourceLineNo">650</span> final RegionStateNode regionNode = getRegionStateNode(regionInfo);<a name="line.650"></a>
+<span class="sourceLineNo">651</span> synchronized (regionNode) {<a name="line.651"></a>
+<span class="sourceLineNo">652</span> regionNode.setState(State.SPLIT);<a name="line.652"></a>
+<span class="sourceLineNo">653</span> }<a name="line.653"></a>
<span class="sourceLineNo">654</span> }<a name="line.654"></a>
<span class="sourceLineNo">655</span><a name="line.655"></a>
-<span class="sourceLineNo">656</span> /**<a name="line.656"></a>
-<span class="sourceLineNo">657</span> * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.657"></a>
-<span class="sourceLineNo">658</span> */<a name="line.658"></a>
-<span class="sourceLineNo">659</span> public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.659"></a>
-<span class="sourceLineNo">660</span> return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.660"></a>
-<span class="sourceLineNo">661</span> }<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span> public Map<ServerName, List<RegionInfo>> getSnapShotOfAssignment(<a name="line.663"></a>
-<span class="sourceLineNo">664</span> final Collection<RegionInfo> regions) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span> final Map<ServerName, List<RegionInfo>> result = new HashMap<ServerName, List<RegionInfo>>();<a name="line.665"></a>
-<span class="sourceLineNo">666</span> for (RegionInfo hri: regions) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span> final RegionStateNode node = getRegionStateNode(hri);<a name="line.667"></a>
-<span class="sourceLineNo">668</span> if (node == null) continue;<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span> // TODO: State.OPEN<a name="line.670"></a>
-<span class="sourceLineNo">671</span> final ServerName serverName = node.getRegionLocation();<a name="line.671"></a>
-<span class="sourceLineNo">672</span> if (serverName == null) continue;<a name="line.672"></a>
-<span class="sourceLineNo">673</span><a name="line.673"></a>
-<span class="sourceLineNo">674</span> List<RegionInfo> serverRegions = result.get(serverName);<a name="line.674"></a>
-<span class="sourceLineNo">675</span> if (serverRegions == null) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span> serverRegions = new ArrayList<RegionInfo>();<a name="line.676"></a>
-<span class="sourceLineNo">677</span> result.put(serverName, serverRegions);<a name="line.677"></a>
-<span class="sourceLineNo">678</span> }<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span> serverRegions.add(node.getRegionInfo());<a name="line.680"></a>
-<span class="sourceLineNo">681</span> }<a name="line.681"></a>
-<span class="sourceLineNo">682</span> return result;<a name="line.682"></a>
-<span class="sourceLineNo">683</span> }<a name="line.683"></a>
-<span class="sourceLineNo">684</span><a name="line.684"></a>
-<span class="sourceLineNo">685</span> public Map<RegionInfo, ServerName> getRegionAssignments() {<a name="line.685"></a>
-<span class="sourceLineNo">686</span> final HashMap<RegionInfo, ServerName> assignments = new HashMap<RegionInfo, ServerName>();<a name="line.686"></a>
-<span class="sourceLineNo">687</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.687"></a>
-<span class="sourceLineNo">688</span> assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.688"></a>
-<span class="sourceLineNo">689</span> }<a name="line.689"></a>
-<span class="sourceLineNo">690</span> return assignments;<a name="line.690"></a>
-<span class="sourceLineNo">691</span> }<a name="line.691"></a>
-<span class="sourceLineNo">692</span><a name="line.692"></a>
-<span class="sourceLineNo">693</span> public Map<RegionState.State, List<RegionInfo>> getRegionByStateOfTable(TableName tableName) {<a name="line.693"></a>
-<span class="sourceLineNo">694</span> final State[] states = State.values();<a name="line.694"></a>
-<span class="sourceLineNo">695</span> final Map<RegionState.State, List<RegionInfo>> tableRegions =<a name="line.695"></a>
-<span class="sourceLineNo">696</span> new HashMap<State, List<RegionInfo>>(states.length);<a name="line.696"></a>
-<span class="sourceLineNo">697</span> for (int i = 0; i < states.length; ++i) {<a name="line.697"></a>
-<span class="sourceLineNo">698</span> tableRegions.put(states[i], new ArrayList<RegionInfo>());<a name="line.698"></a>
-<span class="sourceLineNo">699</span> }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span> if (node.getTable().equals(tableName)) {<a name="line.702"></a>
-<span class="sourceLineNo">703</span> tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.703"></a>
-<span class="sourceLineNo">704</span> }<a name="line.704"></a>
-<span class="sourceLineNo">705</span> }<a name="line.705"></a>
-<span class="sourceLineNo">706</span> return tableRegions;<a name="line.706"></a>
-<span class="sourceLineNo">707</span> }<a name="line.707"></a>
+<span class="sourceLineNo">656</span> @VisibleForTesting<a name="line.656"></a>
+<span class="sourceLineNo">657</span> public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.657"></a>
+<span class="sourceLineNo">658</span> final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.658"></a>
+<span class="sourceLineNo">659</span> synchronized (regionNode) {<a name="line.659"></a>
+<span class="sourceLineNo">660</span> regionNode.setState(state);<a name="line.660"></a>
+<span class="sourceLineNo">661</span> }<a name="line.661"></a>
+<span class="sourceLineNo">662</span> }<a name="line.662"></a>
+<span class="sourceLineNo">663</span><a name="line.663"></a>
+<span class="sourceLineNo">664</span> // ============================================================================================<a name="line.664"></a>
+<span class="sourceLineNo">665</span> // TODO:<a name="line.665"></a>
+<span class="sourceLineNo">666</span> // ============================================================================================<a name="line.666"></a>
+<span class="sourceLineNo">667</span> public List<RegionInfo> getAssignedRegions() {<a name="line.667"></a>
+<span class="sourceLineNo">668</span> final List<RegionInfo> result = new ArrayList<RegionInfo>();<a name="line.668"></a>
+<span class="sourceLineNo">669</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.669"></a>
+<span class="sourceLineNo">670</span> if (!node.isInTransition()) {<a name="line.670"></a>
+<span class="sourceLineNo">671</span> result.add(node.getRegionInfo());<a name="line.671"></a>
+<span class="sourceLineNo">672</span> }<a name="line.672"></a>
+<span class="sourceLineNo">673</span> }<a name="line.673"></a>
+<span class="sourceLineNo">674</span> return result;<a name="line.674"></a>
+<span class="sourceLineNo">675</span> }<a name="line.675"></a>
+<span class="sourceLineNo">676</span><a name="line.676"></a>
+<span class="sourceLineNo">677</span> public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.677"></a>
+<span class="sourceLineNo">678</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.678"></a>
+<span class="sourceLineNo">679</span> if (region != null) {<a name="line.679"></a>
+<span class="sourceLineNo">680</span> synchronized (region) {<a name="line.680"></a>
+<span class="sourceLineNo">681</span> return region.isInState(state);<a name="line.681"></a>
+<span class="sourceLineNo">682</span> }<a name="line.682"></a>
+<span class="sourceLineNo">683</span> }<a name="line.683"></a>
+<span class="sourceLineNo">684</span> return false;<a name="line.684"></a>
+<span class="sourceLineNo">685</span> }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span> public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.687"></a>
+<span class="sourceLineNo">688</span> return isRegionInState(regionInfo, State.OPEN);<a name="line.688"></a>
+<span class="sourceLineNo">689</span> }<a name="line.689"></a>
+<span class="sourceLineNo">690</span><a name="line.690"></a>
+<span class="sourceLineNo">691</span> /**<a name="line.691"></a>
+<span class="sourceLineNo">692</span> * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.692"></a>
+<span class="sourceLineNo">693</span> */<a name="line.693"></a>
+<span class="sourceLineNo">694</span> public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.694"></a>
+<span class="sourceLineNo">695</span> return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.695"></a>
+<span class="sourceLineNo">696</span> }<a name="line.696"></a>
+<span class="sourceLineNo">697</span><a name="line.697"></a>
+<span class="sourceLineNo">698</span> public Map<ServerName, List<RegionInfo>> getSnapShotOfAssignment(<a name="line.698"></a>
+<span class="sourceLineNo">699</span> final Collection<RegionInfo> regions) {<a name="line.699"></a>
+<span class="sourceLineNo">700</span> final Map<ServerName, List<RegionInfo>> result = new HashMap<ServerName, List<RegionInfo>>();<a name="line.700"></a>
+<span class="sourceLineNo">701</span> for (RegionInfo hri: regions) {<a name="line.701"></a>
+<span class="sourceLineNo">702</span> final RegionStateNode node = getRegionStateNode(hri);<a name="line.702"></a>
+<span class="sourceLineNo">703</span> if (node == null) continue;<a name="line.703"></a>
+<span class="sourceLineNo">704</span><a name="line.704"></a>
+<span class="sourceLineNo">705</span> // TODO: State.OPEN<a name="line.705"></a>
+<span class="sourceLineNo">706</span> final ServerName serverName = node.getRegionLocation();<a name="line.706"></a>
+<span class="sourceLineNo">707</span> if (serverName == null) continue;<a name="line.707"></a>
<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span> public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.709"></a>
-<span class="sourceLineNo">710</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.710"></a>
-<span class="sourceLineNo">711</span> if (region != null) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span> synchronized (region) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span> ServerName server = region.getRegionLocation();<a name="line.713"></a>
-<span class="sourceLineNo">714</span> return server != null ? server : region.getLastHost();<a name="line.714"></a>
-<span class="sourceLineNo">715</span> }<a name="line.715"></a>
+<span class="sourceLineNo">709</span> List<RegionInfo> serverRegions = result.get(serverName);<a name="line.709"></a>
+<span class="sourceLineNo">710</span> if (serverRegions == null) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span> serverRegions = new ArrayList<RegionInfo>();<a name="line.711"></a>
+<span class="sourceLineNo">712</span> result.put(serverName, serverRegions);<a name="line.712"></a>
+<span class="sourceLineNo">713</span> }<a name="line.713"></a>
+<span class="sourceLineNo">714</span><a name="line.714"></a>
+<span class="sourceLineNo">715</span> serverRegions.add(node.getRegionInfo());<a name="line.715"></a>
<span class="sourceLineNo">716</span> }<a name="line.716"></a>
-<span class="sourceLineNo">717</span> return null;<a name="line.717"></a>
+<span class="sourceLineNo">717</span> return result;<a name="line.717"></a>
<span class="sourceLineNo">718</span> }<a name="line.718"></a>
<span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span> /**<a name="line.720"></a>
-<span class="sourceLineNo">721</span> * This is an EXPENSIVE clone. Cloning though is the safest thing to do.<a name="line.721"></a>
-<span class="sourceLineNo">722</span> * Can't let out original since it can change and at least the load balancer<a name="line.722"></a>
-<span class="sourceLineNo">723</span> * wants to iterate this exported list. We need to synchronize on regions<a name="line.723"></a>
-<span class="sourceLineNo">724</span> * since all access to this.servers is under a lock on this.regions.<a name="line.724"></a>
-<span class="sourceLineNo">725</span> * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.725"></a>
-<span class="sourceLineNo">726</span> * @return A clone of current assignments by table.<a name="line.726"></a>
-<span class="sourceLineNo">727</span> */<a name="line.727"></a>
-<span class="sourceLineNo">728</span> public Map<TableName, Map<ServerName, List<RegionInfo>>> getAssignmentsByTable(<a name="line.728"></a>
-<span class="sourceLineNo">729</span> final boolean forceByCluster) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span> if (!forceByCluster) return getAssignmentsByTable();<a name="line.730"></a>
-<span class="sourceLineNo">731</span><a name="line.731"></a>
-<span class="sourceLineNo">732</span> final HashMap<ServerName, List<RegionInfo>> ensemble =<a name="line.732"></a>
-<span class="sourceLineNo">733</span> new HashMap<ServerName, List<RegionInfo>>(serverMap.size());<a name="line.733"></a>
-<span class="sourceLineNo">734</span> for (ServerStateNode serverNode: serverMap.values()) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span> ensemble.put(serverNode.getServerName(), serverNode.getRegionInfoList());<a name="line.735"></a>
-<span class="sourceLineNo">736</span> }<a name="line.736"></a>
-<span class="sourceLineNo">737</span><a name="line.737"></a>
-<span class="sourceLineNo">738</span> // TODO: can we use Collections.singletonMap(HConstants.ENSEMBLE_TABLE_NAME, ensemble)?<a name="line.738"></a>
-<span class="sourceLineNo">739</span> final Map<TableName, Map<ServerName, List<RegionInfo>>> result =<a name="line.739"></a>
-<span class="sourceLineNo">740</span> new HashMap<TableName, Map<ServerName, List<RegionInfo>>>(1);<a name="line.740"></a>
-<span class="sourceLineNo">741</span> result.put(HConstants.ENSEMBLE_TABLE_NAME, ensemble);<a name="line.741"></a>
-<span class="sourceLineNo">742</span> return result;<a name="line.742"></a>
-<span class="sourceLineNo">743</span> }<a name="line.743"></a>
-<span class="sourceLineNo">744</span><a name="line.744"></a>
-<span class="sourceLineNo">745</span> public Map<TableName, Map<ServerName, List<RegionInfo>>> getAssignmentsByTable() {<a name="line.745"></a>
-<span class="sourceLineNo">746</span> final Map<TableName, Map<ServerName, List<RegionInfo>>> result = new HashMap<>();<a name="line.746"></a>
-<span class="sourceLineNo">747</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span> Map<ServerName, List<RegionInfo>> tableResult = result.get(node.getTable());<a name="line.748"></a>
-<span class="sourceLineNo">749</span> if (tableResult == null) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span> tableResult = new HashMap<ServerName, List<RegionInfo>>();<a name="line.750"></a>
-<span class="sourceLineNo">751</span> result.put(node.getTable(), tableResult);<a name="line.751"></a>
-<span class="sourceLineNo">752</span> }<a name="line.752"></a>
-<span class="sourceLineNo">753</span><a name="line.753"></a>
-<span class="sourceLineNo">754</span> final ServerName serverName = node.getRegionLocation();<a name="line.754"></a>
-<span class="sourceLineNo">755</span> if (serverName == null) {<a name="line.755"></a>
-<span class="sourceLineNo">756</span> LOG.info("Skipping, no server for " + node);<a name="line.756"></a>
-<span class="sourceLineNo">757</span> continue;<a name="line.757"></a>
-<span class="sourceLineNo">758</span> }<a name="line.758"></a>
-<span class="sourceLineNo">759</span> List<RegionInfo> serverResult = tableResult.get(serverName);<a name="line.759"></a>
-<span class="sourceLineNo">760</span> if (serverResult == null) {<a name="line.760"></a>
-<span class="sourceLineNo">761</span> serverResult = new ArrayList<RegionInfo>();<a name="line.761"></a>
-<span class="sourceLineNo">762</span> tableResult.put(serverName, serverResult);<a name="line.762"></a>
-<span class="sourceLineNo">763</span> }<a name="line.763"></a>
-<span class="sourceLineNo">764</span><a name="line.764"></a>
-<span class="sourceLineNo">765</span> serverResult.add(node.getRegionInfo());<a name="line.765"></a>
-<span class="sourceLineNo">766</span> }<a name="line.766"></a>
-<span class="sourceLineNo">767</span> // Add online servers with no assignment for the table.<a name="line.767"></a>
-<span class="sourceLineNo">768</span> for (Map<ServerName, List<RegionInfo>> table: result.values()) {<a name="line.768"></a>
-<span class="sourceLineNo">769</span> for (ServerName svr : serverMap.keySet()) {<a name="line.769"></a>
-<span class="sourceLineNo">770</span> if (!table.containsKey(svr)) {<a name="line.770"></a>
-<span class="sourceLineNo">771</span> table.put(svr, new ArrayList<RegionInfo>());<a name="line.771"></a>
-<span class="sourceLineNo">772</span> }<a name="line.772"></a>
-<span class="sourceLineNo">773</span> }<a name="line.773"></a>
-<span class="sourceLineNo">774</span> }<a name="line.774"></a>
-<span class="sourceLineNo">775</span> return result;<a name="line.775"></a>
-<span class="sourceLineNo">776</span> }<a name="line.776"></a>
-<span class="sourceLineNo">777</span><a name="line.777"></a>
-<span class="sourceLineNo">778</span> // ==========================================================================<a name="line.778"></a>
-<span class="sourceLineNo">779</span> // Region in transition helpers<a name="line.779"></a>
-<span class="sourceLineNo">780</span> // ==========================================================================<a name="line.780"></a>
-<span class="sourceLineNo">781</span> protected boolean addRegionInTransition(final RegionStateNode regionNode,<a name="line.781"></a>
-<span class="sourceLineNo">782</span> final RegionTransitionProcedure procedure) {<a name="line.782"></a>
-<span class="sourceLineNo">783</span> if (procedure != null && !regionNode.setProcedure(procedure)) return false;<a name="line.783"></a>
-<span class="sourceLineNo">784</span><a name="line.784"></a>
-<span class="sourceLineNo">785</span> regionInTransition.put(regionNode.getRegionInfo(), regionNode);<a name="line.785"></a>
-<span class="sourceLineNo">786</span> return true;<a name="line.786"></a>
-<span class="sourceLineNo">787</span> }<a name="line.787"></a>
+<span class="sourceLineNo">720</span> public Map<RegionInfo, ServerName> getRegionAssignments() {<a name="line.720"></a>
+<span class="sourceLineNo">721</span> final HashMap<RegionInfo, ServerName> assignments = new HashMap<RegionInfo, ServerName>();<a name="line.721"></a>
+<span class="sourceLineNo">722</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span> assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.723"></a>
+<span class="sourceLineNo">724</span> }<a name="line.724"></a>
+<span class="sourceLineNo">725</span> return assignments;<a name="line.725"></a>
+<span class="sourceLineNo">726</span> }<a name="line.726"></a>
+<span class="sourceLineNo">727</span><a name="line.727"></a>
+<span class="sourceLineNo">728</span> public Map<RegionState.State, List<RegionInfo>> getRegionByStateOfTable(TableName tableName) {<a name="line.728"></a>
+<span class="sourceLineNo">729</span> final State[] states = State.values();<a name="line.729"></a>
+<span class="sourceLineNo">730</span> final Map<RegionState.State, List<RegionInfo>> tableRegions =<a name="line.730"></a>
+<span class="sourceLineNo">731</span> new HashMap<State, List<RegionInfo>>(states.length);<a name="line.731"></a>
+<span class="sourceLineNo">732</span> for (int i = 0; i < states.length; ++i) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span> tableRegions.put(states[i], new ArrayList<RegionInfo>());<a name="line.733"></a>
+<span class="sourceLineNo">734</span> }<a name="line.734"></a>
+<span class="sourceLineNo">735</span><a name="line.735"></a>
+<span class="sourceLineNo">736</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.736"></a>
+<span class="sourceLineNo">737</span> if (node.getTable().equals(tableName)) {<a name="line.737"></a>
+<span class="sourceLineNo">738</span> tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.738"></a>
+<span class="sourceLineNo">739</span> }<a name="line.739"></a>
+<span class="sourceLineNo">740</span> }<a name="line.740"></a>
+<span class="sourceLineNo">741</span> return tableRegions;<a name="line.741"></a>
+<span class="sourceLineNo">742</span> }<a name="line.742"></a>
+<span class="sourceLineNo">743</span><a name="line.743"></a>
+<span class="sourceLineNo">744</span> public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.744"></a>
+<span class="sourceLineNo">745</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.745"></a>
+<span class="sourceLineNo">746</span> if (region != null) {<a name="line.746"></a>
+<span class="sourceLineNo">747</span> synchronized (region) {<a name="line.747"></a>
+<span class="sourceLineNo">748</span> ServerName server = region.getRegionLocation();<a name="line.748"></a>
+<span class="sourceLineNo">749</span> return server != null ? server : region.getLastHost();<a name="line.749"></a>
+<span class="sourceLineNo">750</span> }<a name="line.750"></a>
+<span class="sourceLineNo">751</span> }<a name="line.751"></a>
+<span class="sourceLineNo">752</span> return null;<a name="line.752"></a>
+<span class="sourceLineNo">753</span> }<a name="line.753"></a>
+<span class="sourceLineNo">754</span><a name="line.754"></a>
+<span class="sourceLineNo">755</span> /**<a name="line.755"></a>
+<span class="sourceLineNo">756</span> * This is an EXPENSIVE clone. Cloning though is the safest thing to do.<a name="line.756"></a>
+<span class="sourceLineNo">757</span> * Can't let out original since it can change and at least the load balancer<a name="line.757"></a>
+<span class="sourceLineNo">758</span> * wants to iterate this exported list. We need to synchronize on regions<a name="line.758"></a>
+<span class="sourceLineNo">759</span> * since all access to this.servers is under a lock on this.regions.<a name="line.759"></a>
+<span class="sourceLineNo">760</span> * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.760"></a>
+<span class="sourceLineNo">761</span> * @return A clone of current assignments by table.<a name="line.761"></a>
+<span class="sourceLineNo">762</span> */<a name="line.762"></a>
+<span class="sourceLineNo">763</span> public Map<TableName, Map<ServerName, List<RegionInfo>>> getAssignmentsByTable(<a name="line.763"></a>
+<span class="sourceLineNo">764</span> final boolean forceByCluster) {<
<TRUNCATED>
[51/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
Published site at 7d3750bd9fc9747623549c242cc4171e224b3eaf.
Project: http://git-wip-us.apache.org/repos/asf/hbase-site/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase-site/commit/3469cbc0
Tree: http://git-wip-us.apache.org/repos/asf/hbase-site/tree/3469cbc0
Diff: http://git-wip-us.apache.org/repos/asf/hbase-site/diff/3469cbc0
Branch: refs/heads/asf-site
Commit: 3469cbc0b98955debbab4b54bd02446a7b892ab9
Parents: cddd306
Author: jenkins <bu...@apache.org>
Authored: Tue Jun 5 14:48:27 2018 +0000
Committer: jenkins <bu...@apache.org>
Committed: Tue Jun 5 14:48:27 2018 +0000
----------------------------------------------------------------------
acid-semantics.html | 4 +-
apache_hbase_reference_guide.pdf | 8459 ++++-----
apidocs/deprecated-list.html | 2 +-
apidocs/index-all.html | 2 +-
.../org/apache/hadoop/hbase/client/Scan.html | 4 +-
.../hadoop/hbase/client/class-use/Scan.html | 2 +-
.../hadoop/hbase/client/Scan.ReadType.html | 2 +-
.../org/apache/hadoop/hbase/client/Scan.html | 2 +-
book.html | 5 +-
bulk-loads.html | 4 +-
checkstyle-aggregate.html | 15498 ++++++++---------
checkstyle.rss | 106 +-
coc.html | 4 +-
dependencies.html | 4 +-
dependency-convergence.html | 4 +-
dependency-info.html | 4 +-
dependency-management.html | 4 +-
devapidocs/allclasses-frame.html | 6 +-
devapidocs/allclasses-noframe.html | 6 +-
devapidocs/constant-values.html | 6 +-
devapidocs/deprecated-list.html | 2 +-
devapidocs/index-all.html | 91 +-
.../apache/hadoop/hbase/HBaseIOException.html | 2 +-
.../hadoop/hbase/backup/package-tree.html | 4 +-
.../org/apache/hadoop/hbase/class-use/Cell.html | 212 +-
.../hbase/class-use/HBaseIOException.html | 41 +-
.../hadoop/hbase/class-use/ServerName.html | 24 +-
.../org/apache/hadoop/hbase/client/Scan.html | 4 +-
.../hadoop/hbase/client/class-use/Scan.html | 2 +-
.../hadoop/hbase/client/package-tree.html | 24 +-
.../hadoop/hbase/filter/package-tree.html | 6 +-
.../hadoop/hbase/io/hfile/package-tree.html | 6 +-
.../apache/hadoop/hbase/ipc/package-tree.html | 2 +-
.../hadoop/hbase/mapreduce/package-tree.html | 4 +-
.../org/apache/hadoop/hbase/master/HMaster.html | 135 +-
.../hadoop/hbase/master/MasterRpcServices.html | 76 +-
.../hadoop/hbase/master/MasterServices.html | 53 +-
.../hadoop/hbase/master/ServerManager.html | 60 +-
.../AssignProcedure.CompareAssignProcedure.html | 4 +-
...signmentManager.RegionInTransitionChore.html | 6 +-
...ssignmentManager.RegionInTransitionStat.html | 40 +-
.../master/assignment/AssignmentManager.html | 264 +-
.../FailedRemoteDispatchException.html | 276 -
.../assignment/GCMergedRegionsProcedure.html | 4 +-
.../master/assignment/MoveRegionProcedure.html | 20 +-
.../RegionStates.RegionFailedOpen.html | 22 +-
.../assignment/RegionStates.ServerState.html | 24 +-
.../RegionStates.ServerStateNode.html | 68 +-
.../hbase/master/assignment/RegionStates.html | 182 +-
.../assignment/RegionTransitionProcedure.html | 90 +-
.../master/assignment/UnassignProcedure.html | 77 +-
.../FailedRemoteDispatchException.html | 125 -
.../class-use/RegionStates.RegionStateNode.html | 24 +-
.../class-use/RegionStates.ServerStateNode.html | 6 +-
.../hbase/master/assignment/package-frame.html | 4 -
.../master/assignment/package-summary.html | 22 +-
.../hbase/master/assignment/package-tree.html | 17 -
.../hbase/master/assignment/package-use.html | 8 +-
.../hbase/master/balancer/package-tree.html | 2 +-
.../hadoop/hbase/master/package-tree.html | 4 +-
.../master/procedure/ServerCrashProcedure.html | 42 +-
.../procedure/class-use/MasterProcedureEnv.html | 48 +-
.../hbase/master/procedure/package-tree.html | 2 +-
.../replication/RefreshPeerProcedure.html | 48 +-
.../hadoop/hbase/monitoring/package-tree.html | 2 +-
.../org/apache/hadoop/hbase/package-tree.html | 16 +-
.../hbase/procedure2/DelayedProcedure.html | 4 +-
.../FailedRemoteDispatchException.html | 280 +
.../hadoop/hbase/procedure2/InlineChore.html | 4 +-
.../hadoop/hbase/procedure2/LockType.html | 4 +-
.../procedure2/NoNodeDispatchException.html | 282 +
.../procedure2/NoServerDispatchException.html | 282 +
.../NullTargetServerDispatchException.html | 281 +
.../hbase/procedure2/OnePhaseProcedure.html | 4 +-
.../RemoteProcedureDispatcher.BufferNode.html | 16 +-
.../RemoteProcedureDispatcher.DelayedTask.html | 4 +-
.../RemoteProcedureDispatcher.RemoteNode.html | 8 +-
...moteProcedureDispatcher.RemoteOperation.html | 8 +-
...moteProcedureDispatcher.RemoteProcedure.html | 10 +-
...ocedureDispatcher.TimeoutExecutorThread.html | 16 +-
.../procedure2/RemoteProcedureDispatcher.html | 31 +-
.../FailedRemoteDispatchException.html | 179 +
.../class-use/NoNodeDispatchException.html | 168 +
.../class-use/NoServerDispatchException.html | 168 +
.../NullTargetServerDispatchException.html | 168 +
...moteProcedureDispatcher.RemoteProcedure.html | 2 +-
.../hadoop/hbase/procedure2/package-frame.html | 4 +
.../hbase/procedure2/package-summary.html | 25 +
.../hadoop/hbase/procedure2/package-tree.html | 13 +-
.../hadoop/hbase/procedure2/package-use.html | 29 +-
.../hadoop/hbase/quotas/package-tree.html | 6 +-
.../regionserver/CSLMImmutableSegment.html | 2 +-
.../regionserver/CellArrayImmutableSegment.html | 2 +-
.../regionserver/CellChunkImmutableSegment.html | 2 +-
.../regionserver/CompositeImmutableSegment.html | 51 +-
.../hbase/regionserver/ImmutableSegment.html | 17 +-
.../hbase/regionserver/KeyValueScanner.html | 2 +-
.../NonReversedNonLazyKeyValueScanner.html | 2 +-
.../hadoop/hbase/regionserver/Shipper.html | 2 +-
.../regionserver/SimpleRpcSchedulerFactory.html | 4 +-
.../regionserver/SnapshotSegmentScanner.html | 508 +
.../hbase/regionserver/SplitLogWorker.html | 4 +-
.../class-use/ImmutableSegment.html | 7 +
.../regionserver/class-use/KeyValueScanner.html | 18 +-
.../class-use/NonLazyKeyValueScanner.html | 8 +
.../NonReversedNonLazyKeyValueScanner.html | 8 +
.../hbase/regionserver/class-use/Segment.html | 6 +-
.../hbase/regionserver/class-use/Shipper.html | 10 +-
.../class-use/SnapshotSegmentScanner.html | 125 +
.../hbase/regionserver/package-frame.html | 1 +
.../hbase/regionserver/package-summary.html | 78 +-
.../hadoop/hbase/regionserver/package-tree.html | 19 +-
.../regionserver/querymatcher/package-tree.html | 2 +-
.../hbase/regionserver/wal/package-tree.html | 2 +-
.../replication/ZKReplicationQueueStorage.html | 42 +-
.../replication/regionserver/package-tree.html | 2 +-
.../hbase/security/access/package-tree.html | 2 +-
.../hadoop/hbase/security/package-tree.html | 2 +-
.../hadoop/hbase/thrift/package-tree.html | 2 +-
.../apache/hadoop/hbase/util/package-tree.html | 8 +-
.../apache/hadoop/hbase/wal/package-tree.html | 2 +-
devapidocs/overview-tree.html | 9 +-
devapidocs/serialized-form.html | 30 +-
.../org/apache/hadoop/hbase/Version.html | 6 +-
.../hadoop/hbase/client/Scan.ReadType.html | 2 +-
.../org/apache/hadoop/hbase/client/Scan.html | 2 +-
.../master/HMaster.InitializationMonitor.html | 1669 +-
.../master/HMaster.MasterStoppedException.html | 1669 +-
.../hbase/master/HMaster.RedirectServlet.html | 1669 +-
.../org/apache/hadoop/hbase/master/HMaster.html | 1669 +-
.../MasterRpcServices.BalanceSwitchMode.html | 1544 +-
.../hadoop/hbase/master/MasterRpcServices.html | 1544 +-
.../hadoop/hbase/master/MasterServices.html | 311 +-
.../hadoop/hbase/master/ServerManager.html | 986 +-
...signmentManager.RegionInTransitionChore.html | 1783 +-
...ssignmentManager.RegionInTransitionStat.html | 1783 +-
.../master/assignment/AssignmentManager.html | 1783 +-
.../FailedRemoteDispatchException.html | 105 -
.../master/assignment/MoveRegionProcedure.html | 187 +-
.../RegionStates.AssignmentProcedureEvent.html | 1315 +-
.../RegionStates.RegionFailedOpen.html | 1315 +-
.../RegionStates.RegionStateNode.html | 1315 +-
...RegionStates.RegionStateStampComparator.html | 1315 +-
.../RegionStates.ServerReportEvent.html | 1315 +-
.../assignment/RegionStates.ServerState.html | 1315 +-
.../RegionStates.ServerStateNode.html | 1315 +-
.../hbase/master/assignment/RegionStates.html | 1315 +-
.../assignment/RegionTransitionProcedure.html | 904 +-
.../master/assignment/UnassignProcedure.html | 256 +-
.../master/procedure/ServerCrashProcedure.html | 520 +-
.../replication/RefreshPeerProcedure.html | 367 +-
.../hbase/procedure2/BadProcedureException.html | 2 +-
.../FailedRemoteDispatchException.html | 105 +
.../procedure2/NoNodeDispatchException.html | 105 +
.../procedure2/NoServerDispatchException.html | 105 +
.../NullTargetServerDispatchException.html | 104 +
.../RemoteProcedureDispatcher.BufferNode.html | 467 +-
.../RemoteProcedureDispatcher.DelayedTask.html | 467 +-
.../RemoteProcedureDispatcher.RemoteNode.html | 467 +-
...moteProcedureDispatcher.RemoteOperation.html | 467 +-
...moteProcedureDispatcher.RemoteProcedure.html | 467 +-
...ocedureDispatcher.TimeoutExecutorThread.html | 467 +-
.../procedure2/RemoteProcedureDispatcher.html | 467 +-
.../regionserver/CompositeImmutableSegment.html | 11 +-
.../hbase/regionserver/ImmutableSegment.html | 6 +-
.../hbase/regionserver/MemStoreSnapshot.html | 5 +-
.../regionserver/SnapshotSegmentScanner.html | 173 +
.../replication/ZKReplicationQueueStorage.html | 505 +-
downloads.html | 4 +-
export_control.html | 4 +-
index.html | 4 +-
integration.html | 4 +-
issue-tracking.html | 4 +-
license.html | 208 +-
mail-lists.html | 4 +-
metrics.html | 4 +-
old_news.html | 4 +-
plugin-management.html | 4 +-
plugins.html | 4 +-
poweredbyhbase.html | 4 +-
project-info.html | 4 +-
project-reports.html | 4 +-
project-summary.html | 4 +-
pseudo-distributed.html | 4 +-
replication.html | 4 +-
resources.html | 4 +-
source-repository.html | 4 +-
sponsors.html | 4 +-
supportingprojects.html | 4 +-
team-list.html | 4 +-
testdevapidocs/allclasses-frame.html | 3 +
testdevapidocs/allclasses-noframe.html | 3 +
testdevapidocs/index-all.html | 59 +
.../hadoop/hbase/backup/package-tree.html | 2 +-
.../hbase/class-use/HBaseClassTestRule.html | 72 +-
.../hbase/class-use/HBaseTestingUtility.html | 10 +-
.../hadoop/hbase/io/hfile/package-tree.html | 2 +-
.../hadoop/hbase/master/TestRollingRestart.html | 4 +-
...rashProcedureStuck.DummyRegionProcedure.html | 493 +
...estServerCrashProcedureStuck.DummyState.html | 334 +
.../master/TestServerCrashProcedureStuck.html | 444 +
.../hbase/master/TestShutdownBackupMaster.html | 4 +-
.../TestAssignmentManager.MockRSExecutor.html | 4 +-
...ockRSProcedureDispatcher.MockRemoteCall.html | 6 +-
...gnmentManager.MockRSProcedureDispatcher.html | 10 +-
.../TestAssignmentManager.RandRsExecutor.html | 12 +-
.../assignment/TestAssignmentManager.html | 2 +-
...rashProcedureStuck.DummyRegionProcedure.html | 125 +
...estServerCrashProcedureStuck.DummyState.html | 205 +
.../TestServerCrashProcedureStuck.html | 125 +
.../hadoop/hbase/master/package-frame.html | 6 +
.../hadoop/hbase/master/package-summary.html | 25 +
.../hadoop/hbase/master/package-tree.html | 30 +
.../apache/hadoop/hbase/master/package-use.html | 5 +-
.../org/apache/hadoop/hbase/package-tree.html | 10 +-
.../hadoop/hbase/procedure/package-tree.html | 8 +-
.../hadoop/hbase/procedure2/package-tree.html | 2 +-
.../hadoop/hbase/regionserver/package-tree.html | 6 +-
.../rsgroup/TestRSGroups.CPMasterObserver.html | 94 +-
.../hadoop/hbase/rsgroup/TestRSGroups.html | 108 +-
.../apache/hadoop/hbase/test/package-tree.html | 4 +-
.../apache/hadoop/hbase/wal/package-tree.html | 2 +-
testdevapidocs/overview-tree.html | 7 +
testdevapidocs/serialized-form.html | 30 +-
...rashProcedureStuck.DummyRegionProcedure.html | 236 +
...estServerCrashProcedureStuck.DummyState.html | 236 +
.../master/TestServerCrashProcedureStuck.html | 236 +
.../TestAssignmentManager.FaultyRsExecutor.html | 252 +-
.../TestAssignmentManager.GoodRsExecutor.html | 252 +-
...tManager.HangOnCloseThenRSCrashExecutor.html | 252 +-
...signmentManager.HangThenRSCrashExecutor.html | 252 +-
...gnmentManager.HangThenRSRestartExecutor.html | 252 +-
.../TestAssignmentManager.MockRSExecutor.html | 252 +-
...ockRSProcedureDispatcher.MockRemoteCall.html | 252 +-
...gnmentManager.MockRSProcedureDispatcher.html | 252 +-
.../TestAssignmentManager.NoopRsExecutor.html | 252 +-
.../TestAssignmentManager.RandRsExecutor.html | 252 +-
...ntManager.ServerNotYetRunningRsExecutor.html | 252 +-
...signmentManager.SocketTimeoutRsExecutor.html | 252 +-
.../assignment/TestAssignmentManager.html | 252 +-
.../rsgroup/TestRSGroups.CPMasterObserver.html | 902 +-
.../hadoop/hbase/rsgroup/TestRSGroups.html | 902 +-
242 files changed, 38757 insertions(+), 32546 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index d655d36..fdf0519 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180604" />
+ <meta name="Date-Revision-yyyymmdd" content="20180605" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase –
Apache HBase (TM) ACID Properties
@@ -601,7 +601,7 @@ under the License. -->
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-06-04</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-06-05</li>
</p>
</div>
[30/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
index aa48364..9549aa5 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
@@ -2830,843 +2830,858 @@
<span class="sourceLineNo">2822</span> * @return true if master is in maintenanceMode<a name="line.2822"></a>
<span class="sourceLineNo">2823</span> */<a name="line.2823"></a>
<span class="sourceLineNo">2824</span> @Override<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span> public boolean isInMaintenanceMode() {<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span> return maintenanceModeTracker.isInMaintenanceMode();<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span> }<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span><a name="line.2828"></a>
-<span class="sourceLineNo">2829</span> @VisibleForTesting<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span> public void setInitialized(boolean isInitialized) {<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span> procedureExecutor.getEnvironment().setEventReady(initialized, isInitialized);<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span> }<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span><a name="line.2833"></a>
-<span class="sourceLineNo">2834</span> @Override<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span> public ProcedureEvent<?> getInitializedEvent() {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span> return initialized;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span> }<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span><a name="line.2838"></a>
-<span class="sourceLineNo">2839</span> /**<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span> * ServerCrashProcessingEnabled is set false before completing assignMeta to prevent processing<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span> * of crashed servers.<a name="line.2841"></a>
-<span class="sourceLineNo">2842</span> * @return true if assignMeta has completed;<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span> */<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span> @Override<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span> public boolean isServerCrashProcessingEnabled() {<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span> return serverCrashProcessingEnabled.isReady();<a name="line.2846"></a>
-<span class="sourceLineNo">2847</span> }<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span><a name="line.2848"></a>
-<span class="sourceLineNo">2849</span> @VisibleForTesting<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span> public void setServerCrashProcessingEnabled(final boolean b) {<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span> procedureExecutor.getEnvironment().setEventReady(serverCrashProcessingEnabled, b);<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span> }<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span><a name="line.2853"></a>
-<span class="sourceLineNo">2854</span> public ProcedureEvent<?> getServerCrashProcessingEnabledEvent() {<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span> return serverCrashProcessingEnabled;<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span> }<a name="line.2856"></a>
-<span class="sourceLineNo">2857</span><a name="line.2857"></a>
-<span class="sourceLineNo">2858</span> /**<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span> * Compute the average load across all region servers.<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span> * Currently, this uses a very naive computation - just uses the number of<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span> * regions being served, ignoring stats about number of requests.<a name="line.2861"></a>
-<span class="sourceLineNo">2862</span> * @return the average load<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span> */<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span> public double getAverageLoad() {<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span> if (this.assignmentManager == null) {<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span> return 0;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span> }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span> RegionStates regionStates = this.assignmentManager.getRegionStates();<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span> if (regionStates == null) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span> return 0;<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span> }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span> return regionStates.getAverageLoad();<a name="line.2873"></a>
-<span class="sourceLineNo">2874</span> }<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span><a name="line.2875"></a>
-<span class="sourceLineNo">2876</span> /*<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span> * @return the count of region split plans executed<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span> */<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span> public long getSplitPlanCount() {<a name="line.2879"></a>
-<span class="sourceLineNo">2880</span> return splitPlanCount;<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span> }<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span><a name="line.2882"></a>
-<span class="sourceLineNo">2883</span> /*<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span> * @return the count of region merge plans executed<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span> */<a name="line.2885"></a>
-<span class="sourceLineNo">2886</span> public long getMergePlanCount() {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span> return mergePlanCount;<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span> }<a name="line.2888"></a>
-<span class="sourceLineNo">2889</span><a name="line.2889"></a>
-<span class="sourceLineNo">2890</span> @Override<a name="line.2890"></a>
-<span class="sourceLineNo">2891</span> public boolean registerService(Service instance) {<a name="line.2891"></a>
-<span class="sourceLineNo">2892</span> /*<a name="line.2892"></a>
-<span class="sourceLineNo">2893</span> * No stacking of instances is allowed for a single service name<a name="line.2893"></a>
-<span class="sourceLineNo">2894</span> */<a name="line.2894"></a>
-<span class="sourceLineNo">2895</span> Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.2895"></a>
-<span class="sourceLineNo">2896</span> String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.2896"></a>
-<span class="sourceLineNo">2897</span> if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.2897"></a>
-<span class="sourceLineNo">2898</span> LOG.error("Coprocessor service "+serviceName+<a name="line.2898"></a>
-<span class="sourceLineNo">2899</span> " already registered, rejecting request from "+instance<a name="line.2899"></a>
-<span class="sourceLineNo">2900</span> );<a name="line.2900"></a>
-<span class="sourceLineNo">2901</span> return false;<a name="line.2901"></a>
-<span class="sourceLineNo">2902</span> }<a name="line.2902"></a>
-<span class="sourceLineNo">2903</span><a name="line.2903"></a>
-<span class="sourceLineNo">2904</span> coprocessorServiceHandlers.put(serviceName, instance);<a name="line.2904"></a>
-<span class="sourceLineNo">2905</span> if (LOG.isDebugEnabled()) {<a name="line.2905"></a>
-<span class="sourceLineNo">2906</span> LOG.debug("Registered master coprocessor service: service="+serviceName);<a name="line.2906"></a>
-<span class="sourceLineNo">2907</span> }<a name="line.2907"></a>
-<span class="sourceLineNo">2908</span> return true;<a name="line.2908"></a>
-<span class="sourceLineNo">2909</span> }<a name="line.2909"></a>
-<span class="sourceLineNo">2910</span><a name="line.2910"></a>
-<span class="sourceLineNo">2911</span> /**<a name="line.2911"></a>
-<span class="sourceLineNo">2912</span> * Utility for constructing an instance of the passed HMaster class.<a name="line.2912"></a>
-<span class="sourceLineNo">2913</span> * @param masterClass<a name="line.2913"></a>
-<span class="sourceLineNo">2914</span> * @return HMaster instance.<a name="line.2914"></a>
-<span class="sourceLineNo">2915</span> */<a name="line.2915"></a>
-<span class="sourceLineNo">2916</span> public static HMaster constructMaster(Class<? extends HMaster> masterClass,<a name="line.2916"></a>
-<span class="sourceLineNo">2917</span> final Configuration conf) {<a name="line.2917"></a>
-<span class="sourceLineNo">2918</span> try {<a name="line.2918"></a>
-<span class="sourceLineNo">2919</span> Constructor<? extends HMaster> c = masterClass.getConstructor(Configuration.class);<a name="line.2919"></a>
-<span class="sourceLineNo">2920</span> return c.newInstance(conf);<a name="line.2920"></a>
-<span class="sourceLineNo">2921</span> } catch(Exception e) {<a name="line.2921"></a>
-<span class="sourceLineNo">2922</span> Throwable error = e;<a name="line.2922"></a>
-<span class="sourceLineNo">2923</span> if (e instanceof InvocationTargetException &&<a name="line.2923"></a>
-<span class="sourceLineNo">2924</span> ((InvocationTargetException)e).getTargetException() != null) {<a name="line.2924"></a>
-<span class="sourceLineNo">2925</span> error = ((InvocationTargetException)e).getTargetException();<a name="line.2925"></a>
-<span class="sourceLineNo">2926</span> }<a name="line.2926"></a>
-<span class="sourceLineNo">2927</span> throw new RuntimeException("Failed construction of Master: " + masterClass.toString() + ". "<a name="line.2927"></a>
-<span class="sourceLineNo">2928</span> , error);<a name="line.2928"></a>
-<span class="sourceLineNo">2929</span> }<a name="line.2929"></a>
-<span class="sourceLineNo">2930</span> }<a name="line.2930"></a>
-<span class="sourceLineNo">2931</span><a name="line.2931"></a>
-<span class="sourceLineNo">2932</span> /**<a name="line.2932"></a>
-<span class="sourceLineNo">2933</span> * @see org.apache.hadoop.hbase.master.HMasterCommandLine<a name="line.2933"></a>
-<span class="sourceLineNo">2934</span> */<a name="line.2934"></a>
-<span class="sourceLineNo">2935</span> public static void main(String [] args) {<a name="line.2935"></a>
-<span class="sourceLineNo">2936</span> LOG.info("STARTING service " + HMaster.class.getSimpleName());<a name="line.2936"></a>
-<span class="sourceLineNo">2937</span> VersionInfo.logVersion();<a name="line.2937"></a>
-<span class="sourceLineNo">2938</span> new HMasterCommandLine(HMaster.class).doMain(args);<a name="line.2938"></a>
-<span class="sourceLineNo">2939</span> }<a name="line.2939"></a>
-<span class="sourceLineNo">2940</span><a name="line.2940"></a>
-<span class="sourceLineNo">2941</span> public HFileCleaner getHFileCleaner() {<a name="line.2941"></a>
-<span class="sourceLineNo">2942</span> return this.hfileCleaner;<a name="line.2942"></a>
-<span class="sourceLineNo">2943</span> }<a name="line.2943"></a>
-<span class="sourceLineNo">2944</span><a name="line.2944"></a>
-<span class="sourceLineNo">2945</span> public LogCleaner getLogCleaner() {<a name="line.2945"></a>
-<span class="sourceLineNo">2946</span> return this.logCleaner;<a name="line.2946"></a>
-<span class="sourceLineNo">2947</span> }<a name="line.2947"></a>
-<span class="sourceLineNo">2948</span><a name="line.2948"></a>
-<span class="sourceLineNo">2949</span> /**<a name="line.2949"></a>
-<span class="sourceLineNo">2950</span> * @return the underlying snapshot manager<a name="line.2950"></a>
-<span class="sourceLineNo">2951</span> */<a name="line.2951"></a>
-<span class="sourceLineNo">2952</span> @Override<a name="line.2952"></a>
-<span class="sourceLineNo">2953</span> public SnapshotManager getSnapshotManager() {<a name="line.2953"></a>
-<span class="sourceLineNo">2954</span> return this.snapshotManager;<a name="line.2954"></a>
-<span class="sourceLineNo">2955</span> }<a name="line.2955"></a>
-<span class="sourceLineNo">2956</span><a name="line.2956"></a>
-<span class="sourceLineNo">2957</span> /**<a name="line.2957"></a>
-<span class="sourceLineNo">2958</span> * @return the underlying MasterProcedureManagerHost<a name="line.2958"></a>
-<span class="sourceLineNo">2959</span> */<a name="line.2959"></a>
-<span class="sourceLineNo">2960</span> @Override<a name="line.2960"></a>
-<span class="sourceLineNo">2961</span> public MasterProcedureManagerHost getMasterProcedureManagerHost() {<a name="line.2961"></a>
-<span class="sourceLineNo">2962</span> return mpmHost;<a name="line.2962"></a>
-<span class="sourceLineNo">2963</span> }<a name="line.2963"></a>
-<span class="sourceLineNo">2964</span><a name="line.2964"></a>
-<span class="sourceLineNo">2965</span> @Override<a name="line.2965"></a>
-<span class="sourceLineNo">2966</span> public ClusterSchema getClusterSchema() {<a name="line.2966"></a>
-<span class="sourceLineNo">2967</span> return this.clusterSchemaService;<a name="line.2967"></a>
-<span class="sourceLineNo">2968</span> }<a name="line.2968"></a>
-<span class="sourceLineNo">2969</span><a name="line.2969"></a>
-<span class="sourceLineNo">2970</span> /**<a name="line.2970"></a>
-<span class="sourceLineNo">2971</span> * Create a new Namespace.<a name="line.2971"></a>
-<span class="sourceLineNo">2972</span> * @param namespaceDescriptor descriptor for new Namespace<a name="line.2972"></a>
-<span class="sourceLineNo">2973</span> * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.2973"></a>
-<span class="sourceLineNo">2974</span> * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.2974"></a>
-<span class="sourceLineNo">2975</span> * <code>nonceGroup</code> (the source must ensure each operation gets a unique id).<a name="line.2975"></a>
-<span class="sourceLineNo">2976</span> * @return procedure id<a name="line.2976"></a>
-<span class="sourceLineNo">2977</span> */<a name="line.2977"></a>
-<span class="sourceLineNo">2978</span> long createNamespace(final NamespaceDescriptor namespaceDescriptor, final long nonceGroup,<a name="line.2978"></a>
-<span class="sourceLineNo">2979</span> final long nonce) throws IOException {<a name="line.2979"></a>
-<span class="sourceLineNo">2980</span> checkInitialized();<a name="line.2980"></a>
-<span class="sourceLineNo">2981</span><a name="line.2981"></a>
-<span class="sourceLineNo">2982</span> TableName.isLegalNamespaceName(Bytes.toBytes(namespaceDescriptor.getName()));<a name="line.2982"></a>
-<span class="sourceLineNo">2983</span><a name="line.2983"></a>
-<span class="sourceLineNo">2984</span> return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.2984"></a>
-<span class="sourceLineNo">2985</span> nonceGroup, nonce) {<a name="line.2985"></a>
-<span class="sourceLineNo">2986</span> @Override<a name="line.2986"></a>
-<span class="sourceLineNo">2987</span> protected void run() throws IOException {<a name="line.2987"></a>
-<span class="sourceLineNo">2988</span> getMaster().getMasterCoprocessorHost().preCreateNamespace(namespaceDescriptor);<a name="line.2988"></a>
-<span class="sourceLineNo">2989</span> // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.2989"></a>
-<span class="sourceLineNo">2990</span> // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.2990"></a>
-<span class="sourceLineNo">2991</span> ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.2991"></a>
-<span class="sourceLineNo">2992</span> LOG.info(getClientIdAuditPrefix() + " creating " + namespaceDescriptor);<a name="line.2992"></a>
-<span class="sourceLineNo">2993</span> // Execute the operation synchronously - wait for the operation to complete before<a name="line.2993"></a>
-<span class="sourceLineNo">2994</span> // continuing.<a name="line.2994"></a>
-<span class="sourceLineNo">2995</span> setProcId(getClusterSchema().createNamespace(namespaceDescriptor, getNonceKey(), latch));<a name="line.2995"></a>
-<span class="sourceLineNo">2996</span> latch.await();<a name="line.2996"></a>
-<span class="sourceLineNo">2997</span> getMaster().getMasterCoprocessorHost().postCreateNamespace(namespaceDescriptor);<a name="line.2997"></a>
-<span class="sourceLineNo">2998</span> }<a name="line.2998"></a>
-<span class="sourceLineNo">2999</span><a name="line.2999"></a>
-<span class="sourceLineNo">3000</span> @Override<a name="line.3000"></a>
-<span class="sourceLineNo">3001</span> protected String getDescription() {<a name="line.3001"></a>
-<span class="sourceLineNo">3002</span> return "CreateNamespaceProcedure";<a name="line.3002"></a>
-<span class="sourceLineNo">3003</span> }<a name="line.3003"></a>
-<span class="sourceLineNo">3004</span> });<a name="line.3004"></a>
-<span class="sourceLineNo">3005</span> }<a name="line.3005"></a>
-<span class="sourceLineNo">3006</span><a name="line.3006"></a>
-<span class="sourceLineNo">3007</span> /**<a name="line.3007"></a>
-<span class="sourceLineNo">3008</span> * Modify an existing Namespace.<a name="line.3008"></a>
-<span class="sourceLineNo">3009</span> * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.3009"></a>
-<span class="sourceLineNo">3010</span> * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.3010"></a>
-<span class="sourceLineNo">3011</span> * <code>nonceGroup</code> (the source must ensure each operation gets a unique id).<a name="line.3011"></a>
-<span class="sourceLineNo">3012</span> * @return procedure id<a name="line.3012"></a>
-<span class="sourceLineNo">3013</span> */<a name="line.3013"></a>
-<span class="sourceLineNo">3014</span> long modifyNamespace(final NamespaceDescriptor newNsDescriptor, final long nonceGroup,<a name="line.3014"></a>
-<span class="sourceLineNo">3015</span> final long nonce) throws IOException {<a name="line.3015"></a>
-<span class="sourceLineNo">3016</span> checkInitialized();<a name="line.3016"></a>
-<span class="sourceLineNo">3017</span><a name="line.3017"></a>
-<span class="sourceLineNo">3018</span> TableName.isLegalNamespaceName(Bytes.toBytes(newNsDescriptor.getName()));<a name="line.3018"></a>
-<span class="sourceLineNo">3019</span><a name="line.3019"></a>
-<span class="sourceLineNo">3020</span> return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.3020"></a>
-<span class="sourceLineNo">3021</span> nonceGroup, nonce) {<a name="line.3021"></a>
-<span class="sourceLineNo">3022</span> @Override<a name="line.3022"></a>
-<span class="sourceLineNo">3023</span> protected void run() throws IOException {<a name="line.3023"></a>
-<span class="sourceLineNo">3024</span> NamespaceDescriptor oldNsDescriptor = getNamespace(newNsDescriptor.getName());<a name="line.3024"></a>
-<span class="sourceLineNo">3025</span> getMaster().getMasterCoprocessorHost().preModifyNamespace(oldNsDescriptor, newNsDescriptor);<a name="line.3025"></a>
-<span class="sourceLineNo">3026</span> // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.3026"></a>
-<span class="sourceLineNo">3027</span> // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.3027"></a>
-<span class="sourceLineNo">3028</span> ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.3028"></a>
-<span class="sourceLineNo">3029</span> LOG.info(getClientIdAuditPrefix() + " modify " + newNsDescriptor);<a name="line.3029"></a>
-<span class="sourceLineNo">3030</span> // Execute the operation synchronously - wait for the operation to complete before<a name="line.3030"></a>
-<span class="sourceLineNo">3031</span> // continuing.<a name="line.3031"></a>
-<span class="sourceLineNo">3032</span> setProcId(getClusterSchema().modifyNamespace(newNsDescriptor, getNonceKey(), latch));<a name="line.3032"></a>
-<span class="sourceLineNo">3033</span> latch.await();<a name="line.3033"></a>
-<span class="sourceLineNo">3034</span> getMaster().getMasterCoprocessorHost().postModifyNamespace(oldNsDescriptor,<a name="line.3034"></a>
-<span class="sourceLineNo">3035</span> newNsDescriptor);<a name="line.3035"></a>
-<span class="sourceLineNo">3036</span> }<a name="line.3036"></a>
-<span class="sourceLineNo">3037</span><a name="line.3037"></a>
-<span class="sourceLineNo">3038</span> @Override<a name="line.3038"></a>
-<span class="sourceLineNo">3039</span> protected String getDescription() {<a name="line.3039"></a>
-<span class="sourceLineNo">3040</span> return "ModifyNamespaceProcedure";<a name="line.3040"></a>
-<span class="sourceLineNo">3041</span> }<a name="line.3041"></a>
-<span class="sourceLineNo">3042</span> });<a name="line.3042"></a>
-<span class="sourceLineNo">3043</span> }<a name="line.3043"></a>
-<span class="sourceLineNo">3044</span><a name="line.3044"></a>
-<span class="sourceLineNo">3045</span> /**<a name="line.3045"></a>
-<span class="sourceLineNo">3046</span> * Delete an existing Namespace. Only empty Namespaces (no tables) can be removed.<a name="line.3046"></a>
-<span class="sourceLineNo">3047</span> * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.3047"></a>
-<span class="sourceLineNo">3048</span> * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.3048"></a>
-<span class="sourceLineNo">3049</span> * <code>nonceGroup</code> (the source must ensure each operation gets a unique id).<a name="line.3049"></a>
-<span class="sourceLineNo">3050</span> * @return procedure id<a name="line.3050"></a>
-<span class="sourceLineNo">3051</span> */<a name="line.3051"></a>
-<span class="sourceLineNo">3052</span> long deleteNamespace(final String name, final long nonceGroup, final long nonce)<a name="line.3052"></a>
-<span class="sourceLineNo">3053</span> throws IOException {<a name="line.3053"></a>
-<span class="sourceLineNo">3054</span> checkInitialized();<a name="line.3054"></a>
-<span class="sourceLineNo">3055</span><a name="line.3055"></a>
-<span class="sourceLineNo">3056</span> return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.3056"></a>
-<span class="sourceLineNo">3057</span> nonceGroup, nonce) {<a name="line.3057"></a>
-<span class="sourceLineNo">3058</span> @Override<a name="line.3058"></a>
-<span class="sourceLineNo">3059</span> protected void run() throws IOException {<a name="line.3059"></a>
-<span class="sourceLineNo">3060</span> getMaster().getMasterCoprocessorHost().preDeleteNamespace(name);<a name="line.3060"></a>
-<span class="sourceLineNo">3061</span> LOG.info(getClientIdAuditPrefix() + " delete " + name);<a name="line.3061"></a>
-<span class="sourceLineNo">3062</span> // Execute the operation synchronously - wait for the operation to complete before<a name="line.3062"></a>
-<span class="sourceLineNo">3063</span> // continuing.<a name="line.3063"></a>
-<span class="sourceLineNo">3064</span> //<a name="line.3064"></a>
-<span class="sourceLineNo">3065</span> // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.3065"></a>
-<span class="sourceLineNo">3066</span> // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.3066"></a>
-<span class="sourceLineNo">3067</span> ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.3067"></a>
-<span class="sourceLineNo">3068</span> setProcId(submitProcedure(<a name="line.3068"></a>
-<span class="sourceLineNo">3069</span> new DeleteNamespaceProcedure(procedureExecutor.getEnvironment(), name, latch)));<a name="line.3069"></a>
-<span class="sourceLineNo">3070</span> latch.await();<a name="line.3070"></a>
-<span class="sourceLineNo">3071</span> // Will not be invoked in the face of Exception thrown by the Procedure's execution<a name="line.3071"></a>
-<span class="sourceLineNo">3072</span> getMaster().getMasterCoprocessorHost().postDeleteNamespace(name);<a name="line.3072"></a>
-<span class="sourceLineNo">3073</span> }<a name="line.3073"></a>
-<span class="sourceLineNo">3074</span><a name="line.3074"></a>
-<span class="sourceLineNo">3075</span> @Override<a name="line.3075"></a>
-<span class="sourceLineNo">3076</span> protected String getDescription() {<a name="line.3076"></a>
-<span class="sourceLineNo">3077</span> return "DeleteNamespaceProcedure";<a name="line.3077"></a>
-<span class="sourceLineNo">3078</span> }<a name="line.3078"></a>
-<span class="sourceLineNo">3079</span> });<a name="line.3079"></a>
-<span class="sourceLineNo">3080</span> }<a name="line.3080"></a>
-<span class="sourceLineNo">3081</span><a name="line.3081"></a>
-<span class="sourceLineNo">3082</span> /**<a name="line.3082"></a>
-<span class="sourceLineNo">3083</span> * Get a Namespace<a name="line.3083"></a>
-<span class="sourceLineNo">3084</span> * @param name Name of the Namespace<a name="line.3084"></a>
-<span class="sourceLineNo">3085</span> * @return Namespace descriptor for <code>name</code><a name="line.3085"></a>
-<span class="sourceLineNo">3086</span> */<a name="line.3086"></a>
-<span class="sourceLineNo">3087</span> NamespaceDescriptor getNamespace(String name) throws IOException {<a name="line.3087"></a>
-<span class="sourceLineNo">3088</span> checkInitialized();<a name="line.3088"></a>
-<span class="sourceLineNo">3089</span> if (this.cpHost != null) this.cpHost.preGetNamespaceDescriptor(name);<a name="line.3089"></a>
-<span class="sourceLineNo">3090</span> NamespaceDescriptor nsd = this.clusterSchemaService.getNamespace(name);<a name="line.3090"></a>
-<span class="sourceLineNo">3091</span> if (this.cpHost != null) this.cpHost.postGetNamespaceDescriptor(nsd);<a name="line.3091"></a>
-<span class="sourceLineNo">3092</span> return nsd;<a name="line.3092"></a>
-<span class="sourceLineNo">3093</span> }<a name="line.3093"></a>
-<span class="sourceLineNo">3094</span><a name="line.3094"></a>
-<span class="sourceLineNo">3095</span> /**<a name="line.3095"></a>
-<span class="sourceLineNo">3096</span> * Get all Namespaces<a name="line.3096"></a>
-<span class="sourceLineNo">3097</span> * @return All Namespace descriptors<a name="line.3097"></a>
-<span class="sourceLineNo">3098</span> */<a name="line.3098"></a>
-<span class="sourceLineNo">3099</span> List<NamespaceDescriptor> getNamespaces() throws IOException {<a name="line.3099"></a>
-<span class="sourceLineNo">3100</span> checkInitialized();<a name="line.3100"></a>
-<span class="sourceLineNo">3101</span> final List<NamespaceDescriptor> nsds = new ArrayList<>();<a name="line.3101"></a>
-<span class="sourceLineNo">3102</span> if (cpHost != null) {<a name="line.3102"></a>
-<span class="sourceLineNo">3103</span> cpHost.preListNamespaceDescriptors(nsds);<a name="line.3103"></a>
-<span class="sourceLineNo">3104</span> }<a name="line.3104"></a>
-<span class="sourceLineNo">3105</span> nsds.addAll(this.clusterSchemaService.getNamespaces());<a name="line.3105"></a>
-<span class="sourceLineNo">3106</span> if (this.cpHost != null) {<a name="line.3106"></a>
-<span class="sourceLineNo">3107</span> this.cpHost.postListNamespaceDescriptors(nsds);<a name="line.3107"></a>
-<span class="sourceLineNo">3108</span> }<a name="line.3108"></a>
-<span class="sourceLineNo">3109</span> return nsds;<a name="line.3109"></a>
-<span class="sourceLineNo">3110</span> }<a name="line.3110"></a>
-<span class="sourceLineNo">3111</span><a name="line.3111"></a>
-<span class="sourceLineNo">3112</span> @Override<a name="line.3112"></a>
-<span class="sourceLineNo">3113</span> public List<TableName> listTableNamesByNamespace(String name) throws IOException {<a name="line.3113"></a>
-<span class="sourceLineNo">3114</span> checkInitialized();<a name="line.3114"></a>
-<span class="sourceLineNo">3115</span> return listTableNames(name, null, true);<a name="line.3115"></a>
-<span class="sourceLineNo">3116</span> }<a name="line.3116"></a>
-<span class="sourceLineNo">3117</span><a name="line.3117"></a>
-<span class="sourceLineNo">3118</span> @Override<a name="line.3118"></a>
-<span class="sourceLineNo">3119</span> public List<TableDescriptor> listTableDescriptorsByNamespace(String name) throws IOException {<a name="line.3119"></a>
-<span class="sourceLineNo">3120</span> checkInitialized();<a name="line.3120"></a>
-<span class="sourceLineNo">3121</span> return listTableDescriptors(name, null, null, true);<a name="line.3121"></a>
-<span class="sourceLineNo">3122</span> }<a name="line.3122"></a>
-<span class="sourceLineNo">3123</span><a name="line.3123"></a>
-<span class="sourceLineNo">3124</span> @Override<a name="line.3124"></a>
-<span class="sourceLineNo">3125</span> public boolean abortProcedure(final long procId, final boolean mayInterruptIfRunning)<a name="line.3125"></a>
-<span class="sourceLineNo">3126</span> throws IOException {<a name="line.3126"></a>
-<span class="sourceLineNo">3127</span> if (cpHost != null) {<a name="line.3127"></a>
-<span class="sourceLineNo">3128</span> cpHost.preAbortProcedure(this.procedureExecutor, procId);<a name="line.3128"></a>
-<span class="sourceLineNo">3129</span> }<a name="line.3129"></a>
-<span class="sourceLineNo">3130</span><a name="line.3130"></a>
-<span class="sourceLineNo">3131</span> final boolean result = this.procedureExecutor.abort(procId, mayInterruptIfRunning);<a name="line.3131"></a>
-<span class="sourceLineNo">3132</span><a name="line.3132"></a>
-<span class="sourceLineNo">3133</span> if (cpHost != null) {<a name="line.3133"></a>
-<span class="sourceLineNo">3134</span> cpHost.postAbortProcedure();<a name="line.3134"></a>
-<span class="sourceLineNo">3135</span> }<a name="line.3135"></a>
-<span class="sourceLineNo">3136</span><a name="line.3136"></a>
-<span class="sourceLineNo">3137</span> return result;<a name="line.3137"></a>
-<span class="sourceLineNo">3138</span> }<a name="line.3138"></a>
+<span class="sourceLineNo">2825</span> public boolean isInMaintenanceMode() throws IOException {<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span> if (!isInitialized()) {<a name="line.2826"></a>
+<span class="sourceLineNo">2827</span> throw new PleaseHoldException("Master is initializing");<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span> }<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span> return maintenanceModeTracker.isInMaintenanceMode();<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span> }<a name="line.2830"></a>
+<span class="sourceLineNo">2831</span><a name="line.2831"></a>
+<span class="sourceLineNo">2832</span> @VisibleForTesting<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span> public void setInitialized(boolean isInitialized) {<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span> procedureExecutor.getEnvironment().setEventReady(initialized, isInitialized);<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span> }<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span><a name="line.2836"></a>
+<span class="sourceLineNo">2837</span> @Override<a name="line.2837"></a>
+<span class="sourceLineNo">2838</span> public ProcedureEvent<?> getInitializedEvent() {<a name="line.2838"></a>
+<span class="sourceLineNo">2839</span> return initialized;<a name="line.2839"></a>
+<span class="sourceLineNo">2840</span> }<a name="line.2840"></a>
+<span class="sourceLineNo">2841</span><a name="line.2841"></a>
+<span class="sourceLineNo">2842</span> /**<a name="line.2842"></a>
+<span class="sourceLineNo">2843</span> * ServerCrashProcessingEnabled is set false before completing assignMeta to prevent processing<a name="line.2843"></a>
+<span class="sourceLineNo">2844</span> * of crashed servers.<a name="line.2844"></a>
+<span class="sourceLineNo">2845</span> * @return true if assignMeta has completed;<a name="line.2845"></a>
+<span class="sourceLineNo">2846</span> */<a name="line.2846"></a>
+<span class="sourceLineNo">2847</span> @Override<a name="line.2847"></a>
+<span class="sourceLineNo">2848</span> public boolean isServerCrashProcessingEnabled() {<a name="line.2848"></a>
+<span class="sourceLineNo">2849</span> return serverCrashProcessingEnabled.isReady();<a name="line.2849"></a>
+<span class="sourceLineNo">2850</span> }<a name="line.2850"></a>
+<span class="sourceLineNo">2851</span><a name="line.2851"></a>
+<span class="sourceLineNo">2852</span> @VisibleForTesting<a name="line.2852"></a>
+<span class="sourceLineNo">2853</span> public void setServerCrashProcessingEnabled(final boolean b) {<a name="line.2853"></a>
+<span class="sourceLineNo">2854</span> procedureExecutor.getEnvironment().setEventReady(serverCrashProcessingEnabled, b);<a name="line.2854"></a>
+<span class="sourceLineNo">2855</span> }<a name="line.2855"></a>
+<span class="sourceLineNo">2856</span><a name="line.2856"></a>
+<span class="sourceLineNo">2857</span> public ProcedureEvent<?> getServerCrashProcessingEnabledEvent() {<a name="line.2857"></a>
+<span class="sourceLineNo">2858</span> return serverCrashProcessingEnabled;<a name="line.2858"></a>
+<span class="sourceLineNo">2859</span> }<a name="line.2859"></a>
+<span class="sourceLineNo">2860</span><a name="line.2860"></a>
+<span class="sourceLineNo">2861</span> /**<a name="line.2861"></a>
+<span class="sourceLineNo">2862</span> * Compute the average load across all region servers.<a name="line.2862"></a>
+<span class="sourceLineNo">2863</span> * Currently, this uses a very naive computation - just uses the number of<a name="line.2863"></a>
+<span class="sourceLineNo">2864</span> * regions being served, ignoring stats about number of requests.<a name="line.2864"></a>
+<span class="sourceLineNo">2865</span> * @return the average load<a name="line.2865"></a>
+<span class="sourceLineNo">2866</span> */<a name="line.2866"></a>
+<span class="sourceLineNo">2867</span> public double getAverageLoad() {<a name="line.2867"></a>
+<span class="sourceLineNo">2868</span> if (this.assignmentManager == null) {<a name="line.2868"></a>
+<span class="sourceLineNo">2869</span> return 0;<a name="line.2869"></a>
+<span class="sourceLineNo">2870</span> }<a name="line.2870"></a>
+<span class="sourceLineNo">2871</span><a name="line.2871"></a>
+<span class="sourceLineNo">2872</span> RegionStates regionStates = this.assignmentManager.getRegionStates();<a name="line.2872"></a>
+<span class="sourceLineNo">2873</span> if (regionStates == null) {<a name="line.2873"></a>
+<span class="sourceLineNo">2874</span> return 0;<a name="line.2874"></a>
+<span class="sourceLineNo">2875</span> }<a name="line.2875"></a>
+<span class="sourceLineNo">2876</span> return regionStates.getAverageLoad();<a name="line.2876"></a>
+<span class="sourceLineNo">2877</span> }<a name="line.2877"></a>
+<span class="sourceLineNo">2878</span><a name="line.2878"></a>
+<span class="sourceLineNo">2879</span> /*<a name="line.2879"></a>
+<span class="sourceLineNo">2880</span> * @return the count of region split plans executed<a name="line.2880"></a>
+<span class="sourceLineNo">2881</span> */<a name="line.2881"></a>
+<span class="sourceLineNo">2882</span> public long getSplitPlanCount() {<a name="line.2882"></a>
+<span class="sourceLineNo">2883</span> return splitPlanCount;<a name="line.2883"></a>
+<span class="sourceLineNo">2884</span> }<a name="line.2884"></a>
+<span class="sourceLineNo">2885</span><a name="line.2885"></a>
+<span class="sourceLineNo">2886</span> /*<a name="line.2886"></a>
+<span class="sourceLineNo">2887</span> * @return the count of region merge plans executed<a name="line.2887"></a>
+<span class="sourceLineNo">2888</span> */<a name="line.2888"></a>
+<span class="sourceLineNo">2889</span> public long getMergePlanCount() {<a name="line.2889"></a>
+<span class="sourceLineNo">2890</span> return mergePlanCount;<a name="line.2890"></a>
+<span class="sourceLineNo">2891</span> }<a name="line.2891"></a>
+<span class="sourceLineNo">2892</span><a name="line.2892"></a>
+<span class="sourceLineNo">2893</span> @Override<a name="line.2893"></a>
+<span class="sourceLineNo">2894</span> public boolean registerService(Service instance) {<a name="line.2894"></a>
+<span class="sourceLineNo">2895</span> /*<a name="line.2895"></a>
+<span class="sourceLineNo">2896</span> * No stacking of instances is allowed for a single service name<a name="line.2896"></a>
+<span class="sourceLineNo">2897</span> */<a name="line.2897"></a>
+<span class="sourceLineNo">2898</span> Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.2898"></a>
+<span class="sourceLineNo">2899</span> String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.2899"></a>
+<span class="sourceLineNo">2900</span> if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.2900"></a>
+<span class="sourceLineNo">2901</span> LOG.error("Coprocessor service "+serviceName+<a name="line.2901"></a>
+<span class="sourceLineNo">2902</span> " already registered, rejecting request from "+instance<a name="line.2902"></a>
+<span class="sourceLineNo">2903</span> );<a name="line.2903"></a>
+<span class="sourceLineNo">2904</span> return false;<a name="line.2904"></a>
+<span class="sourceLineNo">2905</span> }<a name="line.2905"></a>
+<span class="sourceLineNo">2906</span><a name="line.2906"></a>
+<span class="sourceLineNo">2907</span> coprocessorServiceHandlers.put(serviceName, instance);<a name="line.2907"></a>
+<span class="sourceLineNo">2908</span> if (LOG.isDebugEnabled()) {<a name="line.2908"></a>
+<span class="sourceLineNo">2909</span> LOG.debug("Registered master coprocessor service: service="+serviceName);<a name="line.2909"></a>
+<span class="sourceLineNo">2910</span> }<a name="line.2910"></a>
+<span class="sourceLineNo">2911</span> return true;<a name="line.2911"></a>
+<span class="sourceLineNo">2912</span> }<a name="line.2912"></a>
+<span class="sourceLineNo">2913</span><a name="line.2913"></a>
+<span class="sourceLineNo">2914</span> /**<a name="line.2914"></a>
+<span class="sourceLineNo">2915</span> * Utility for constructing an instance of the passed HMaster class.<a name="line.2915"></a>
+<span class="sourceLineNo">2916</span> * @param masterClass<a name="line.2916"></a>
+<span class="sourceLineNo">2917</span> * @return HMaster instance.<a name="line.2917"></a>
+<span class="sourceLineNo">2918</span> */<a name="line.2918"></a>
+<span class="sourceLineNo">2919</span> public static HMaster constructMaster(Class<? extends HMaster> masterClass,<a name="line.2919"></a>
+<span class="sourceLineNo">2920</span> final Configuration conf) {<a name="line.2920"></a>
+<span class="sourceLineNo">2921</span> try {<a name="line.2921"></a>
+<span class="sourceLineNo">2922</span> Constructor<? extends HMaster> c = masterClass.getConstructor(Configuration.class);<a name="line.2922"></a>
+<span class="sourceLineNo">2923</span> return c.newInstance(conf);<a name="line.2923"></a>
+<span class="sourceLineNo">2924</span> } catch(Exception e) {<a name="line.2924"></a>
+<span class="sourceLineNo">2925</span> Throwable error = e;<a name="line.2925"></a>
+<span class="sourceLineNo">2926</span> if (e instanceof InvocationTargetException &&<a name="line.2926"></a>
+<span class="sourceLineNo">2927</span> ((InvocationTargetException)e).getTargetException() != null) {<a name="line.2927"></a>
+<span class="sourceLineNo">2928</span> error = ((InvocationTargetException)e).getTargetException();<a name="line.2928"></a>
+<span class="sourceLineNo">2929</span> }<a name="line.2929"></a>
+<span class="sourceLineNo">2930</span> throw new RuntimeException("Failed construction of Master: " + masterClass.toString() + ". "<a name="line.2930"></a>
+<span class="sourceLineNo">2931</span> , error);<a name="line.2931"></a>
+<span class="sourceLineNo">2932</span> }<a name="line.2932"></a>
+<span class="sourceLineNo">2933</span> }<a name="line.2933"></a>
+<span class="sourceLineNo">2934</span><a name="line.2934"></a>
+<span class="sourceLineNo">2935</span> /**<a name="line.2935"></a>
+<span class="sourceLineNo">2936</span> * @see org.apache.hadoop.hbase.master.HMasterCommandLine<a name="line.2936"></a>
+<span class="sourceLineNo">2937</span> */<a name="line.2937"></a>
+<span class="sourceLineNo">2938</span> public static void main(String [] args) {<a name="line.2938"></a>
+<span class="sourceLineNo">2939</span> LOG.info("STARTING service " + HMaster.class.getSimpleName());<a name="line.2939"></a>
+<span class="sourceLineNo">2940</span> VersionInfo.logVersion();<a name="line.2940"></a>
+<span class="sourceLineNo">2941</span> new HMasterCommandLine(HMaster.class).doMain(args);<a name="line.2941"></a>
+<span class="sourceLineNo">2942</span> }<a name="line.2942"></a>
+<span class="sourceLineNo">2943</span><a name="line.2943"></a>
+<span class="sourceLineNo">2944</span> public HFileCleaner getHFileCleaner() {<a name="line.2944"></a>
+<span class="sourceLineNo">2945</span> return this.hfileCleaner;<a name="line.2945"></a>
+<span class="sourceLineNo">2946</span> }<a name="line.2946"></a>
+<span class="sourceLineNo">2947</span><a name="line.2947"></a>
+<span class="sourceLineNo">2948</span> public LogCleaner getLogCleaner() {<a name="line.2948"></a>
+<span class="sourceLineNo">2949</span> return this.logCleaner;<a name="line.2949"></a>
+<span class="sourceLineNo">2950</span> }<a name="line.2950"></a>
+<span class="sourceLineNo">2951</span><a name="line.2951"></a>
+<span class="sourceLineNo">2952</span> /**<a name="line.2952"></a>
+<span class="sourceLineNo">2953</span> * @return the underlying snapshot manager<a name="line.2953"></a>
+<span class="sourceLineNo">2954</span> */<a name="line.2954"></a>
+<span class="sourceLineNo">2955</span> @Override<a name="line.2955"></a>
+<span class="sourceLineNo">2956</span> public SnapshotManager getSnapshotManager() {<a name="line.2956"></a>
+<span class="sourceLineNo">2957</span> return this.snapshotManager;<a name="line.2957"></a>
+<span class="sourceLineNo">2958</span> }<a name="line.2958"></a>
+<span class="sourceLineNo">2959</span><a name="line.2959"></a>
+<span class="sourceLineNo">2960</span> /**<a name="line.2960"></a>
+<span class="sourceLineNo">2961</span> * @return the underlying MasterProcedureManagerHost<a name="line.2961"></a>
+<span class="sourceLineNo">2962</span> */<a name="line.2962"></a>
+<span class="sourceLineNo">2963</span> @Override<a name="line.2963"></a>
+<span class="sourceLineNo">2964</span> public MasterProcedureManagerHost getMasterProcedureManagerHost() {<a name="line.2964"></a>
+<span class="sourceLineNo">2965</span> return mpmHost;<a name="line.2965"></a>
+<span class="sourceLineNo">2966</span> }<a name="line.2966"></a>
+<span class="sourceLineNo">2967</span><a name="line.2967"></a>
+<span class="sourceLineNo">2968</span> @Override<a name="line.2968"></a>
+<span class="sourceLineNo">2969</span> public ClusterSchema getClusterSchema() {<a name="line.2969"></a>
+<span class="sourceLineNo">2970</span> return this.clusterSchemaService;<a name="line.2970"></a>
+<span class="sourceLineNo">2971</span> }<a name="line.2971"></a>
+<span class="sourceLineNo">2972</span><a name="line.2972"></a>
+<span class="sourceLineNo">2973</span> /**<a name="line.2973"></a>
+<span class="sourceLineNo">2974</span> * Create a new Namespace.<a name="line.2974"></a>
+<span class="sourceLineNo">2975</span> * @param namespaceDescriptor descriptor for new Namespace<a name="line.2975"></a>
+<span class="sourceLineNo">2976</span> * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.2976"></a>
+<span class="sourceLineNo">2977</span> * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.2977"></a>
+<span class="sourceLineNo">2978</span> * <code>nonceGroup</code> (the source must ensure each operation gets a unique id).<a name="line.2978"></a>
+<span class="sourceLineNo">2979</span> * @return procedure id<a name="line.2979"></a>
+<span class="sourceLineNo">2980</span> */<a name="line.2980"></a>
+<span class="sourceLineNo">2981</span> long createNamespace(final NamespaceDescriptor namespaceDescriptor, final long nonceGroup,<a name="line.2981"></a>
+<span class="sourceLineNo">2982</span> final long nonce) throws IOException {<a name="line.2982"></a>
+<span class="sourceLineNo">2983</span> checkInitialized();<a name="line.2983"></a>
+<span class="sourceLineNo">2984</span><a name="line.2984"></a>
+<span class="sourceLineNo">2985</span> TableName.isLegalNamespaceName(Bytes.toBytes(namespaceDescriptor.getName()));<a name="line.2985"></a>
+<span class="sourceLineNo">2986</span><a name="line.2986"></a>
+<span class="sourceLineNo">2987</span> return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.2987"></a>
+<span class="sourceLineNo">2988</span> nonceGroup, nonce) {<a name="line.2988"></a>
+<span class="sourceLineNo">2989</span> @Override<a name="line.2989"></a>
+<span class="sourceLineNo">2990</span> protected void run() throws IOException {<a name="line.2990"></a>
+<span class="sourceLineNo">2991</span> getMaster().getMasterCoprocessorHost().preCreateNamespace(namespaceDescriptor);<a name="line.2991"></a>
+<span class="sourceLineNo">2992</span> // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.2992"></a>
+<span class="sourceLineNo">2993</span> // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.2993"></a>
+<span class="sourceLineNo">2994</span> ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.2994"></a>
+<span class="sourceLineNo">2995</span> LOG.info(getClientIdAuditPrefix() + " creating " + namespaceDescriptor);<a name="line.2995"></a>
+<span class="sourceLineNo">2996</span> // Execute the operation synchronously - wait for the operation to complete before<a name="line.2996"></a>
+<span class="sourceLineNo">2997</span> // continuing.<a name="line.2997"></a>
+<span class="sourceLineNo">2998</span> setProcId(getClusterSchema().createNamespace(namespaceDescriptor, getNonceKey(), latch));<a name="line.2998"></a>
+<span class="sourceLineNo">2999</span> latch.await();<a name="line.2999"></a>
+<span class="sourceLineNo">3000</span> getMaster().getMasterCoprocessorHost().postCreateNamespace(namespaceDescriptor);<a name="line.3000"></a>
+<span class="sourceLineNo">3001</span> }<a name="line.3001"></a>
+<span class="sourceLineNo">3002</span><a name="line.3002"></a>
+<span class="sourceLineNo">3003</span> @Override<a name="line.3003"></a>
+<span class="sourceLineNo">3004</span> protected String getDescription() {<a name="line.3004"></a>
+<span class="sourceLineNo">3005</span> return "CreateNamespaceProcedure";<a name="line.3005"></a>
+<span class="sourceLineNo">3006</span> }<a name="line.3006"></a>
+<span class="sourceLineNo">3007</span> });<a name="line.3007"></a>
+<span class="sourceLineNo">3008</span> }<a name="line.3008"></a>
+<span class="sourceLineNo">3009</span><a name="line.3009"></a>
+<span class="sourceLineNo">3010</span> /**<a name="line.3010"></a>
+<span class="sourceLineNo">3011</span> * Modify an existing Namespace.<a name="line.3011"></a>
+<span class="sourceLineNo">3012</span> * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.3012"></a>
+<span class="sourceLineNo">3013</span> * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.3013"></a>
+<span class="sourceLineNo">3014</span> * <code>nonceGroup</code> (the source must ensure each operation gets a unique id).<a name="line.3014"></a>
+<span class="sourceLineNo">3015</span> * @return procedure id<a name="line.3015"></a>
+<span class="sourceLineNo">3016</span> */<a name="line.3016"></a>
+<span class="sourceLineNo">3017</span> long modifyNamespace(final NamespaceDescriptor newNsDescriptor, final long nonceGroup,<a name="line.3017"></a>
+<span class="sourceLineNo">3018</span> final long nonce) throws IOException {<a name="line.3018"></a>
+<span class="sourceLineNo">3019</span> checkInitialized();<a name="line.3019"></a>
+<span class="sourceLineNo">3020</span><a name="line.3020"></a>
+<span class="sourceLineNo">3021</span> TableName.isLegalNamespaceName(Bytes.toBytes(newNsDescriptor.getName()));<a name="line.3021"></a>
+<span class="sourceLineNo">3022</span><a name="line.3022"></a>
+<span class="sourceLineNo">3023</span> return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.3023"></a>
+<span class="sourceLineNo">3024</span> nonceGroup, nonce) {<a name="line.3024"></a>
+<span class="sourceLineNo">3025</span> @Override<a name="line.3025"></a>
+<span class="sourceLineNo">3026</span> protected void run() throws IOException {<a name="line.3026"></a>
+<span class="sourceLineNo">3027</span> NamespaceDescriptor oldNsDescriptor = getNamespace(newNsDescriptor.getName());<a name="line.3027"></a>
+<span class="sourceLineNo">3028</span> getMaster().getMasterCoprocessorHost().preModifyNamespace(oldNsDescriptor, newNsDescriptor);<a name="line.3028"></a>
+<span class="sourceLineNo">3029</span> // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.3029"></a>
+<span class="sourceLineNo">3030</span> // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.3030"></a>
+<span class="sourceLineNo">3031</span> ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.3031"></a>
+<span class="sourceLineNo">3032</span> LOG.info(getClientIdAuditPrefix() + " modify " + newNsDescriptor);<a name="line.3032"></a>
+<span class="sourceLineNo">3033</span> // Execute the operation synchronously - wait for the operation to complete before<a name="line.3033"></a>
+<span class="sourceLineNo">3034</span> // continuing.<a name="line.3034"></a>
+<span class="sourceLineNo">3035</span> setProcId(getClusterSchema().modifyNamespace(newNsDescriptor, getNonceKey(), latch));<a name="line.3035"></a>
+<span class="sourceLineNo">3036</span> latch.await();<a name="line.3036"></a>
+<span class="sourceLineNo">3037</span> getMaster().getMasterCoprocessorHost().postModifyNamespace(oldNsDescriptor,<a name="line.3037"></a>
+<span class="sourceLineNo">3038</span> newNsDescriptor);<a name="line.3038"></a>
+<span class="sourceLineNo">3039</span> }<a name="line.3039"></a>
+<span class="sourceLineNo">3040</span><a name="line.3040"></a>
+<span class="sourceLineNo">3041</span> @Override<a name="line.3041"></a>
+<span class="sourceLineNo">3042</span> protected String getDescription() {<a name="line.3042"></a>
+<span class="sourceLineNo">3043</span> return "ModifyNamespaceProcedure";<a name="line.3043"></a>
+<span class="sourceLineNo">3044</span> }<a name="line.3044"></a>
+<span class="sourceLineNo">3045</span> });<a name="line.3045"></a>
+<span class="sourceLineNo">3046</span> }<a name="line.3046"></a>
+<span class="sourceLineNo">3047</span><a name="line.3047"></a>
+<span class="sourceLineNo">3048</span> /**<a name="line.3048"></a>
+<span class="sourceLineNo">3049</span> * Delete an existing Namespace. Only empty Namespaces (no tables) can be removed.<a name="line.3049"></a>
+<span class="sourceLineNo">3050</span> * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.3050"></a>
+<span class="sourceLineNo">3051</span> * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.3051"></a>
+<span class="sourceLineNo">3052</span> * <code>nonceGroup</code> (the source must ensure each operation gets a unique id).<a name="line.3052"></a>
+<span class="sourceLineNo">3053</span> * @return procedure id<a name="line.3053"></a>
+<span class="sourceLineNo">3054</span> */<a name="line.3054"></a>
+<span class="sourceLineNo">3055</span> long deleteNamespace(final String name, final long nonceGroup, final long nonce)<a name="line.3055"></a>
+<span class="sourceLineNo">3056</span> throws IOException {<a name="line.3056"></a>
+<span class="sourceLineNo">3057</span> checkInitialized();<a name="line.3057"></a>
+<span class="sourceLineNo">3058</span><a name="line.3058"></a>
+<span class="sourceLineNo">3059</span> return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.3059"></a>
+<span class="sourceLineNo">3060</span> nonceGroup, nonce) {<a name="line.3060"></a>
+<span class="sourceLineNo">3061</span> @Override<a name="line.3061"></a>
+<span class="sourceLineNo">3062</span> protected void run() throws IOException {<a name="line.3062"></a>
+<span class="sourceLineNo">3063</span> getMaster().getMasterCoprocessorHost().preDeleteNamespace(name);<a name="line.3063"></a>
+<span class="sourceLineNo">3064</span> LOG.info(getClientIdAuditPrefix() + " delete " + name);<a name="line.3064"></a>
+<span class="sourceLineNo">3065</span> // Execute the operation synchronously - wait for the operation to complete before<a name="line.3065"></a>
+<span class="sourceLineNo">3066</span> // continuing.<a name="line.3066"></a>
+<span class="sourceLineNo">3067</span> //<a name="line.3067"></a>
+<span class="sourceLineNo">3068</span> // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.3068"></a>
+<span class="sourceLineNo">3069</span> // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.3069"></a>
+<span class="sourceLineNo">3070</span> ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.3070"></a>
+<span class="sourceLineNo">3071</span> setProcId(submitProcedure(<a name="line.3071"></a>
+<span class="sourceLineNo">3072</span> new DeleteNamespaceProcedure(procedureExecutor.getEnvironment(), name, latch)));<a name="line.3072"></a>
+<span class="sourceLineNo">3073</span> latch.await();<a name="line.3073"></a>
+<span class="sourceLineNo">3074</span> // Will not be invoked in the face of Exception thrown by the Procedure's execution<a name="line.3074"></a>
+<span class="sourceLineNo">3075</span> getMaster().getMasterCoprocessorHost().postDeleteNamespace(name);<a name="line.3075"></a>
+<span class="sourceLineNo">3076</span> }<a name="line.3076"></a>
+<span class="sourceLineNo">3077</span><a name="line.3077"></a>
+<span class="sourceLineNo">3078</span> @Override<a name="line.3078"></a>
+<span class="sourceLineNo">3079</span> protected String getDescription() {<a name="line.3079"></a>
+<span class="sourceLineNo">3080</span> return "DeleteNamespaceProcedure";<a name="line.3080"></a>
+<span class="sourceLineNo">3081</span> }<a name="line.3081"></a>
+<span class="sourceLineNo">3082</span> });<a name="line.3082"></a>
+<span class="sourceLineNo">3083</span> }<a name="line.3083"></a>
+<span class="sourceLineNo">3084</span><a name="line.3084"></a>
+<span class="sourceLineNo">3085</span> /**<a name="line.3085"></a>
+<span class="sourceLineNo">3086</span> * Get a Namespace<a name="line.3086"></a>
+<span class="sourceLineNo">3087</span> * @param name Name of the Namespace<a name="line.3087"></a>
+<span class="sourceLineNo">3088</span> * @return Namespace descriptor for <code>name</code><a name="line.3088"></a>
+<span class="sourceLineNo">3089</span> */<a name="line.3089"></a>
+<span class="sourceLineNo">3090</span> NamespaceDescriptor getNamespace(String name) throws IOException {<a name="line.3090"></a>
+<span class="sourceLineNo">3091</span> checkInitialized();<a name="line.3091"></a>
+<span class="sourceLineNo">3092</span> if (this.cpHost != null) this.cpHost.preGetNamespaceDescriptor(name);<a name="line.3092"></a>
+<span class="sourceLineNo">3093</span> NamespaceDescriptor nsd = this.clusterSchemaService.getNamespace(name);<a name="line.3093"></a>
+<span class="sourceLineNo">3094</span> if (this.cpHost != null) this.cpHost.postGetNamespaceDescriptor(nsd);<a name="line.3094"></a>
+<span class="sourceLineNo">3095</span> return nsd;<a name="line.3095"></a>
+<span class="sourceLineNo">3096</span> }<a name="line.3096"></a>
+<span class="sourceLineNo">3097</span><a name="line.3097"></a>
+<span class="sourceLineNo">3098</span> /**<a name="line.3098"></a>
+<span class="sourceLineNo">3099</span> * Get all Namespaces<a name="line.3099"></a>
+<span class="sourceLineNo">3100</span> * @return All Namespace descriptors<a name="line.3100"></a>
+<span class="sourceLineNo">3101</span> */<a name="line.3101"></a>
+<span class="sourceLineNo">3102</span> List<NamespaceDescriptor> getNamespaces() throws IOException {<a name="line.3102"></a>
+<span class="sourceLineNo">3103</span> checkInitialized();<a name="line.3103"></a>
+<span class="sourceLineNo">3104</span> final List<NamespaceDescriptor> nsds = new ArrayList<>();<a name="line.3104"></a>
+<span class="sourceLineNo">3105</span> if (cpHost != null) {<a name="line.3105"></a>
+<span class="sourceLineNo">3106</span> cpHost.preListNamespaceDescriptors(nsds);<a name="line.3106"></a>
+<span class="sourceLineNo">3107</span> }<a name="line.3107"></a>
+<span class="sourceLineNo">3108</span> nsds.addAll(this.clusterSchemaService.getNamespaces());<a name="line.3108"></a>
+<span class="sourceLineNo">3109</span> if (this.cpHost != null) {<a name="line.3109"></a>
+<span class="sourceLineNo">3110</span> this.cpHost.postListNamespaceDescriptors(nsds);<a name="line.3110"></a>
+<span class="sourceLineNo">3111</span> }<a name="line.3111"></a>
+<span class="sourceLineNo">3112</span> return nsds;<a name="line.3112"></a>
+<span class="sourceLineNo">3113</span> }<a name="line.3113"></a>
+<span class="sourceLineNo">3114</span><a name="line.3114"></a>
+<span class="sourceLineNo">3115</span> @Override<a name="line.3115"></a>
+<span class="sourceLineNo">3116</span> public List<TableName> listTableNamesByNamespace(String name) throws IOException {<a name="line.3116"></a>
+<span class="sourceLineNo">3117</span> checkInitialized();<a name="line.3117"></a>
+<span class="sourceLineNo">3118</span> return listTableNames(name, null, true);<a name="line.3118"></a>
+<span class="sourceLineNo">3119</span> }<a name="line.3119"></a>
+<span class="sourceLineNo">3120</span><a name="line.3120"></a>
+<span class="sourceLineNo">3121</span> @Override<a name="line.3121"></a>
+<span class="sourceLineNo">3122</span> public List<TableDescriptor> listTableDescriptorsByNamespace(String name) throws IOException {<a name="line.3122"></a>
+<span class="sourceLineNo">3123</span> checkInitialized();<a name="line.3123"></a>
+<span class="sourceLineNo">3124</span> return listTableDescriptors(name, null, null, true);<a name="line.3124"></a>
+<span class="sourceLineNo">3125</span> }<a name="line.3125"></a>
+<span class="sourceLineNo">3126</span><a name="line.3126"></a>
+<span class="sourceLineNo">3127</span> @Override<a name="line.3127"></a>
+<span class="sourceLineNo">3128</span> public boolean abortProcedure(final long procId, final boolean mayInterruptIfRunning)<a name="line.3128"></a>
+<span class="sourceLineNo">3129</span> throws IOException {<a name="line.3129"></a>
+<span class="sourceLineNo">3130</span> if (cpHost != null) {<a name="line.3130"></a>
+<span class="sourceLineNo">3131</span> cpHost.preAbortProcedure(this.procedureExecutor, procId);<a name="line.3131"></a>
+<span class="sourceLineNo">3132</span> }<a name="line.3132"></a>
+<span class="sourceLineNo">3133</span><a name="line.3133"></a>
+<span class="sourceLineNo">3134</span> final boolean result = this.procedureExecutor.abort(procId, mayInterruptIfRunning);<a name="line.3134"></a>
+<span class="sourceLineNo">3135</span><a name="line.3135"></a>
+<span class="sourceLineNo">3136</span> if (cpHost != null) {<a name="line.3136"></a>
+<span class="sourceLineNo">3137</span> cpHost.postAbortProcedure();<a name="line.3137"></a>
+<span class="sourceLineNo">3138</span> }<a name="line.3138"></a>
<span class="sourceLineNo">3139</span><a name="line.3139"></a>
-<span class="sourceLineNo">3140</span> @Override<a name="line.3140"></a>
-<span class="sourceLineNo">3141</span> public List<Procedure<?>> getProcedures() throws IOException {<a name="line.3141"></a>
-<span class="sourceLineNo">3142</span> if (cpHost != null) {<a name="line.3142"></a>
-<span class="sourceLineNo">3143</span> cpHost.preGetProcedures();<a name="line.3143"></a>
-<span class="sourceLineNo">3144</span> }<a name="line.3144"></a>
-<span class="sourceLineNo">3145</span><a name="line.3145"></a>
-<span class="sourceLineNo">3146</span> final List<Procedure<?>> procList = this.procedureExecutor.getProcedures();<a name="line.3146"></a>
-<span class="sourceLineNo">3147</span><a name="line.3147"></a>
-<span class="sourceLineNo">3148</span> if (cpHost != null) {<a name="line.3148"></a>
-<span class="sourceLineNo">3149</span> cpHost.postGetProcedures(procList);<a name="line.3149"></a>
-<span class="sourceLineNo">3150</span> }<a name="line.3150"></a>
-<span class="sourceLineNo">3151</span><a name="line.3151"></a>
-<span class="sourceLineNo">3152</span> return procList;<a name="line.3152"></a>
-<span class="sourceLineNo">3153</span> }<a name="line.3153"></a>
+<span class="sourceLineNo">3140</span> return result;<a name="line.3140"></a>
+<span class="sourceLineNo">3141</span> }<a name="line.3141"></a>
+<span class="sourceLineNo">3142</span><a name="line.3142"></a>
+<span class="sourceLineNo">3143</span> @Override<a name="line.3143"></a>
+<span class="sourceLineNo">3144</span> public List<Procedure<?>> getProcedures() throws IOException {<a name="line.3144"></a>
+<span class="sourceLineNo">3145</span> if (cpHost != null) {<a name="line.3145"></a>
+<span class="sourceLineNo">3146</span> cpHost.preGetProcedures();<a name="line.3146"></a>
+<span class="sourceLineNo">3147</span> }<a name="line.3147"></a>
+<span class="sourceLineNo">3148</span><a name="line.3148"></a>
+<span class="sourceLineNo">3149</span> final List<Procedure<?>> procList = this.procedureExecutor.getProcedures();<a name="line.3149"></a>
+<span class="sourceLineNo">3150</span><a name="line.3150"></a>
+<span class="sourceLineNo">3151</span> if (cpHost != null) {<a name="line.3151"></a>
+<span class="sourceLineNo">3152</span> cpHost.postGetProcedures(procList);<a name="line.3152"></a>
+<span class="sourceLineNo">3153</span> }<a name="line.3153"></a>
<span class="sourceLineNo">3154</span><a name="line.3154"></a>
-<span class="sourceLineNo">3155</span> @Override<a name="line.3155"></a>
-<span class="sourceLineNo">3156</span> public List<LockedResource> getLocks() throws IOException {<a name="line.3156"></a>
-<span class="sourceLineNo">3157</span> if (cpHost != null) {<a name="line.3157"></a>
-<span class="sourceLineNo">3158</span> cpHost.preGetLocks();<a name="line.3158"></a>
-<span class="sourceLineNo">3159</span> }<a name="line.3159"></a>
-<span class="sourceLineNo">3160</span><a name="line.3160"></a>
-<span class="sourceLineNo">3161</span> MasterProcedureScheduler procedureScheduler = procedureExecutor.getEnvironment().getProcedureScheduler();<a name="line.3161"></a>
-<span class="sourceLineNo">3162</span><a name="line.3162"></a>
-<span class="sourceLineNo">3163</span> final List<LockedResource> lockedResources = procedureScheduler.getLocks();<a name="line.3163"></a>
-<span class="sourceLineNo">3164</span><a name="line.3164"></a>
-<span class="sourceLineNo">3165</span> if (cpHost != null) {<a name="line.3165"></a>
-<span class="sourceLineNo">3166</span> cpHost.postGetLocks(lockedResources);<a name="line.3166"></a>
-<span class="sourceLineNo">3167</span> }<a name="line.3167"></a>
-<span class="sourceLineNo">3168</span><a name="line.3168"></a>
-<span class="sourceLineNo">3169</span> return lockedResources;<a name="line.3169"></a>
-<span class="sourceLineNo">3170</span> }<a name="line.3170"></a>
+<span class="sourceLineNo">3155</span> return procList;<a name="line.3155"></a>
+<span class="sourceLineNo">3156</span> }<a name="line.3156"></a>
+<span class="sourceLineNo">3157</span><a name="line.3157"></a>
+<span class="sourceLineNo">3158</span> @Override<a name="line.3158"></a>
+<span class="sourceLineNo">3159</span> public List<LockedResource> getLocks() throws IOException {<a name="line.3159"></a>
+<span class="sourceLineNo">3160</span> if (cpHost != null) {<a name="line.3160"></a>
+<span class="sourceLineNo">3161</span> cpHost.preGetLocks();<a name="line.3161"></a>
+<span class="sourceLineNo">3162</span> }<a name="line.3162"></a>
+<span class="sourceLineNo">3163</span><a name="line.3163"></a>
+<span class="sourceLineNo">3164</span> MasterProcedureScheduler procedureScheduler = procedureExecutor.getEnvironment().getProcedureScheduler();<a name="line.3164"></a>
+<span class="sourceLineNo">3165</span><a name="line.3165"></a>
+<span class="sourceLineNo">3166</span> final List<LockedResource> lockedResources = procedureScheduler.getLocks();<a name="line.3166"></a>
+<span class="sourceLineNo">3167</span><a name="line.3167"></a>
+<span class="sourceLineNo">3168</span> if (cpHost != null) {<a name="line.3168"></a>
+<span class="sourceLineNo">3169</span> cpHost.postGetLocks(lockedResources);<a name="line.3169"></a>
+<span class="sourceLineNo">3170</span> }<a name="line.3170"></a>
<span class="sourceLineNo">3171</span><a name="line.3171"></a>
-<span class="sourceLineNo">3172</span> /**<a name="line.3172"></a>
-<span class="sourceLineNo">3173</span> * Returns the list of table descriptors that match the specified request<a name="line.3173"></a>
-<span class="sourceLineNo">3174</span> * @param namespace the namespace to query, or null if querying for all<a name="line.3174"></a>
-<span class="sourceLineNo">3175</span> * @param regex The regular expression to match against, or null if querying for all<a name="line.3175"></a>
-<span class="sourceLineNo">3176</span> * @param tableNameList the list of table names, or null if querying for all<a name="line.3176"></a>
-<span class="sourceLineNo">3177</span> * @param includeSysTables False to match only against userspace tables<a name="line.3177"></a>
-<span class="sourceLineNo">3178</span> * @return the list of table descriptors<a name="line.3178"></a>
-<span class="sourceLineNo">3179</span> */<a name="line.3179"></a>
-<span class="sourceLineNo">3180</span> public List<TableDescriptor> listTableDescriptors(final String namespace, final String regex,<a name="line.3180"></a>
-<span class="sourceLineNo">3181</span> final List<TableName> tableNameList, final boolean includeSysTables)<a name="line.3181"></a>
-<span class="sourceLineNo">3182</span> throws IOException {<a name="line.3182"></a>
-<span class="sourceLineNo">3183</span> List<TableDescriptor> htds = new ArrayList<>();<a name="line.3183"></a>
-<span class="sourceLineNo">3184</span> if (cpHost != null) {<a name="line.3184"></a>
-<span class="sourceLineNo">3185</span> cpHost.preGetTableDescriptors(tableNameList, htds, regex);<a name="line.3185"></a>
-<span class="sourceLineNo">3186</span> }<a name="line.3186"></a>
-<span class="sourceLineNo">3187</span> htds = getTableDescriptors(htds, namespace, regex, tableNameList, includeSysTables);<a name="line.3187"></a>
-<span class="sourceLineNo">3188</span> if (cpHost != null) {<a name="line.3188"></a>
-<span class="sourceLineNo">3189</span> cpHost.postGetTableDescriptors(tableNameList, htds, regex);<a name="line.3189"></a>
-<span class="sourceLineNo">3190</span> }<a name="line.3190"></a>
-<span class="sourceLineNo">3191</span> return htds;<a name="line.3191"></a>
-<span class="sourceLineNo">3192</span> }<a name="line.3192"></a>
-<span class="sourceLineNo">3193</span><a name="line.3193"></a>
-<span class="sourceLineNo">3194</span> /**<a name="line.3194"></a>
-<span class="sourceLineNo">3195</span> * Returns the list of table names that match the specified request<a name="line.3195"></a>
-<span class="sourceLineNo">3196</span> * @param regex The regular expression to match against, or null if querying for all<a name="line.3196"></a>
-<span class="sourceLineNo">3197</span> * @param namespace the namespace to query, or null if querying for all<a name="line.3197"></a>
-<span class="sourceLineNo">3198</span> * @param includeSysTables False to match only against userspace tables<a name="line.3198"></a>
-<span class="sourceLineNo">3199</span> * @return the list of table names<a name="line.3199"></a>
-<span class="sourceLineNo">3200</span> */<a name="line.3200"></a>
-<span class="sourceLineNo">3201</span> public List<TableName> listTableNames(final String namespace, final String regex,<a name="line.3201"></a>
-<span class="sourceLineNo">3202</span> final boolean includeSysTables) throws IOException {<a name="line.3202"></a>
-<span class="sourceLineNo">3203</span> List<TableDescriptor> htds = new ArrayList<>();<a name="line.3203"></a>
-<span class="sourceLineNo">3204</span> if (cpHost != null) {<a name="line.3204"></a>
-<span class="sourceLineNo">3205</span> cpHost.preGetTableNames(htds, regex);<a name="line.3205"></a>
-<span class="sourceLineNo">3206</span> }<a name="line.3206"></a>
-<span class="sourceLineNo">3207</span> htds = getTableDescriptors(htds, namespace, regex, null, includeSysTables);<a name="line.3207"></a>
-<span class="sourceLineNo">3208</span> if (cpHost != null) {<a name="line.3208"></a>
-<span class="sourceLineNo">3209</span> cpHost.postGetTableNames(htds, regex);<a name="line.3209"></a>
-<span class="sourceLineNo">3210</span> }<a name="line.3210"></a>
-<span class="sourceLineNo">3211</span> List<TableName> result = new ArrayList<>(htds.size());<a name="line.3211"></a>
-<span class="sourceLineNo">3212</span> for (TableDescriptor htd: htds) result.add(htd.getTableName());<a name="line.3212"></a>
-<span class="sourceLineNo">3213</span> return result;<a name="line.3213"></a>
-<span class="sourceLineNo">3214</span> }<a name="line.3214"></a>
-<span class="sourceLineNo">3215</span><a name="line.3215"></a>
-<span class="sourceLineNo">3216</span> /**<a name="line.3216"></a>
-<span class="sourceLineNo">3217</span> * @return list of table table descriptors after filtering by regex and whether to include system<a name="line.3217"></a>
-<span class="sourceLineNo">3218</span> * tables, etc.<a name="line.3218"></a>
-<span class="sourceLineNo">3219</span> * @throws IOException<a name="line.3219"></a>
-<span class="sourceLineNo">3220</span> */<a name="line.3220"></a>
-<span class="sourceLineNo">3221</span> private List<TableDescriptor> getTableDescriptors(final List<TableDescriptor> htds,<a name="line.3221"></a>
-<span class="sourceLineNo">3222</span> final String namespace, final String regex, final List<TableName> tableNameList,<a name="line.3222"></a>
-<span class="sourceLineNo">3223</span> final boolean includeSysTables)<a name="line.3223"></a>
-<span class="sourceLineNo">3224</span> throws IOException {<a name="line.3224"></a>
-<span class="sourceLineNo">3225</span> if (tableNameList == null || tableNameList.isEmpty()) {<a name="line.3225"></a>
-<span class="sourceLineNo">3226</span> // request for all TableDescriptors<a name="line.3226"></a>
-<span class="sourceLineNo">3227</span> Collection<TableDescriptor> allHtds;<a name="line.3227"></a>
-<span class="sourceLineNo">3228</span> if (namespace != null && namespace.length() > 0) {<a name="line.3228"></a>
-<span class="sourceLineNo">3229</span> // Do a check on the namespace existence. Will fail if does not exist.<a name="line.3229"></a>
-<span class="sourceLineNo">3230</span> this.clusterSchemaService.getNamespace(namespace);<a name="line.3230"></a>
-<span class="sourceLineNo">3231</span> allHtds = tableDescriptors.getByNamespace(namespace).values();<a name="line.3231"></a>
-<span class="sourceLineNo">3232</span> } else {<a name="line.3232"></a>
-<span class="sourceLineNo">3233</span> allHtds = tableDescriptors.getAll().values();<a name="line.3233"></a>
-<span class="sourceLineNo">3234</span> }<a name="line.3234"></a>
-<span class="sourceLineNo">3235</span> for (TableDescriptor desc: allHtds) {<a name="line.3235"></a>
-<span class="sourceLineNo">3236</span> if (tableStateManager.isTablePresent(desc.getTableName())<a name="line.3236"></a>
-<span class="sourceLineNo">3237</span> && (includeSysTables || !desc.getTableName().isSystemTable())) {<a name="line.3237"></a>
-<span class="sourceLineNo">3238</span> htds.add(desc);<a name="line.3238"></a>
-<span class="sourceLineNo">3239</span> }<a name="line.3239"></a>
-<span class="sourceLineNo">3240</span> }<a name="line.3240"></a>
-<span class="sourceLineNo">3241</span> } else {<a name="line.3241"></a>
-<span class="sourceLineNo">3242</span> for (TableName s: tableNameList) {<a name="line.3242"></a>
-<span class="sourceLineNo">3243</span> if (tableStateManager.isTablePresent(s)) {<a name="line.3243"></a>
-<span class="sourceLineNo">3244</span> TableDescriptor desc = tableDescriptors.get(s);<a name="line.3244"></a>
-<span class="sourceLineNo">3245</span> if (desc != null) {<a name="line.3245"></a>
-<span class="sourceLineNo">3246</span> htds.add(desc);<a name="line.3246"></a>
-<span class="sourceLineNo">3247</span> }<a name="line.3247"></a>
-<span class="sourceLineNo">3248</span> }<a name="line.3248"></a>
-<span class="sourceLineNo">3249</span> }<a name="line.3249"></a>
-<span class="sourceLineNo">3250</span> }<a name="line.3250"></a>
-<span class="sourceLineNo">3251</span><a name="line.3251"></a>
-<span class="sourceLineNo">3252</span> // Retains only those matched by regular expression.<a name="line.3252"></a>
-<span class="sourceLineNo">3253</span> if (regex != null) filterTablesByRegex(htds, Pattern.compile(regex));<a name="line.3253"></a>
-<span class="sourceLineNo">3254</span> return htds;<a name="line.3254"></a>
-<span class="sourceLineNo">3255</span> }<a name="line.3255"></a>
-<span class="sourceLineNo">3256</span><a name="line.3256"></a>
-<span class="sourceLineNo">3257</span> /**<a name="line.3257"></a>
-<span class="sourceLineNo">3258</span> * Removes the table descriptors that don't match the pattern.<a name="line.3258"></a>
-<span class="sourceLineNo">3259</span> * @param descriptors list of table descriptors to filter<a name="line.3259"></a>
-<span class="sourceLineNo">3260</span> * @param pattern the regex to use<a name="line.3260"></a>
-<span class="sourceLineNo">3261</span> */<a name="line.3261"></a>
-<span class="sourceLineNo">3262</span> private static void filterTablesByRegex(final Collection<TableDescriptor> descriptors,<a name="line.3262"></a>
-<span class="sourceLineNo">3263</span> final Pattern pattern) {<a name="line.3263"></a>
-<span class="sourceLineNo">3264</span> final String defaultNS = NamespaceDescriptor.DEFAULT_NAMESPACE_NAME_STR;<a name="line.3264"></a>
-<span class="sourceLineNo">3265</span> Iterator<TableDescriptor> itr = descriptors.iterator();<a name="line.3265"></a>
-<span class="sourceLineNo">3266</span> while (itr.hasNext()) {<a name="line.3266"></a>
-<span class="sourceLineNo">3267</span> TableDescriptor htd = itr.next();<a name="line.3267"></a>
-<span class="sourceLineNo">3268</span> String tableName = htd.getTableName().getNameAsString();<a name="line.3268"></a>
-<span class="sourceLineNo">3269</span> boolean matched = pattern.matcher(tableName).matches();<a name="line.3269"></a>
-<span class="sourceLineNo">3270</span> if (!matched && htd.getTableName().getNamespaceAsString().equals(defaultNS)) {<a name="line.3270"></a>
-<span class="sourceLineNo">3271</span> matched = pattern.matcher(defaultNS + TableName.NAMESPACE_DELIM + tableName).matches();<a name="line.3271"></a>
-<span class="sourceLineNo">3272</span> }<a name="line.3272"></a>
-<span class="sourceLineNo">3273</span> if (!matched) {<a name="line.3273"></a>
-<span class="sourceLineNo">3274</span> itr.remove();<a name="line.3274"></a>
+<span class="sourceLineNo">3172</span> return lockedResources;<a name="line.3172"></a>
+<span class="sourceLineNo">3173</span> }<a name="line.3173"></a>
+<span class="sourceLineNo">3174</span><a name="line.3174"></a>
+<span class="sourceLineNo">3175</span> /**<a name="line.3175"></a>
+<span class="sourceLineNo">3176</span> * Returns the list of table descriptors that match the specified request<a name="line.3176"></a>
+<span class="sourceLineNo">3177</span> * @param namespace the namespace to query, or null if querying for all<a name="line.3177"></a>
+<span class="sourceLineNo">3178</span> * @param regex The regular expression to match against, or null if querying for all<a name="line.3178"></a>
+<span class="sourceLineNo">3179</span> * @param tableNameList the list of table names, or null if querying for all<a name="line.3179"></a>
+<span class="sourceLineNo">3180</span> * @param includeSysTables False to match only against userspace tables<a name="line.3180"></a>
+<span class="sourceLineNo">3181</span> * @return the list of table descriptors<a name="line.3181"></a>
+<span class="sourceLineNo">3182</span> */<a name="line.3182"></a>
+<span class="sourceLineNo">3183</span> public List<TableDescriptor> listTableDescriptors(final String namespace, final String regex,<a name="line.3183"></a>
+<span class="sourceLineNo">3184</span> final List<TableName> tableNameList, final boolean includeSysTables)<a name="line.3184"></a>
+<span class="sourceLineNo">3185</span> throws IOException {<a name="line.3185"></a>
+<span class="sourceLineNo">3186</span> List<TableDescriptor> htds = new ArrayList<>();<a name="line.3186"></a>
+<span class="sourceLineNo">3187</span> if (cpHost != null) {<a name="line.3187"></a>
+<span class="sourceLineNo">3188</span> cpHost.preGetTableDescriptors(tableNameList, htds, regex);<a name="line.3188"></a>
+<span class="sourceLineNo">3189</span> }<a name="line.3189"></a>
+<span class="sourceLineNo">3190</span> htds = getTableDescriptors(htds, namespace, regex, tableNameList, includeSysTables);<a name="line.3190"></a>
+<span class="sourceLineNo">3191</span> if (cpHost != null) {<a name="line.3191"></a>
+<span class="sourceLineNo">3192</span> cpHost.postGetTableDescriptors(tableNameList, htds, regex);<a name="line.3192"></a>
+<span class="sourceLineNo">3193</span> }<a name="line.3193"></a>
+<span class="sourceLineNo">3194</span> return htds;<a name="line.3194"></a>
+<span class="sourceLineNo">3195</span> }<a name="line.3195"></a>
+<span class="sourceLineNo">3196</span><a name="line.3196"></a>
+<span class="sourceLineNo">3197</span> /**<a name="line.3197"></a>
+<span class="sourceLineNo">3198</span> * Returns the list of table names that match the specified request<a name="line.3198"></a>
+<span class="sourceLineNo">3199</span> * @param regex The regular expression to match against, or null if querying for all<a name="line.3199"></a>
+<span class="sourceLineNo">3200</span> * @param namespace the namespace to query, or null if querying for all<a name="line.3200"></a>
+<span class="sourceLineNo">3201</span> * @param includeSysTables False to match only against userspace tables<a name="line.3201"></a>
+<span class="sourceLineNo">3202</span> * @return the list of table names<a name="line.3202"></a>
+<span class="sourceLineNo">3203</span> */<a name="line.3203"></a>
+<span class="sourceLineNo">3204</span> public List<TableName> listTableNames(final String namespace, final String regex,<a name="line.3204"></a>
+<span class="sourceLineNo">3205</span> final boolean includeSysTables) throws IOException {<a name="line.3205"></a>
+<span class="sourceLineNo">3206</span> List<TableDescriptor> htds = new ArrayList<>();<a name="line.3206"></a>
+<span class="sourceLineNo">3207</span> if (cpHost != null) {<a name="line.3207"></a>
+<span class="sourceLineNo">3208</span> cpHost.preGetTableNames(htds, regex);<a name="line.3208"></a>
+<span class="sourceLineNo">3209</span> }<a name="line.3209"></a>
+<span class="sourceLineNo">3210</span> htds = getTableDescriptors(htds, namespace, regex, null, includeSysTables);<a name="line.3210"></a>
+<span class="sourceLineNo">3211</span> if (cpHost != null) {<a name="line.3211"></a>
+<span class="sourceLineNo">3212</span> cpHost.postGetTableNames(htds, regex);<a name="line.3212"></a>
+<span class="sourceLineNo">3213</span> }<a name="line.3213"></a>
+<span class="sourceLineNo">3214</span> List<TableName> result = new ArrayList<>(htds.size());<a name="line.3214"></a>
+<span class="sourceLineNo">3215</span> for (TableDescriptor htd: htds) result.add(htd.getTableName());<a name="line.3215"></a>
+<span class="sourceLineNo">3216</span> return result;<a name="line.3216"></a>
+<span class="sourceLineNo">3217</span> }<a name="line.3217"></a>
+<span class="sourceLineNo">3218</span><a name="line.3218"></a>
+<span class="sourceLineNo">3219</span> /**<a name="line.3219"></a>
+<span class="sourceLineNo">3220</span> * @return list of table table descriptors after filtering by regex and whether to include system<a name="line.3220"></a>
+<span class="sourceLineNo">3221</span> * tables, etc.<a name="line.3221"></a>
+<span class="sourceLineNo">3222</span> * @throws IOException<a name="line.3222"></a>
+<span class="sourceLineNo">3223</span> */<a name="line.3223"></a>
+<span class="sourceLineNo">3224</span> private List<TableDescriptor> getTableDescriptors(final List<TableDescriptor> htds,<a name="line.3224"></a>
+<span class="sourceLineNo">3225</span> final String namespace, final String regex, final List<TableName> tableNameList,<a name="line.3225"></a>
+<span class="sourceLineNo">3226</span> final boolean includeSysTables)<a name="line.3226"></a>
+<span class="sourceLineNo">3227</span> throws IOException {<a name="line.3227"></a>
+<span class="sourceLineNo">3228</span> if (tableNameList == null || tableNameList.isEmpty()) {<a name="line.3228"></a>
+<span class="sourceLineNo">3229</span> // request for all TableDescriptors<a name="line.3229"></a>
+<span class="sourceLineNo">3230</span> Collection<TableDescriptor> allHtds;<a name="line.3230"></a>
+<span class="sourceLineNo">3231</span> if (namespace != null && namespace.length() > 0) {<a name="line.3231"></a>
+<span class="sourceLineNo">3232</span> // Do a check on the namespace existence. Will fail if does not exist.<a name="line.3232"></a>
+<span class="sourceLineNo">3233</span> this.clusterSchemaService.getNamespace(namespace);<a name="line.3233"></a>
+<span class="sourceLineNo">3234</span> allHtds = tableDescriptors.getByNamespace(namespace).values();<a name="line.3234"></a>
+<span class="sourceLineNo">3235</span> } else {<a name="line.3235"></a>
+<span class="sourceLineNo">3236</span> allHtds = tableDescriptors.getAll().values();<a name="line.3236"></a>
+<span class="sourceLineNo">3237</span> }<a name="line.3237"></a>
+<span class="sourceLineNo">3238</span> for (TableDescriptor desc: allHtds) {<a name="line.3238"></a>
+<span class="sourceLineNo">3239</span> if (tableStateManager.isTablePresent(desc.getTableName())<a name="line.3239"></a>
+<span class="sourceLineNo">3240</span> && (includeSysTables || !desc.getTableName().isSystemTable())) {<a name="line.3240"></a>
+<span class="sourceLineNo">3241</span> htds.add(desc);<a name="line.3241"></a>
+<span class="sourceLineNo">3242</span> }<a name="line.3242"></a>
+<span class="sourceLineNo">3243</span> }<a name="line.3243"></a>
+<span class="sourceLineNo">3244</span> } else {<a name="line.3244"></a>
+<span class="sourceLineNo">3245</span> for (TableName s: tableNameList) {<a name="line.3245"></a>
+<span class="sourceLineNo">3246</span> if (tableStateManager.isTablePresent(s)) {<a name="line.3246"></a>
+<span class="sourceLineNo">3247</span> TableDescriptor desc = tableDescriptors.get(s);<a name="line.3247"></a>
+<span class="sourceLineNo">3248</span> if (desc != null) {<a name="line.3248"></a>
+<span class="sourceLineNo">3249</span> htds.add(desc);<a name="line.3249"></a>
+<span class="sourceLineNo">3250</span> }<a name="line.3250"></a>
+<span class="sourceLineNo">3251</span> }<a name="line.3251"></a>
+<span class="sourceLineNo">3252</span> }<a name="line.3252"></a>
+<span class="sourceLineNo">3253</span> }<a name="line.3253"></a>
+<span class="sourceLineNo">3254</span><a name="line.3254"></a>
+<span class="sourceLineNo">3255</span> // Retains only those matched by regular expression.<a name="line.3255"></a>
+<span class="sourceLineNo">3256</span> if (regex != null) filterTablesByRegex(htds, Pattern.compile(regex));<a name="line.3256"></a>
+<span class="sourceLineNo">3257</span> return htds;<a name="line.3257"></a>
+<span class="sourceLineNo">3258</span> }<a name="line.3258"></a>
+<span class="sourceLineNo">3259</span><a name="line.3259"></a>
+<span class="sourceLineNo">3260</span> /**<a name="line.3260"></a>
+<span class="sourceLineNo">3261</span> * Removes the table descriptors that don't match the pattern.<a name="line.3261"></a>
+<span class="sourceLineNo">3262</span> * @param descriptors list of table descriptors to filter<a name="line.3262"></a>
+<span class="sourceLineNo">3263</span> * @param pattern the regex to use<a name="line.3263"></a>
+<span class="sourceLineNo">3264</span> */<a name="line.3264"></a>
+<span class="sourceLineNo">3265</span> private static void filterTablesByRegex(final Collection<TableDescriptor> descriptors,<a name="line.3265"></a>
+<span class="sourceLineNo">3266</span> final Pattern pattern) {<a name="line.3266"></a>
+<span class="sourceLineNo">3267</span> final String defaultNS = NamespaceDescriptor.DEFAULT_NAMESPACE_NAME_STR;<a name="line.3267"></a>
+<span class="sourceLineNo">3268</span> Iterator<TableDescriptor> itr = descriptors.iterator();<a name="line.3268"></a>
+<span class="sourceLineNo">3269</span> while (itr.hasNext()) {<a name="line.3269"></a>
+<span class="sourceLineNo">327
<TRUNCATED>
[20/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html
deleted file mode 100644
index 58257aa..0000000
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
-<title>Source code</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
-</head>
-<body>
-<div class="sourceContainer">
-<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
-<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
-<span class="sourceLineNo">003</span> * or more contributor license agreements. See the NOTICE file<a name="line.3"></a>
-<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
-<span class="sourceLineNo">005</span> * regarding copyright ownership. The ASF licenses this file<a name="line.5"></a>
-<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
-<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
-<span class="sourceLineNo">008</span> * with the License. You may obtain a copy of the License at<a name="line.8"></a>
-<span class="sourceLineNo">009</span> *<a name="line.9"></a>
-<span class="sourceLineNo">010</span> * http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
-<span class="sourceLineNo">011</span> *<a name="line.11"></a>
-<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
-<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
-<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
-<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
-<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
-<span class="sourceLineNo">017</span> */<a name="line.17"></a>
-<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.master.assignment;<a name="line.18"></a>
-<span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.21"></a>
-<span class="sourceLineNo">022</span><a name="line.22"></a>
-<span class="sourceLineNo">023</span>/**<a name="line.23"></a>
-<span class="sourceLineNo">024</span> * Used internally signaling failed queue of a remote procedure<a name="line.24"></a>
-<span class="sourceLineNo">025</span> * operation.<a name="line.25"></a>
-<span class="sourceLineNo">026</span> */<a name="line.26"></a>
-<span class="sourceLineNo">027</span>@SuppressWarnings("serial")<a name="line.27"></a>
-<span class="sourceLineNo">028</span>@InterfaceAudience.Private<a name="line.28"></a>
-<span class="sourceLineNo">029</span>public class FailedRemoteDispatchException extends HBaseIOException {<a name="line.29"></a>
-<span class="sourceLineNo">030</span> public FailedRemoteDispatchException(String msg) {<a name="line.30"></a>
-<span class="sourceLineNo">031</span> super(msg);<a name="line.31"></a>
-<span class="sourceLineNo">032</span> }<a name="line.32"></a>
-<span class="sourceLineNo">033</span>}<a name="line.33"></a>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</pre>
-</div>
-</body>
-</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html
index 6b7e383..09fe96e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html
@@ -87,99 +87,102 @@
<span class="sourceLineNo">079</span> try {<a name="line.79"></a>
<span class="sourceLineNo">080</span> preflightChecks(env, true);<a name="line.80"></a>
<span class="sourceLineNo">081</span> checkOnline(env, this.plan.getRegionInfo());<a name="line.81"></a>
-<span class="sourceLineNo">082</span> } catch (HBaseIOException e) {<a name="line.82"></a>
-<span class="sourceLineNo">083</span> LOG.warn(this.toString() + " FAILED because " + e.toString());<a name="line.83"></a>
-<span class="sourceLineNo">084</span> return Flow.NO_MORE_STATE;<a name="line.84"></a>
-<span class="sourceLineNo">085</span> }<a name="line.85"></a>
-<span class="sourceLineNo">086</span> break;<a name="line.86"></a>
-<span class="sourceLineNo">087</span> case MOVE_REGION_UNASSIGN:<a name="line.87"></a>
-<span class="sourceLineNo">088</span> addChildProcedure(new UnassignProcedure(plan.getRegionInfo(), plan.getSource(),<a name="line.88"></a>
-<span class="sourceLineNo">089</span> plan.getDestination(), true));<a name="line.89"></a>
-<span class="sourceLineNo">090</span> setNextState(MoveRegionState.MOVE_REGION_ASSIGN);<a name="line.90"></a>
-<span class="sourceLineNo">091</span> break;<a name="line.91"></a>
-<span class="sourceLineNo">092</span> case MOVE_REGION_ASSIGN:<a name="line.92"></a>
-<span class="sourceLineNo">093</span> AssignProcedure assignProcedure = plan.getDestination() == null ?<a name="line.93"></a>
-<span class="sourceLineNo">094</span> new AssignProcedure(plan.getRegionInfo()):<a name="line.94"></a>
-<span class="sourceLineNo">095</span> new AssignProcedure(plan.getRegionInfo(), plan.getDestination());<a name="line.95"></a>
-<span class="sourceLineNo">096</span> addChildProcedure(assignProcedure);<a name="line.96"></a>
-<span class="sourceLineNo">097</span> return Flow.NO_MORE_STATE;<a name="line.97"></a>
-<span class="sourceLineNo">098</span> default:<a name="line.98"></a>
-<span class="sourceLineNo">099</span> throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.99"></a>
-<span class="sourceLineNo">100</span> }<a name="line.100"></a>
-<span class="sourceLineNo">101</span> return Flow.HAS_MORE_STATE;<a name="line.101"></a>
-<span class="sourceLineNo">102</span> }<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span> @Override<a name="line.104"></a>
-<span class="sourceLineNo">105</span> protected void rollbackState(final MasterProcedureEnv env, final MoveRegionState state)<a name="line.105"></a>
-<span class="sourceLineNo">106</span> throws IOException {<a name="line.106"></a>
-<span class="sourceLineNo">107</span> // no-op<a name="line.107"></a>
-<span class="sourceLineNo">108</span> }<a name="line.108"></a>
-<span class="sourceLineNo">109</span><a name="line.109"></a>
-<span class="sourceLineNo">110</span> @Override<a name="line.110"></a>
-<span class="sourceLineNo">111</span> public boolean abort(final MasterProcedureEnv env) {<a name="line.111"></a>
-<span class="sourceLineNo">112</span> return false;<a name="line.112"></a>
-<span class="sourceLineNo">113</span> }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span> @Override<a name="line.115"></a>
-<span class="sourceLineNo">116</span> public void toStringClassDetails(final StringBuilder sb) {<a name="line.116"></a>
-<span class="sourceLineNo">117</span> sb.append(getClass().getSimpleName());<a name="line.117"></a>
-<span class="sourceLineNo">118</span> sb.append(" ");<a name="line.118"></a>
-<span class="sourceLineNo">119</span> sb.append(plan);<a name="line.119"></a>
-<span class="sourceLineNo">120</span> }<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span> @Override<a name="line.122"></a>
-<span class="sourceLineNo">123</span> protected MoveRegionState getInitialState() {<a name="line.123"></a>
-<span class="sourceLineNo">124</span> return MoveRegionState.MOVE_REGION_UNASSIGN;<a name="line.124"></a>
-<span class="sourceLineNo">125</span> }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span> @Override<a name="line.127"></a>
-<span class="sourceLineNo">128</span> protected int getStateId(final MoveRegionState state) {<a name="line.128"></a>
-<span class="sourceLineNo">129</span> return state.getNumber();<a name="line.129"></a>
-<span class="sourceLineNo">130</span> }<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span> @Override<a name="line.132"></a>
-<span class="sourceLineNo">133</span> protected MoveRegionState getState(final int stateId) {<a name="line.133"></a>
-<span class="sourceLineNo">134</span> return MoveRegionState.valueOf(stateId);<a name="line.134"></a>
-<span class="sourceLineNo">135</span> }<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span> @Override<a name="line.137"></a>
-<span class="sourceLineNo">138</span> public TableName getTableName() {<a name="line.138"></a>
-<span class="sourceLineNo">139</span> return plan.getRegionInfo().getTable();<a name="line.139"></a>
-<span class="sourceLineNo">140</span> }<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span> @Override<a name="line.142"></a>
-<span class="sourceLineNo">143</span> public TableOperationType getTableOperationType() {<a name="line.143"></a>
-<span class="sourceLineNo">144</span> return TableOperationType.REGION_EDIT;<a name="line.144"></a>
-<span class="sourceLineNo">145</span> }<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span> @Override<a name="line.147"></a>
-<span class="sourceLineNo">148</span> protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.148"></a>
-<span class="sourceLineNo">149</span> throws IOException {<a name="line.149"></a>
-<span class="sourceLineNo">150</span> super.serializeStateData(serializer);<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span> final MoveRegionStateData.Builder state = MoveRegionStateData.newBuilder()<a name="line.152"></a>
-<span class="sourceLineNo">153</span> // No need to serialize the RegionInfo. The super class has the region.<a name="line.153"></a>
-<span class="sourceLineNo">154</span> .setSourceServer(ProtobufUtil.toServerName(plan.getSource()));<a name="line.154"></a>
-<span class="sourceLineNo">155</span> if (plan.getDestination() != null) {<a name="line.155"></a>
-<span class="sourceLineNo">156</span> state.setDestinationServer(ProtobufUtil.toServerName(plan.getDestination()));<a name="line.156"></a>
-<span class="sourceLineNo">157</span> }<a name="line.157"></a>
-<span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span> serializer.serialize(state.build());<a name="line.159"></a>
-<span class="sourceLineNo">160</span> }<a name="line.160"></a>
+<span class="sourceLineNo">082</span> if (!env.getMasterServices().getServerManager().isServerOnline(this.plan.getSource())) {<a name="line.82"></a>
+<span class="sourceLineNo">083</span> throw new HBaseIOException(this.plan.getSource() + " not online");<a name="line.83"></a>
+<span class="sourceLineNo">084</span> }<a name="line.84"></a>
+<span class="sourceLineNo">085</span> } catch (HBaseIOException e) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span> LOG.warn(this.toString() + " FAILED because " + e.toString());<a name="line.86"></a>
+<span class="sourceLineNo">087</span> return Flow.NO_MORE_STATE;<a name="line.87"></a>
+<span class="sourceLineNo">088</span> }<a name="line.88"></a>
+<span class="sourceLineNo">089</span> break;<a name="line.89"></a>
+<span class="sourceLineNo">090</span> case MOVE_REGION_UNASSIGN:<a name="line.90"></a>
+<span class="sourceLineNo">091</span> addChildProcedure(new UnassignProcedure(plan.getRegionInfo(), plan.getSource(),<a name="line.91"></a>
+<span class="sourceLineNo">092</span> plan.getDestination(), true));<a name="line.92"></a>
+<span class="sourceLineNo">093</span> setNextState(MoveRegionState.MOVE_REGION_ASSIGN);<a name="line.93"></a>
+<span class="sourceLineNo">094</span> break;<a name="line.94"></a>
+<span class="sourceLineNo">095</span> case MOVE_REGION_ASSIGN:<a name="line.95"></a>
+<span class="sourceLineNo">096</span> AssignProcedure assignProcedure = plan.getDestination() == null ?<a name="line.96"></a>
+<span class="sourceLineNo">097</span> new AssignProcedure(plan.getRegionInfo()):<a name="line.97"></a>
+<span class="sourceLineNo">098</span> new AssignProcedure(plan.getRegionInfo(), plan.getDestination());<a name="line.98"></a>
+<span class="sourceLineNo">099</span> addChildProcedure(assignProcedure);<a name="line.99"></a>
+<span class="sourceLineNo">100</span> return Flow.NO_MORE_STATE;<a name="line.100"></a>
+<span class="sourceLineNo">101</span> default:<a name="line.101"></a>
+<span class="sourceLineNo">102</span> throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.102"></a>
+<span class="sourceLineNo">103</span> }<a name="line.103"></a>
+<span class="sourceLineNo">104</span> return Flow.HAS_MORE_STATE;<a name="line.104"></a>
+<span class="sourceLineNo">105</span> }<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span> @Override<a name="line.107"></a>
+<span class="sourceLineNo">108</span> protected void rollbackState(final MasterProcedureEnv env, final MoveRegionState state)<a name="line.108"></a>
+<span class="sourceLineNo">109</span> throws IOException {<a name="line.109"></a>
+<span class="sourceLineNo">110</span> // no-op<a name="line.110"></a>
+<span class="sourceLineNo">111</span> }<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span> @Override<a name="line.113"></a>
+<span class="sourceLineNo">114</span> public boolean abort(final MasterProcedureEnv env) {<a name="line.114"></a>
+<span class="sourceLineNo">115</span> return false;<a name="line.115"></a>
+<span class="sourceLineNo">116</span> }<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span> @Override<a name="line.118"></a>
+<span class="sourceLineNo">119</span> public void toStringClassDetails(final StringBuilder sb) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span> sb.append(getClass().getSimpleName());<a name="line.120"></a>
+<span class="sourceLineNo">121</span> sb.append(" ");<a name="line.121"></a>
+<span class="sourceLineNo">122</span> sb.append(plan);<a name="line.122"></a>
+<span class="sourceLineNo">123</span> }<a name="line.123"></a>
+<span class="sourceLineNo">124</span><a name="line.124"></a>
+<span class="sourceLineNo">125</span> @Override<a name="line.125"></a>
+<span class="sourceLineNo">126</span> protected MoveRegionState getInitialState() {<a name="line.126"></a>
+<span class="sourceLineNo">127</span> return MoveRegionState.MOVE_REGION_UNASSIGN;<a name="line.127"></a>
+<span class="sourceLineNo">128</span> }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span> @Override<a name="line.130"></a>
+<span class="sourceLineNo">131</span> protected int getStateId(final MoveRegionState state) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span> return state.getNumber();<a name="line.132"></a>
+<span class="sourceLineNo">133</span> }<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span> @Override<a name="line.135"></a>
+<span class="sourceLineNo">136</span> protected MoveRegionState getState(final int stateId) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span> return MoveRegionState.valueOf(stateId);<a name="line.137"></a>
+<span class="sourceLineNo">138</span> }<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span> @Override<a name="line.140"></a>
+<span class="sourceLineNo">141</span> public TableName getTableName() {<a name="line.141"></a>
+<span class="sourceLineNo">142</span> return plan.getRegionInfo().getTable();<a name="line.142"></a>
+<span class="sourceLineNo">143</span> }<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span> @Override<a name="line.145"></a>
+<span class="sourceLineNo">146</span> public TableOperationType getTableOperationType() {<a name="line.146"></a>
+<span class="sourceLineNo">147</span> return TableOperationType.REGION_EDIT;<a name="line.147"></a>
+<span class="sourceLineNo">148</span> }<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span> @Override<a name="line.150"></a>
+<span class="sourceLineNo">151</span> protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.151"></a>
+<span class="sourceLineNo">152</span> throws IOException {<a name="line.152"></a>
+<span class="sourceLineNo">153</span> super.serializeStateData(serializer);<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span> final MoveRegionStateData.Builder state = MoveRegionStateData.newBuilder()<a name="line.155"></a>
+<span class="sourceLineNo">156</span> // No need to serialize the RegionInfo. The super class has the region.<a name="line.156"></a>
+<span class="sourceLineNo">157</span> .setSourceServer(ProtobufUtil.toServerName(plan.getSource()));<a name="line.157"></a>
+<span class="sourceLineNo">158</span> if (plan.getDestination() != null) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span> state.setDestinationServer(ProtobufUtil.toServerName(plan.getDestination()));<a name="line.159"></a>
+<span class="sourceLineNo">160</span> }<a name="line.160"></a>
<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span> @Override<a name="line.162"></a>
-<span class="sourceLineNo">163</span> protected void deserializeStateData(ProcedureStateSerializer serializer)<a name="line.163"></a>
-<span class="sourceLineNo">164</span> throws IOException {<a name="line.164"></a>
-<span class="sourceLineNo">165</span> super.deserializeStateData(serializer);<a name="line.165"></a>
-<span class="sourceLineNo">166</span><a name="line.166"></a>
-<span class="sourceLineNo">167</span> final MoveRegionStateData state = serializer.deserialize(MoveRegionStateData.class);<a name="line.167"></a>
-<span class="sourceLineNo">168</span> final RegionInfo regionInfo = getRegion(); // Get it from super class deserialization.<a name="line.168"></a>
-<span class="sourceLineNo">169</span> final ServerName sourceServer = ProtobufUtil.toServerName(state.getSourceServer());<a name="line.169"></a>
-<span class="sourceLineNo">170</span> final ServerName destinationServer = state.hasDestinationServer() ?<a name="line.170"></a>
-<span class="sourceLineNo">171</span> ProtobufUtil.toServerName(state.getDestinationServer()) : null;<a name="line.171"></a>
-<span class="sourceLineNo">172</span> this.plan = new RegionPlan(regionInfo, sourceServer, destinationServer);<a name="line.172"></a>
-<span class="sourceLineNo">173</span> }<a name="line.173"></a>
-<span class="sourceLineNo">174</span>}<a name="line.174"></a>
+<span class="sourceLineNo">162</span> serializer.serialize(state.build());<a name="line.162"></a>
+<span class="sourceLineNo">163</span> }<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span> @Override<a name="line.165"></a>
+<span class="sourceLineNo">166</span> protected void deserializeStateData(ProcedureStateSerializer serializer)<a name="line.166"></a>
+<span class="sourceLineNo">167</span> throws IOException {<a name="line.167"></a>
+<span class="sourceLineNo">168</span> super.deserializeStateData(serializer);<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span> final MoveRegionStateData state = serializer.deserialize(MoveRegionStateData.class);<a name="line.170"></a>
+<span class="sourceLineNo">171</span> final RegionInfo regionInfo = getRegion(); // Get it from super class deserialization.<a name="line.171"></a>
+<span class="sourceLineNo">172</span> final ServerName sourceServer = ProtobufUtil.toServerName(state.getSourceServer());<a name="line.172"></a>
+<span class="sourceLineNo">173</span> final ServerName destinationServer = state.hasDestinationServer() ?<a name="line.173"></a>
+<span class="sourceLineNo">174</span> ProtobufUtil.toServerName(state.getDestinationServer()) : null;<a name="line.174"></a>
+<span class="sourceLineNo">175</span> this.plan = new RegionPlan(regionInfo, sourceServer, destinationServer);<a name="line.175"></a>
+<span class="sourceLineNo">176</span> }<a name="line.176"></a>
+<span class="sourceLineNo">177</span>}<a name="line.177"></a>
[28/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/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 aa48364..9549aa5 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
@@ -2830,843 +2830,858 @@
<span class="sourceLineNo">2822</span> * @return true if master is in maintenanceMode<a name="line.2822"></a>
<span class="sourceLineNo">2823</span> */<a name="line.2823"></a>
<span class="sourceLineNo">2824</span> @Override<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span> public boolean isInMaintenanceMode() {<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span> return maintenanceModeTracker.isInMaintenanceMode();<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span> }<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span><a name="line.2828"></a>
-<span class="sourceLineNo">2829</span> @VisibleForTesting<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span> public void setInitialized(boolean isInitialized) {<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span> procedureExecutor.getEnvironment().setEventReady(initialized, isInitialized);<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span> }<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span><a name="line.2833"></a>
-<span class="sourceLineNo">2834</span> @Override<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span> public ProcedureEvent<?> getInitializedEvent() {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span> return initialized;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span> }<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span><a name="line.2838"></a>
-<span class="sourceLineNo">2839</span> /**<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span> * ServerCrashProcessingEnabled is set false before completing assignMeta to prevent processing<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span> * of crashed servers.<a name="line.2841"></a>
-<span class="sourceLineNo">2842</span> * @return true if assignMeta has completed;<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span> */<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span> @Override<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span> public boolean isServerCrashProcessingEnabled() {<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span> return serverCrashProcessingEnabled.isReady();<a name="line.2846"></a>
-<span class="sourceLineNo">2847</span> }<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span><a name="line.2848"></a>
-<span class="sourceLineNo">2849</span> @VisibleForTesting<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span> public void setServerCrashProcessingEnabled(final boolean b) {<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span> procedureExecutor.getEnvironment().setEventReady(serverCrashProcessingEnabled, b);<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span> }<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span><a name="line.2853"></a>
-<span class="sourceLineNo">2854</span> public ProcedureEvent<?> getServerCrashProcessingEnabledEvent() {<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span> return serverCrashProcessingEnabled;<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span> }<a name="line.2856"></a>
-<span class="sourceLineNo">2857</span><a name="line.2857"></a>
-<span class="sourceLineNo">2858</span> /**<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span> * Compute the average load across all region servers.<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span> * Currently, this uses a very naive computation - just uses the number of<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span> * regions being served, ignoring stats about number of requests.<a name="line.2861"></a>
-<span class="sourceLineNo">2862</span> * @return the average load<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span> */<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span> public double getAverageLoad() {<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span> if (this.assignmentManager == null) {<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span> return 0;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span> }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span> RegionStates regionStates = this.assignmentManager.getRegionStates();<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span> if (regionStates == null) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span> return 0;<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span> }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span> return regionStates.getAverageLoad();<a name="line.2873"></a>
-<span class="sourceLineNo">2874</span> }<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span><a name="line.2875"></a>
-<span class="sourceLineNo">2876</span> /*<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span> * @return the count of region split plans executed<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span> */<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span> public long getSplitPlanCount() {<a name="line.2879"></a>
-<span class="sourceLineNo">2880</span> return splitPlanCount;<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span> }<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span><a name="line.2882"></a>
-<span class="sourceLineNo">2883</span> /*<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span> * @return the count of region merge plans executed<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span> */<a name="line.2885"></a>
-<span class="sourceLineNo">2886</span> public long getMergePlanCount() {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span> return mergePlanCount;<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span> }<a name="line.2888"></a>
-<span class="sourceLineNo">2889</span><a name="line.2889"></a>
-<span class="sourceLineNo">2890</span> @Override<a name="line.2890"></a>
-<span class="sourceLineNo">2891</span> public boolean registerService(Service instance) {<a name="line.2891"></a>
-<span class="sourceLineNo">2892</span> /*<a name="line.2892"></a>
-<span class="sourceLineNo">2893</span> * No stacking of instances is allowed for a single service name<a name="line.2893"></a>
-<span class="sourceLineNo">2894</span> */<a name="line.2894"></a>
-<span class="sourceLineNo">2895</span> Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.2895"></a>
-<span class="sourceLineNo">2896</span> String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.2896"></a>
-<span class="sourceLineNo">2897</span> if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.2897"></a>
-<span class="sourceLineNo">2898</span> LOG.error("Coprocessor service "+serviceName+<a name="line.2898"></a>
-<span class="sourceLineNo">2899</span> " already registered, rejecting request from "+instance<a name="line.2899"></a>
-<span class="sourceLineNo">2900</span> );<a name="line.2900"></a>
-<span class="sourceLineNo">2901</span> return false;<a name="line.2901"></a>
-<span class="sourceLineNo">2902</span> }<a name="line.2902"></a>
-<span class="sourceLineNo">2903</span><a name="line.2903"></a>
-<span class="sourceLineNo">2904</span> coprocessorServiceHandlers.put(serviceName, instance);<a name="line.2904"></a>
-<span class="sourceLineNo">2905</span> if (LOG.isDebugEnabled()) {<a name="line.2905"></a>
-<span class="sourceLineNo">2906</span> LOG.debug("Registered master coprocessor service: service="+serviceName);<a name="line.2906"></a>
-<span class="sourceLineNo">2907</span> }<a name="line.2907"></a>
-<span class="sourceLineNo">2908</span> return true;<a name="line.2908"></a>
-<span class="sourceLineNo">2909</span> }<a name="line.2909"></a>
-<span class="sourceLineNo">2910</span><a name="line.2910"></a>
-<span class="sourceLineNo">2911</span> /**<a name="line.2911"></a>
-<span class="sourceLineNo">2912</span> * Utility for constructing an instance of the passed HMaster class.<a name="line.2912"></a>
-<span class="sourceLineNo">2913</span> * @param masterClass<a name="line.2913"></a>
-<span class="sourceLineNo">2914</span> * @return HMaster instance.<a name="line.2914"></a>
-<span class="sourceLineNo">2915</span> */<a name="line.2915"></a>
-<span class="sourceLineNo">2916</span> public static HMaster constructMaster(Class<? extends HMaster> masterClass,<a name="line.2916"></a>
-<span class="sourceLineNo">2917</span> final Configuration conf) {<a name="line.2917"></a>
-<span class="sourceLineNo">2918</span> try {<a name="line.2918"></a>
-<span class="sourceLineNo">2919</span> Constructor<? extends HMaster> c = masterClass.getConstructor(Configuration.class);<a name="line.2919"></a>
-<span class="sourceLineNo">2920</span> return c.newInstance(conf);<a name="line.2920"></a>
-<span class="sourceLineNo">2921</span> } catch(Exception e) {<a name="line.2921"></a>
-<span class="sourceLineNo">2922</span> Throwable error = e;<a name="line.2922"></a>
-<span class="sourceLineNo">2923</span> if (e instanceof InvocationTargetException &&<a name="line.2923"></a>
-<span class="sourceLineNo">2924</span> ((InvocationTargetException)e).getTargetException() != null) {<a name="line.2924"></a>
-<span class="sourceLineNo">2925</span> error = ((InvocationTargetException)e).getTargetException();<a name="line.2925"></a>
-<span class="sourceLineNo">2926</span> }<a name="line.2926"></a>
-<span class="sourceLineNo">2927</span> throw new RuntimeException("Failed construction of Master: " + masterClass.toString() + ". "<a name="line.2927"></a>
-<span class="sourceLineNo">2928</span> , error);<a name="line.2928"></a>
-<span class="sourceLineNo">2929</span> }<a name="line.2929"></a>
-<span class="sourceLineNo">2930</span> }<a name="line.2930"></a>
-<span class="sourceLineNo">2931</span><a name="line.2931"></a>
-<span class="sourceLineNo">2932</span> /**<a name="line.2932"></a>
-<span class="sourceLineNo">2933</span> * @see org.apache.hadoop.hbase.master.HMasterCommandLine<a name="line.2933"></a>
-<span class="sourceLineNo">2934</span> */<a name="line.2934"></a>
-<span class="sourceLineNo">2935</span> public static void main(String [] args) {<a name="line.2935"></a>
-<span class="sourceLineNo">2936</span> LOG.info("STARTING service " + HMaster.class.getSimpleName());<a name="line.2936"></a>
-<span class="sourceLineNo">2937</span> VersionInfo.logVersion();<a name="line.2937"></a>
-<span class="sourceLineNo">2938</span> new HMasterCommandLine(HMaster.class).doMain(args);<a name="line.2938"></a>
-<span class="sourceLineNo">2939</span> }<a name="line.2939"></a>
-<span class="sourceLineNo">2940</span><a name="line.2940"></a>
-<span class="sourceLineNo">2941</span> public HFileCleaner getHFileCleaner() {<a name="line.2941"></a>
-<span class="sourceLineNo">2942</span> return this.hfileCleaner;<a name="line.2942"></a>
-<span class="sourceLineNo">2943</span> }<a name="line.2943"></a>
-<span class="sourceLineNo">2944</span><a name="line.2944"></a>
-<span class="sourceLineNo">2945</span> public LogCleaner getLogCleaner() {<a name="line.2945"></a>
-<span class="sourceLineNo">2946</span> return this.logCleaner;<a name="line.2946"></a>
-<span class="sourceLineNo">2947</span> }<a name="line.2947"></a>
-<span class="sourceLineNo">2948</span><a name="line.2948"></a>
-<span class="sourceLineNo">2949</span> /**<a name="line.2949"></a>
-<span class="sourceLineNo">2950</span> * @return the underlying snapshot manager<a name="line.2950"></a>
-<span class="sourceLineNo">2951</span> */<a name="line.2951"></a>
-<span class="sourceLineNo">2952</span> @Override<a name="line.2952"></a>
-<span class="sourceLineNo">2953</span> public SnapshotManager getSnapshotManager() {<a name="line.2953"></a>
-<span class="sourceLineNo">2954</span> return this.snapshotManager;<a name="line.2954"></a>
-<span class="sourceLineNo">2955</span> }<a name="line.2955"></a>
-<span class="sourceLineNo">2956</span><a name="line.2956"></a>
-<span class="sourceLineNo">2957</span> /**<a name="line.2957"></a>
-<span class="sourceLineNo">2958</span> * @return the underlying MasterProcedureManagerHost<a name="line.2958"></a>
-<span class="sourceLineNo">2959</span> */<a name="line.2959"></a>
-<span class="sourceLineNo">2960</span> @Override<a name="line.2960"></a>
-<span class="sourceLineNo">2961</span> public MasterProcedureManagerHost getMasterProcedureManagerHost() {<a name="line.2961"></a>
-<span class="sourceLineNo">2962</span> return mpmHost;<a name="line.2962"></a>
-<span class="sourceLineNo">2963</span> }<a name="line.2963"></a>
-<span class="sourceLineNo">2964</span><a name="line.2964"></a>
-<span class="sourceLineNo">2965</span> @Override<a name="line.2965"></a>
-<span class="sourceLineNo">2966</span> public ClusterSchema getClusterSchema() {<a name="line.2966"></a>
-<span class="sourceLineNo">2967</span> return this.clusterSchemaService;<a name="line.2967"></a>
-<span class="sourceLineNo">2968</span> }<a name="line.2968"></a>
-<span class="sourceLineNo">2969</span><a name="line.2969"></a>
-<span class="sourceLineNo">2970</span> /**<a name="line.2970"></a>
-<span class="sourceLineNo">2971</span> * Create a new Namespace.<a name="line.2971"></a>
-<span class="sourceLineNo">2972</span> * @param namespaceDescriptor descriptor for new Namespace<a name="line.2972"></a>
-<span class="sourceLineNo">2973</span> * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.2973"></a>
-<span class="sourceLineNo">2974</span> * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.2974"></a>
-<span class="sourceLineNo">2975</span> * <code>nonceGroup</code> (the source must ensure each operation gets a unique id).<a name="line.2975"></a>
-<span class="sourceLineNo">2976</span> * @return procedure id<a name="line.2976"></a>
-<span class="sourceLineNo">2977</span> */<a name="line.2977"></a>
-<span class="sourceLineNo">2978</span> long createNamespace(final NamespaceDescriptor namespaceDescriptor, final long nonceGroup,<a name="line.2978"></a>
-<span class="sourceLineNo">2979</span> final long nonce) throws IOException {<a name="line.2979"></a>
-<span class="sourceLineNo">2980</span> checkInitialized();<a name="line.2980"></a>
-<span class="sourceLineNo">2981</span><a name="line.2981"></a>
-<span class="sourceLineNo">2982</span> TableName.isLegalNamespaceName(Bytes.toBytes(namespaceDescriptor.getName()));<a name="line.2982"></a>
-<span class="sourceLineNo">2983</span><a name="line.2983"></a>
-<span class="sourceLineNo">2984</span> return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.2984"></a>
-<span class="sourceLineNo">2985</span> nonceGroup, nonce) {<a name="line.2985"></a>
-<span class="sourceLineNo">2986</span> @Override<a name="line.2986"></a>
-<span class="sourceLineNo">2987</span> protected void run() throws IOException {<a name="line.2987"></a>
-<span class="sourceLineNo">2988</span> getMaster().getMasterCoprocessorHost().preCreateNamespace(namespaceDescriptor);<a name="line.2988"></a>
-<span class="sourceLineNo">2989</span> // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.2989"></a>
-<span class="sourceLineNo">2990</span> // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.2990"></a>
-<span class="sourceLineNo">2991</span> ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.2991"></a>
-<span class="sourceLineNo">2992</span> LOG.info(getClientIdAuditPrefix() + " creating " + namespaceDescriptor);<a name="line.2992"></a>
-<span class="sourceLineNo">2993</span> // Execute the operation synchronously - wait for the operation to complete before<a name="line.2993"></a>
-<span class="sourceLineNo">2994</span> // continuing.<a name="line.2994"></a>
-<span class="sourceLineNo">2995</span> setProcId(getClusterSchema().createNamespace(namespaceDescriptor, getNonceKey(), latch));<a name="line.2995"></a>
-<span class="sourceLineNo">2996</span> latch.await();<a name="line.2996"></a>
-<span class="sourceLineNo">2997</span> getMaster().getMasterCoprocessorHost().postCreateNamespace(namespaceDescriptor);<a name="line.2997"></a>
-<span class="sourceLineNo">2998</span> }<a name="line.2998"></a>
-<span class="sourceLineNo">2999</span><a name="line.2999"></a>
-<span class="sourceLineNo">3000</span> @Override<a name="line.3000"></a>
-<span class="sourceLineNo">3001</span> protected String getDescription() {<a name="line.3001"></a>
-<span class="sourceLineNo">3002</span> return "CreateNamespaceProcedure";<a name="line.3002"></a>
-<span class="sourceLineNo">3003</span> }<a name="line.3003"></a>
-<span class="sourceLineNo">3004</span> });<a name="line.3004"></a>
-<span class="sourceLineNo">3005</span> }<a name="line.3005"></a>
-<span class="sourceLineNo">3006</span><a name="line.3006"></a>
-<span class="sourceLineNo">3007</span> /**<a name="line.3007"></a>
-<span class="sourceLineNo">3008</span> * Modify an existing Namespace.<a name="line.3008"></a>
-<span class="sourceLineNo">3009</span> * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.3009"></a>
-<span class="sourceLineNo">3010</span> * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.3010"></a>
-<span class="sourceLineNo">3011</span> * <code>nonceGroup</code> (the source must ensure each operation gets a unique id).<a name="line.3011"></a>
-<span class="sourceLineNo">3012</span> * @return procedure id<a name="line.3012"></a>
-<span class="sourceLineNo">3013</span> */<a name="line.3013"></a>
-<span class="sourceLineNo">3014</span> long modifyNamespace(final NamespaceDescriptor newNsDescriptor, final long nonceGroup,<a name="line.3014"></a>
-<span class="sourceLineNo">3015</span> final long nonce) throws IOException {<a name="line.3015"></a>
-<span class="sourceLineNo">3016</span> checkInitialized();<a name="line.3016"></a>
-<span class="sourceLineNo">3017</span><a name="line.3017"></a>
-<span class="sourceLineNo">3018</span> TableName.isLegalNamespaceName(Bytes.toBytes(newNsDescriptor.getName()));<a name="line.3018"></a>
-<span class="sourceLineNo">3019</span><a name="line.3019"></a>
-<span class="sourceLineNo">3020</span> return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.3020"></a>
-<span class="sourceLineNo">3021</span> nonceGroup, nonce) {<a name="line.3021"></a>
-<span class="sourceLineNo">3022</span> @Override<a name="line.3022"></a>
-<span class="sourceLineNo">3023</span> protected void run() throws IOException {<a name="line.3023"></a>
-<span class="sourceLineNo">3024</span> NamespaceDescriptor oldNsDescriptor = getNamespace(newNsDescriptor.getName());<a name="line.3024"></a>
-<span class="sourceLineNo">3025</span> getMaster().getMasterCoprocessorHost().preModifyNamespace(oldNsDescriptor, newNsDescriptor);<a name="line.3025"></a>
-<span class="sourceLineNo">3026</span> // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.3026"></a>
-<span class="sourceLineNo">3027</span> // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.3027"></a>
-<span class="sourceLineNo">3028</span> ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.3028"></a>
-<span class="sourceLineNo">3029</span> LOG.info(getClientIdAuditPrefix() + " modify " + newNsDescriptor);<a name="line.3029"></a>
-<span class="sourceLineNo">3030</span> // Execute the operation synchronously - wait for the operation to complete before<a name="line.3030"></a>
-<span class="sourceLineNo">3031</span> // continuing.<a name="line.3031"></a>
-<span class="sourceLineNo">3032</span> setProcId(getClusterSchema().modifyNamespace(newNsDescriptor, getNonceKey(), latch));<a name="line.3032"></a>
-<span class="sourceLineNo">3033</span> latch.await();<a name="line.3033"></a>
-<span class="sourceLineNo">3034</span> getMaster().getMasterCoprocessorHost().postModifyNamespace(oldNsDescriptor,<a name="line.3034"></a>
-<span class="sourceLineNo">3035</span> newNsDescriptor);<a name="line.3035"></a>
-<span class="sourceLineNo">3036</span> }<a name="line.3036"></a>
-<span class="sourceLineNo">3037</span><a name="line.3037"></a>
-<span class="sourceLineNo">3038</span> @Override<a name="line.3038"></a>
-<span class="sourceLineNo">3039</span> protected String getDescription() {<a name="line.3039"></a>
-<span class="sourceLineNo">3040</span> return "ModifyNamespaceProcedure";<a name="line.3040"></a>
-<span class="sourceLineNo">3041</span> }<a name="line.3041"></a>
-<span class="sourceLineNo">3042</span> });<a name="line.3042"></a>
-<span class="sourceLineNo">3043</span> }<a name="line.3043"></a>
-<span class="sourceLineNo">3044</span><a name="line.3044"></a>
-<span class="sourceLineNo">3045</span> /**<a name="line.3045"></a>
-<span class="sourceLineNo">3046</span> * Delete an existing Namespace. Only empty Namespaces (no tables) can be removed.<a name="line.3046"></a>
-<span class="sourceLineNo">3047</span> * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.3047"></a>
-<span class="sourceLineNo">3048</span> * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.3048"></a>
-<span class="sourceLineNo">3049</span> * <code>nonceGroup</code> (the source must ensure each operation gets a unique id).<a name="line.3049"></a>
-<span class="sourceLineNo">3050</span> * @return procedure id<a name="line.3050"></a>
-<span class="sourceLineNo">3051</span> */<a name="line.3051"></a>
-<span class="sourceLineNo">3052</span> long deleteNamespace(final String name, final long nonceGroup, final long nonce)<a name="line.3052"></a>
-<span class="sourceLineNo">3053</span> throws IOException {<a name="line.3053"></a>
-<span class="sourceLineNo">3054</span> checkInitialized();<a name="line.3054"></a>
-<span class="sourceLineNo">3055</span><a name="line.3055"></a>
-<span class="sourceLineNo">3056</span> return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.3056"></a>
-<span class="sourceLineNo">3057</span> nonceGroup, nonce) {<a name="line.3057"></a>
-<span class="sourceLineNo">3058</span> @Override<a name="line.3058"></a>
-<span class="sourceLineNo">3059</span> protected void run() throws IOException {<a name="line.3059"></a>
-<span class="sourceLineNo">3060</span> getMaster().getMasterCoprocessorHost().preDeleteNamespace(name);<a name="line.3060"></a>
-<span class="sourceLineNo">3061</span> LOG.info(getClientIdAuditPrefix() + " delete " + name);<a name="line.3061"></a>
-<span class="sourceLineNo">3062</span> // Execute the operation synchronously - wait for the operation to complete before<a name="line.3062"></a>
-<span class="sourceLineNo">3063</span> // continuing.<a name="line.3063"></a>
-<span class="sourceLineNo">3064</span> //<a name="line.3064"></a>
-<span class="sourceLineNo">3065</span> // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.3065"></a>
-<span class="sourceLineNo">3066</span> // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.3066"></a>
-<span class="sourceLineNo">3067</span> ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.3067"></a>
-<span class="sourceLineNo">3068</span> setProcId(submitProcedure(<a name="line.3068"></a>
-<span class="sourceLineNo">3069</span> new DeleteNamespaceProcedure(procedureExecutor.getEnvironment(), name, latch)));<a name="line.3069"></a>
-<span class="sourceLineNo">3070</span> latch.await();<a name="line.3070"></a>
-<span class="sourceLineNo">3071</span> // Will not be invoked in the face of Exception thrown by the Procedure's execution<a name="line.3071"></a>
-<span class="sourceLineNo">3072</span> getMaster().getMasterCoprocessorHost().postDeleteNamespace(name);<a name="line.3072"></a>
-<span class="sourceLineNo">3073</span> }<a name="line.3073"></a>
-<span class="sourceLineNo">3074</span><a name="line.3074"></a>
-<span class="sourceLineNo">3075</span> @Override<a name="line.3075"></a>
-<span class="sourceLineNo">3076</span> protected String getDescription() {<a name="line.3076"></a>
-<span class="sourceLineNo">3077</span> return "DeleteNamespaceProcedure";<a name="line.3077"></a>
-<span class="sourceLineNo">3078</span> }<a name="line.3078"></a>
-<span class="sourceLineNo">3079</span> });<a name="line.3079"></a>
-<span class="sourceLineNo">3080</span> }<a name="line.3080"></a>
-<span class="sourceLineNo">3081</span><a name="line.3081"></a>
-<span class="sourceLineNo">3082</span> /**<a name="line.3082"></a>
-<span class="sourceLineNo">3083</span> * Get a Namespace<a name="line.3083"></a>
-<span class="sourceLineNo">3084</span> * @param name Name of the Namespace<a name="line.3084"></a>
-<span class="sourceLineNo">3085</span> * @return Namespace descriptor for <code>name</code><a name="line.3085"></a>
-<span class="sourceLineNo">3086</span> */<a name="line.3086"></a>
-<span class="sourceLineNo">3087</span> NamespaceDescriptor getNamespace(String name) throws IOException {<a name="line.3087"></a>
-<span class="sourceLineNo">3088</span> checkInitialized();<a name="line.3088"></a>
-<span class="sourceLineNo">3089</span> if (this.cpHost != null) this.cpHost.preGetNamespaceDescriptor(name);<a name="line.3089"></a>
-<span class="sourceLineNo">3090</span> NamespaceDescriptor nsd = this.clusterSchemaService.getNamespace(name);<a name="line.3090"></a>
-<span class="sourceLineNo">3091</span> if (this.cpHost != null) this.cpHost.postGetNamespaceDescriptor(nsd);<a name="line.3091"></a>
-<span class="sourceLineNo">3092</span> return nsd;<a name="line.3092"></a>
-<span class="sourceLineNo">3093</span> }<a name="line.3093"></a>
-<span class="sourceLineNo">3094</span><a name="line.3094"></a>
-<span class="sourceLineNo">3095</span> /**<a name="line.3095"></a>
-<span class="sourceLineNo">3096</span> * Get all Namespaces<a name="line.3096"></a>
-<span class="sourceLineNo">3097</span> * @return All Namespace descriptors<a name="line.3097"></a>
-<span class="sourceLineNo">3098</span> */<a name="line.3098"></a>
-<span class="sourceLineNo">3099</span> List<NamespaceDescriptor> getNamespaces() throws IOException {<a name="line.3099"></a>
-<span class="sourceLineNo">3100</span> checkInitialized();<a name="line.3100"></a>
-<span class="sourceLineNo">3101</span> final List<NamespaceDescriptor> nsds = new ArrayList<>();<a name="line.3101"></a>
-<span class="sourceLineNo">3102</span> if (cpHost != null) {<a name="line.3102"></a>
-<span class="sourceLineNo">3103</span> cpHost.preListNamespaceDescriptors(nsds);<a name="line.3103"></a>
-<span class="sourceLineNo">3104</span> }<a name="line.3104"></a>
-<span class="sourceLineNo">3105</span> nsds.addAll(this.clusterSchemaService.getNamespaces());<a name="line.3105"></a>
-<span class="sourceLineNo">3106</span> if (this.cpHost != null) {<a name="line.3106"></a>
-<span class="sourceLineNo">3107</span> this.cpHost.postListNamespaceDescriptors(nsds);<a name="line.3107"></a>
-<span class="sourceLineNo">3108</span> }<a name="line.3108"></a>
-<span class="sourceLineNo">3109</span> return nsds;<a name="line.3109"></a>
-<span class="sourceLineNo">3110</span> }<a name="line.3110"></a>
-<span class="sourceLineNo">3111</span><a name="line.3111"></a>
-<span class="sourceLineNo">3112</span> @Override<a name="line.3112"></a>
-<span class="sourceLineNo">3113</span> public List<TableName> listTableNamesByNamespace(String name) throws IOException {<a name="line.3113"></a>
-<span class="sourceLineNo">3114</span> checkInitialized();<a name="line.3114"></a>
-<span class="sourceLineNo">3115</span> return listTableNames(name, null, true);<a name="line.3115"></a>
-<span class="sourceLineNo">3116</span> }<a name="line.3116"></a>
-<span class="sourceLineNo">3117</span><a name="line.3117"></a>
-<span class="sourceLineNo">3118</span> @Override<a name="line.3118"></a>
-<span class="sourceLineNo">3119</span> public List<TableDescriptor> listTableDescriptorsByNamespace(String name) throws IOException {<a name="line.3119"></a>
-<span class="sourceLineNo">3120</span> checkInitialized();<a name="line.3120"></a>
-<span class="sourceLineNo">3121</span> return listTableDescriptors(name, null, null, true);<a name="line.3121"></a>
-<span class="sourceLineNo">3122</span> }<a name="line.3122"></a>
-<span class="sourceLineNo">3123</span><a name="line.3123"></a>
-<span class="sourceLineNo">3124</span> @Override<a name="line.3124"></a>
-<span class="sourceLineNo">3125</span> public boolean abortProcedure(final long procId, final boolean mayInterruptIfRunning)<a name="line.3125"></a>
-<span class="sourceLineNo">3126</span> throws IOException {<a name="line.3126"></a>
-<span class="sourceLineNo">3127</span> if (cpHost != null) {<a name="line.3127"></a>
-<span class="sourceLineNo">3128</span> cpHost.preAbortProcedure(this.procedureExecutor, procId);<a name="line.3128"></a>
-<span class="sourceLineNo">3129</span> }<a name="line.3129"></a>
-<span class="sourceLineNo">3130</span><a name="line.3130"></a>
-<span class="sourceLineNo">3131</span> final boolean result = this.procedureExecutor.abort(procId, mayInterruptIfRunning);<a name="line.3131"></a>
-<span class="sourceLineNo">3132</span><a name="line.3132"></a>
-<span class="sourceLineNo">3133</span> if (cpHost != null) {<a name="line.3133"></a>
-<span class="sourceLineNo">3134</span> cpHost.postAbortProcedure();<a name="line.3134"></a>
-<span class="sourceLineNo">3135</span> }<a name="line.3135"></a>
-<span class="sourceLineNo">3136</span><a name="line.3136"></a>
-<span class="sourceLineNo">3137</span> return result;<a name="line.3137"></a>
-<span class="sourceLineNo">3138</span> }<a name="line.3138"></a>
+<span class="sourceLineNo">2825</span> public boolean isInMaintenanceMode() throws IOException {<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span> if (!isInitialized()) {<a name="line.2826"></a>
+<span class="sourceLineNo">2827</span> throw new PleaseHoldException("Master is initializing");<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span> }<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span> return maintenanceModeTracker.isInMaintenanceMode();<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span> }<a name="line.2830"></a>
+<span class="sourceLineNo">2831</span><a name="line.2831"></a>
+<span class="sourceLineNo">2832</span> @VisibleForTesting<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span> public void setInitialized(boolean isInitialized) {<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span> procedureExecutor.getEnvironment().setEventReady(initialized, isInitialized);<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span> }<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span><a name="line.2836"></a>
+<span class="sourceLineNo">2837</span> @Override<a name="line.2837"></a>
+<span class="sourceLineNo">2838</span> public ProcedureEvent<?> getInitializedEvent() {<a name="line.2838"></a>
+<span class="sourceLineNo">2839</span> return initialized;<a name="line.2839"></a>
+<span class="sourceLineNo">2840</span> }<a name="line.2840"></a>
+<span class="sourceLineNo">2841</span><a name="line.2841"></a>
+<span class="sourceLineNo">2842</span> /**<a name="line.2842"></a>
+<span class="sourceLineNo">2843</span> * ServerCrashProcessingEnabled is set false before completing assignMeta to prevent processing<a name="line.2843"></a>
+<span class="sourceLineNo">2844</span> * of crashed servers.<a name="line.2844"></a>
+<span class="sourceLineNo">2845</span> * @return true if assignMeta has completed;<a name="line.2845"></a>
+<span class="sourceLineNo">2846</span> */<a name="line.2846"></a>
+<span class="sourceLineNo">2847</span> @Override<a name="line.2847"></a>
+<span class="sourceLineNo">2848</span> public boolean isServerCrashProcessingEnabled() {<a name="line.2848"></a>
+<span class="sourceLineNo">2849</span> return serverCrashProcessingEnabled.isReady();<a name="line.2849"></a>
+<span class="sourceLineNo">2850</span> }<a name="line.2850"></a>
+<span class="sourceLineNo">2851</span><a name="line.2851"></a>
+<span class="sourceLineNo">2852</span> @VisibleForTesting<a name="line.2852"></a>
+<span class="sourceLineNo">2853</span> public void setServerCrashProcessingEnabled(final boolean b) {<a name="line.2853"></a>
+<span class="sourceLineNo">2854</span> procedureExecutor.getEnvironment().setEventReady(serverCrashProcessingEnabled, b);<a name="line.2854"></a>
+<span class="sourceLineNo">2855</span> }<a name="line.2855"></a>
+<span class="sourceLineNo">2856</span><a name="line.2856"></a>
+<span class="sourceLineNo">2857</span> public ProcedureEvent<?> getServerCrashProcessingEnabledEvent() {<a name="line.2857"></a>
+<span class="sourceLineNo">2858</span> return serverCrashProcessingEnabled;<a name="line.2858"></a>
+<span class="sourceLineNo">2859</span> }<a name="line.2859"></a>
+<span class="sourceLineNo">2860</span><a name="line.2860"></a>
+<span class="sourceLineNo">2861</span> /**<a name="line.2861"></a>
+<span class="sourceLineNo">2862</span> * Compute the average load across all region servers.<a name="line.2862"></a>
+<span class="sourceLineNo">2863</span> * Currently, this uses a very naive computation - just uses the number of<a name="line.2863"></a>
+<span class="sourceLineNo">2864</span> * regions being served, ignoring stats about number of requests.<a name="line.2864"></a>
+<span class="sourceLineNo">2865</span> * @return the average load<a name="line.2865"></a>
+<span class="sourceLineNo">2866</span> */<a name="line.2866"></a>
+<span class="sourceLineNo">2867</span> public double getAverageLoad() {<a name="line.2867"></a>
+<span class="sourceLineNo">2868</span> if (this.assignmentManager == null) {<a name="line.2868"></a>
+<span class="sourceLineNo">2869</span> return 0;<a name="line.2869"></a>
+<span class="sourceLineNo">2870</span> }<a name="line.2870"></a>
+<span class="sourceLineNo">2871</span><a name="line.2871"></a>
+<span class="sourceLineNo">2872</span> RegionStates regionStates = this.assignmentManager.getRegionStates();<a name="line.2872"></a>
+<span class="sourceLineNo">2873</span> if (regionStates == null) {<a name="line.2873"></a>
+<span class="sourceLineNo">2874</span> return 0;<a name="line.2874"></a>
+<span class="sourceLineNo">2875</span> }<a name="line.2875"></a>
+<span class="sourceLineNo">2876</span> return regionStates.getAverageLoad();<a name="line.2876"></a>
+<span class="sourceLineNo">2877</span> }<a name="line.2877"></a>
+<span class="sourceLineNo">2878</span><a name="line.2878"></a>
+<span class="sourceLineNo">2879</span> /*<a name="line.2879"></a>
+<span class="sourceLineNo">2880</span> * @return the count of region split plans executed<a name="line.2880"></a>
+<span class="sourceLineNo">2881</span> */<a name="line.2881"></a>
+<span class="sourceLineNo">2882</span> public long getSplitPlanCount() {<a name="line.2882"></a>
+<span class="sourceLineNo">2883</span> return splitPlanCount;<a name="line.2883"></a>
+<span class="sourceLineNo">2884</span> }<a name="line.2884"></a>
+<span class="sourceLineNo">2885</span><a name="line.2885"></a>
+<span class="sourceLineNo">2886</span> /*<a name="line.2886"></a>
+<span class="sourceLineNo">2887</span> * @return the count of region merge plans executed<a name="line.2887"></a>
+<span class="sourceLineNo">2888</span> */<a name="line.2888"></a>
+<span class="sourceLineNo">2889</span> public long getMergePlanCount() {<a name="line.2889"></a>
+<span class="sourceLineNo">2890</span> return mergePlanCount;<a name="line.2890"></a>
+<span class="sourceLineNo">2891</span> }<a name="line.2891"></a>
+<span class="sourceLineNo">2892</span><a name="line.2892"></a>
+<span class="sourceLineNo">2893</span> @Override<a name="line.2893"></a>
+<span class="sourceLineNo">2894</span> public boolean registerService(Service instance) {<a name="line.2894"></a>
+<span class="sourceLineNo">2895</span> /*<a name="line.2895"></a>
+<span class="sourceLineNo">2896</span> * No stacking of instances is allowed for a single service name<a name="line.2896"></a>
+<span class="sourceLineNo">2897</span> */<a name="line.2897"></a>
+<span class="sourceLineNo">2898</span> Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.2898"></a>
+<span class="sourceLineNo">2899</span> String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.2899"></a>
+<span class="sourceLineNo">2900</span> if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.2900"></a>
+<span class="sourceLineNo">2901</span> LOG.error("Coprocessor service "+serviceName+<a name="line.2901"></a>
+<span class="sourceLineNo">2902</span> " already registered, rejecting request from "+instance<a name="line.2902"></a>
+<span class="sourceLineNo">2903</span> );<a name="line.2903"></a>
+<span class="sourceLineNo">2904</span> return false;<a name="line.2904"></a>
+<span class="sourceLineNo">2905</span> }<a name="line.2905"></a>
+<span class="sourceLineNo">2906</span><a name="line.2906"></a>
+<span class="sourceLineNo">2907</span> coprocessorServiceHandlers.put(serviceName, instance);<a name="line.2907"></a>
+<span class="sourceLineNo">2908</span> if (LOG.isDebugEnabled()) {<a name="line.2908"></a>
+<span class="sourceLineNo">2909</span> LOG.debug("Registered master coprocessor service: service="+serviceName);<a name="line.2909"></a>
+<span class="sourceLineNo">2910</span> }<a name="line.2910"></a>
+<span class="sourceLineNo">2911</span> return true;<a name="line.2911"></a>
+<span class="sourceLineNo">2912</span> }<a name="line.2912"></a>
+<span class="sourceLineNo">2913</span><a name="line.2913"></a>
+<span class="sourceLineNo">2914</span> /**<a name="line.2914"></a>
+<span class="sourceLineNo">2915</span> * Utility for constructing an instance of the passed HMaster class.<a name="line.2915"></a>
+<span class="sourceLineNo">2916</span> * @param masterClass<a name="line.2916"></a>
+<span class="sourceLineNo">2917</span> * @return HMaster instance.<a name="line.2917"></a>
+<span class="sourceLineNo">2918</span> */<a name="line.2918"></a>
+<span class="sourceLineNo">2919</span> public static HMaster constructMaster(Class<? extends HMaster> masterClass,<a name="line.2919"></a>
+<span class="sourceLineNo">2920</span> final Configuration conf) {<a name="line.2920"></a>
+<span class="sourceLineNo">2921</span> try {<a name="line.2921"></a>
+<span class="sourceLineNo">2922</span> Constructor<? extends HMaster> c = masterClass.getConstructor(Configuration.class);<a name="line.2922"></a>
+<span class="sourceLineNo">2923</span> return c.newInstance(conf);<a name="line.2923"></a>
+<span class="sourceLineNo">2924</span> } catch(Exception e) {<a name="line.2924"></a>
+<span class="sourceLineNo">2925</span> Throwable error = e;<a name="line.2925"></a>
+<span class="sourceLineNo">2926</span> if (e instanceof InvocationTargetException &&<a name="line.2926"></a>
+<span class="sourceLineNo">2927</span> ((InvocationTargetException)e).getTargetException() != null) {<a name="line.2927"></a>
+<span class="sourceLineNo">2928</span> error = ((InvocationTargetException)e).getTargetException();<a name="line.2928"></a>
+<span class="sourceLineNo">2929</span> }<a name="line.2929"></a>
+<span class="sourceLineNo">2930</span> throw new RuntimeException("Failed construction of Master: " + masterClass.toString() + ". "<a name="line.2930"></a>
+<span class="sourceLineNo">2931</span> , error);<a name="line.2931"></a>
+<span class="sourceLineNo">2932</span> }<a name="line.2932"></a>
+<span class="sourceLineNo">2933</span> }<a name="line.2933"></a>
+<span class="sourceLineNo">2934</span><a name="line.2934"></a>
+<span class="sourceLineNo">2935</span> /**<a name="line.2935"></a>
+<span class="sourceLineNo">2936</span> * @see org.apache.hadoop.hbase.master.HMasterCommandLine<a name="line.2936"></a>
+<span class="sourceLineNo">2937</span> */<a name="line.2937"></a>
+<span class="sourceLineNo">2938</span> public static void main(String [] args) {<a name="line.2938"></a>
+<span class="sourceLineNo">2939</span> LOG.info("STARTING service " + HMaster.class.getSimpleName());<a name="line.2939"></a>
+<span class="sourceLineNo">2940</span> VersionInfo.logVersion();<a name="line.2940"></a>
+<span class="sourceLineNo">2941</span> new HMasterCommandLine(HMaster.class).doMain(args);<a name="line.2941"></a>
+<span class="sourceLineNo">2942</span> }<a name="line.2942"></a>
+<span class="sourceLineNo">2943</span><a name="line.2943"></a>
+<span class="sourceLineNo">2944</span> public HFileCleaner getHFileCleaner() {<a name="line.2944"></a>
+<span class="sourceLineNo">2945</span> return this.hfileCleaner;<a name="line.2945"></a>
+<span class="sourceLineNo">2946</span> }<a name="line.2946"></a>
+<span class="sourceLineNo">2947</span><a name="line.2947"></a>
+<span class="sourceLineNo">2948</span> public LogCleaner getLogCleaner() {<a name="line.2948"></a>
+<span class="sourceLineNo">2949</span> return this.logCleaner;<a name="line.2949"></a>
+<span class="sourceLineNo">2950</span> }<a name="line.2950"></a>
+<span class="sourceLineNo">2951</span><a name="line.2951"></a>
+<span class="sourceLineNo">2952</span> /**<a name="line.2952"></a>
+<span class="sourceLineNo">2953</span> * @return the underlying snapshot manager<a name="line.2953"></a>
+<span class="sourceLineNo">2954</span> */<a name="line.2954"></a>
+<span class="sourceLineNo">2955</span> @Override<a name="line.2955"></a>
+<span class="sourceLineNo">2956</span> public SnapshotManager getSnapshotManager() {<a name="line.2956"></a>
+<span class="sourceLineNo">2957</span> return this.snapshotManager;<a name="line.2957"></a>
+<span class="sourceLineNo">2958</span> }<a name="line.2958"></a>
+<span class="sourceLineNo">2959</span><a name="line.2959"></a>
+<span class="sourceLineNo">2960</span> /**<a name="line.2960"></a>
+<span class="sourceLineNo">2961</span> * @return the underlying MasterProcedureManagerHost<a name="line.2961"></a>
+<span class="sourceLineNo">2962</span> */<a name="line.2962"></a>
+<span class="sourceLineNo">2963</span> @Override<a name="line.2963"></a>
+<span class="sourceLineNo">2964</span> public MasterProcedureManagerHost getMasterProcedureManagerHost() {<a name="line.2964"></a>
+<span class="sourceLineNo">2965</span> return mpmHost;<a name="line.2965"></a>
+<span class="sourceLineNo">2966</span> }<a name="line.2966"></a>
+<span class="sourceLineNo">2967</span><a name="line.2967"></a>
+<span class="sourceLineNo">2968</span> @Override<a name="line.2968"></a>
+<span class="sourceLineNo">2969</span> public ClusterSchema getClusterSchema() {<a name="line.2969"></a>
+<span class="sourceLineNo">2970</span> return this.clusterSchemaService;<a name="line.2970"></a>
+<span class="sourceLineNo">2971</span> }<a name="line.2971"></a>
+<span class="sourceLineNo">2972</span><a name="line.2972"></a>
+<span class="sourceLineNo">2973</span> /**<a name="line.2973"></a>
+<span class="sourceLineNo">2974</span> * Create a new Namespace.<a name="line.2974"></a>
+<span class="sourceLineNo">2975</span> * @param namespaceDescriptor descriptor for new Namespace<a name="line.2975"></a>
+<span class="sourceLineNo">2976</span> * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.2976"></a>
+<span class="sourceLineNo">2977</span> * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.2977"></a>
+<span class="sourceLineNo">2978</span> * <code>nonceGroup</code> (the source must ensure each operation gets a unique id).<a name="line.2978"></a>
+<span class="sourceLineNo">2979</span> * @return procedure id<a name="line.2979"></a>
+<span class="sourceLineNo">2980</span> */<a name="line.2980"></a>
+<span class="sourceLineNo">2981</span> long createNamespace(final NamespaceDescriptor namespaceDescriptor, final long nonceGroup,<a name="line.2981"></a>
+<span class="sourceLineNo">2982</span> final long nonce) throws IOException {<a name="line.2982"></a>
+<span class="sourceLineNo">2983</span> checkInitialized();<a name="line.2983"></a>
+<span class="sourceLineNo">2984</span><a name="line.2984"></a>
+<span class="sourceLineNo">2985</span> TableName.isLegalNamespaceName(Bytes.toBytes(namespaceDescriptor.getName()));<a name="line.2985"></a>
+<span class="sourceLineNo">2986</span><a name="line.2986"></a>
+<span class="sourceLineNo">2987</span> return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.2987"></a>
+<span class="sourceLineNo">2988</span> nonceGroup, nonce) {<a name="line.2988"></a>
+<span class="sourceLineNo">2989</span> @Override<a name="line.2989"></a>
+<span class="sourceLineNo">2990</span> protected void run() throws IOException {<a name="line.2990"></a>
+<span class="sourceLineNo">2991</span> getMaster().getMasterCoprocessorHost().preCreateNamespace(namespaceDescriptor);<a name="line.2991"></a>
+<span class="sourceLineNo">2992</span> // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.2992"></a>
+<span class="sourceLineNo">2993</span> // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.2993"></a>
+<span class="sourceLineNo">2994</span> ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.2994"></a>
+<span class="sourceLineNo">2995</span> LOG.info(getClientIdAuditPrefix() + " creating " + namespaceDescriptor);<a name="line.2995"></a>
+<span class="sourceLineNo">2996</span> // Execute the operation synchronously - wait for the operation to complete before<a name="line.2996"></a>
+<span class="sourceLineNo">2997</span> // continuing.<a name="line.2997"></a>
+<span class="sourceLineNo">2998</span> setProcId(getClusterSchema().createNamespace(namespaceDescriptor, getNonceKey(), latch));<a name="line.2998"></a>
+<span class="sourceLineNo">2999</span> latch.await();<a name="line.2999"></a>
+<span class="sourceLineNo">3000</span> getMaster().getMasterCoprocessorHost().postCreateNamespace(namespaceDescriptor);<a name="line.3000"></a>
+<span class="sourceLineNo">3001</span> }<a name="line.3001"></a>
+<span class="sourceLineNo">3002</span><a name="line.3002"></a>
+<span class="sourceLineNo">3003</span> @Override<a name="line.3003"></a>
+<span class="sourceLineNo">3004</span> protected String getDescription() {<a name="line.3004"></a>
+<span class="sourceLineNo">3005</span> return "CreateNamespaceProcedure";<a name="line.3005"></a>
+<span class="sourceLineNo">3006</span> }<a name="line.3006"></a>
+<span class="sourceLineNo">3007</span> });<a name="line.3007"></a>
+<span class="sourceLineNo">3008</span> }<a name="line.3008"></a>
+<span class="sourceLineNo">3009</span><a name="line.3009"></a>
+<span class="sourceLineNo">3010</span> /**<a name="line.3010"></a>
+<span class="sourceLineNo">3011</span> * Modify an existing Namespace.<a name="line.3011"></a>
+<span class="sourceLineNo">3012</span> * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.3012"></a>
+<span class="sourceLineNo">3013</span> * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.3013"></a>
+<span class="sourceLineNo">3014</span> * <code>nonceGroup</code> (the source must ensure each operation gets a unique id).<a name="line.3014"></a>
+<span class="sourceLineNo">3015</span> * @return procedure id<a name="line.3015"></a>
+<span class="sourceLineNo">3016</span> */<a name="line.3016"></a>
+<span class="sourceLineNo">3017</span> long modifyNamespace(final NamespaceDescriptor newNsDescriptor, final long nonceGroup,<a name="line.3017"></a>
+<span class="sourceLineNo">3018</span> final long nonce) throws IOException {<a name="line.3018"></a>
+<span class="sourceLineNo">3019</span> checkInitialized();<a name="line.3019"></a>
+<span class="sourceLineNo">3020</span><a name="line.3020"></a>
+<span class="sourceLineNo">3021</span> TableName.isLegalNamespaceName(Bytes.toBytes(newNsDescriptor.getName()));<a name="line.3021"></a>
+<span class="sourceLineNo">3022</span><a name="line.3022"></a>
+<span class="sourceLineNo">3023</span> return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.3023"></a>
+<span class="sourceLineNo">3024</span> nonceGroup, nonce) {<a name="line.3024"></a>
+<span class="sourceLineNo">3025</span> @Override<a name="line.3025"></a>
+<span class="sourceLineNo">3026</span> protected void run() throws IOException {<a name="line.3026"></a>
+<span class="sourceLineNo">3027</span> NamespaceDescriptor oldNsDescriptor = getNamespace(newNsDescriptor.getName());<a name="line.3027"></a>
+<span class="sourceLineNo">3028</span> getMaster().getMasterCoprocessorHost().preModifyNamespace(oldNsDescriptor, newNsDescriptor);<a name="line.3028"></a>
+<span class="sourceLineNo">3029</span> // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.3029"></a>
+<span class="sourceLineNo">3030</span> // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.3030"></a>
+<span class="sourceLineNo">3031</span> ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.3031"></a>
+<span class="sourceLineNo">3032</span> LOG.info(getClientIdAuditPrefix() + " modify " + newNsDescriptor);<a name="line.3032"></a>
+<span class="sourceLineNo">3033</span> // Execute the operation synchronously - wait for the operation to complete before<a name="line.3033"></a>
+<span class="sourceLineNo">3034</span> // continuing.<a name="line.3034"></a>
+<span class="sourceLineNo">3035</span> setProcId(getClusterSchema().modifyNamespace(newNsDescriptor, getNonceKey(), latch));<a name="line.3035"></a>
+<span class="sourceLineNo">3036</span> latch.await();<a name="line.3036"></a>
+<span class="sourceLineNo">3037</span> getMaster().getMasterCoprocessorHost().postModifyNamespace(oldNsDescriptor,<a name="line.3037"></a>
+<span class="sourceLineNo">3038</span> newNsDescriptor);<a name="line.3038"></a>
+<span class="sourceLineNo">3039</span> }<a name="line.3039"></a>
+<span class="sourceLineNo">3040</span><a name="line.3040"></a>
+<span class="sourceLineNo">3041</span> @Override<a name="line.3041"></a>
+<span class="sourceLineNo">3042</span> protected String getDescription() {<a name="line.3042"></a>
+<span class="sourceLineNo">3043</span> return "ModifyNamespaceProcedure";<a name="line.3043"></a>
+<span class="sourceLineNo">3044</span> }<a name="line.3044"></a>
+<span class="sourceLineNo">3045</span> });<a name="line.3045"></a>
+<span class="sourceLineNo">3046</span> }<a name="line.3046"></a>
+<span class="sourceLineNo">3047</span><a name="line.3047"></a>
+<span class="sourceLineNo">3048</span> /**<a name="line.3048"></a>
+<span class="sourceLineNo">3049</span> * Delete an existing Namespace. Only empty Namespaces (no tables) can be removed.<a name="line.3049"></a>
+<span class="sourceLineNo">3050</span> * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.3050"></a>
+<span class="sourceLineNo">3051</span> * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.3051"></a>
+<span class="sourceLineNo">3052</span> * <code>nonceGroup</code> (the source must ensure each operation gets a unique id).<a name="line.3052"></a>
+<span class="sourceLineNo">3053</span> * @return procedure id<a name="line.3053"></a>
+<span class="sourceLineNo">3054</span> */<a name="line.3054"></a>
+<span class="sourceLineNo">3055</span> long deleteNamespace(final String name, final long nonceGroup, final long nonce)<a name="line.3055"></a>
+<span class="sourceLineNo">3056</span> throws IOException {<a name="line.3056"></a>
+<span class="sourceLineNo">3057</span> checkInitialized();<a name="line.3057"></a>
+<span class="sourceLineNo">3058</span><a name="line.3058"></a>
+<span class="sourceLineNo">3059</span> return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.3059"></a>
+<span class="sourceLineNo">3060</span> nonceGroup, nonce) {<a name="line.3060"></a>
+<span class="sourceLineNo">3061</span> @Override<a name="line.3061"></a>
+<span class="sourceLineNo">3062</span> protected void run() throws IOException {<a name="line.3062"></a>
+<span class="sourceLineNo">3063</span> getMaster().getMasterCoprocessorHost().preDeleteNamespace(name);<a name="line.3063"></a>
+<span class="sourceLineNo">3064</span> LOG.info(getClientIdAuditPrefix() + " delete " + name);<a name="line.3064"></a>
+<span class="sourceLineNo">3065</span> // Execute the operation synchronously - wait for the operation to complete before<a name="line.3065"></a>
+<span class="sourceLineNo">3066</span> // continuing.<a name="line.3066"></a>
+<span class="sourceLineNo">3067</span> //<a name="line.3067"></a>
+<span class="sourceLineNo">3068</span> // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.3068"></a>
+<span class="sourceLineNo">3069</span> // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.3069"></a>
+<span class="sourceLineNo">3070</span> ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.3070"></a>
+<span class="sourceLineNo">3071</span> setProcId(submitProcedure(<a name="line.3071"></a>
+<span class="sourceLineNo">3072</span> new DeleteNamespaceProcedure(procedureExecutor.getEnvironment(), name, latch)));<a name="line.3072"></a>
+<span class="sourceLineNo">3073</span> latch.await();<a name="line.3073"></a>
+<span class="sourceLineNo">3074</span> // Will not be invoked in the face of Exception thrown by the Procedure's execution<a name="line.3074"></a>
+<span class="sourceLineNo">3075</span> getMaster().getMasterCoprocessorHost().postDeleteNamespace(name);<a name="line.3075"></a>
+<span class="sourceLineNo">3076</span> }<a name="line.3076"></a>
+<span class="sourceLineNo">3077</span><a name="line.3077"></a>
+<span class="sourceLineNo">3078</span> @Override<a name="line.3078"></a>
+<span class="sourceLineNo">3079</span> protected String getDescription() {<a name="line.3079"></a>
+<span class="sourceLineNo">3080</span> return "DeleteNamespaceProcedure";<a name="line.3080"></a>
+<span class="sourceLineNo">3081</span> }<a name="line.3081"></a>
+<span class="sourceLineNo">3082</span> });<a name="line.3082"></a>
+<span class="sourceLineNo">3083</span> }<a name="line.3083"></a>
+<span class="sourceLineNo">3084</span><a name="line.3084"></a>
+<span class="sourceLineNo">3085</span> /**<a name="line.3085"></a>
+<span class="sourceLineNo">3086</span> * Get a Namespace<a name="line.3086"></a>
+<span class="sourceLineNo">3087</span> * @param name Name of the Namespace<a name="line.3087"></a>
+<span class="sourceLineNo">3088</span> * @return Namespace descriptor for <code>name</code><a name="line.3088"></a>
+<span class="sourceLineNo">3089</span> */<a name="line.3089"></a>
+<span class="sourceLineNo">3090</span> NamespaceDescriptor getNamespace(String name) throws IOException {<a name="line.3090"></a>
+<span class="sourceLineNo">3091</span> checkInitialized();<a name="line.3091"></a>
+<span class="sourceLineNo">3092</span> if (this.cpHost != null) this.cpHost.preGetNamespaceDescriptor(name);<a name="line.3092"></a>
+<span class="sourceLineNo">3093</span> NamespaceDescriptor nsd = this.clusterSchemaService.getNamespace(name);<a name="line.3093"></a>
+<span class="sourceLineNo">3094</span> if (this.cpHost != null) this.cpHost.postGetNamespaceDescriptor(nsd);<a name="line.3094"></a>
+<span class="sourceLineNo">3095</span> return nsd;<a name="line.3095"></a>
+<span class="sourceLineNo">3096</span> }<a name="line.3096"></a>
+<span class="sourceLineNo">3097</span><a name="line.3097"></a>
+<span class="sourceLineNo">3098</span> /**<a name="line.3098"></a>
+<span class="sourceLineNo">3099</span> * Get all Namespaces<a name="line.3099"></a>
+<span class="sourceLineNo">3100</span> * @return All Namespace descriptors<a name="line.3100"></a>
+<span class="sourceLineNo">3101</span> */<a name="line.3101"></a>
+<span class="sourceLineNo">3102</span> List<NamespaceDescriptor> getNamespaces() throws IOException {<a name="line.3102"></a>
+<span class="sourceLineNo">3103</span> checkInitialized();<a name="line.3103"></a>
+<span class="sourceLineNo">3104</span> final List<NamespaceDescriptor> nsds = new ArrayList<>();<a name="line.3104"></a>
+<span class="sourceLineNo">3105</span> if (cpHost != null) {<a name="line.3105"></a>
+<span class="sourceLineNo">3106</span> cpHost.preListNamespaceDescriptors(nsds);<a name="line.3106"></a>
+<span class="sourceLineNo">3107</span> }<a name="line.3107"></a>
+<span class="sourceLineNo">3108</span> nsds.addAll(this.clusterSchemaService.getNamespaces());<a name="line.3108"></a>
+<span class="sourceLineNo">3109</span> if (this.cpHost != null) {<a name="line.3109"></a>
+<span class="sourceLineNo">3110</span> this.cpHost.postListNamespaceDescriptors(nsds);<a name="line.3110"></a>
+<span class="sourceLineNo">3111</span> }<a name="line.3111"></a>
+<span class="sourceLineNo">3112</span> return nsds;<a name="line.3112"></a>
+<span class="sourceLineNo">3113</span> }<a name="line.3113"></a>
+<span class="sourceLineNo">3114</span><a name="line.3114"></a>
+<span class="sourceLineNo">3115</span> @Override<a name="line.3115"></a>
+<span class="sourceLineNo">3116</span> public List<TableName> listTableNamesByNamespace(String name) throws IOException {<a name="line.3116"></a>
+<span class="sourceLineNo">3117</span> checkInitialized();<a name="line.3117"></a>
+<span class="sourceLineNo">3118</span> return listTableNames(name, null, true);<a name="line.3118"></a>
+<span class="sourceLineNo">3119</span> }<a name="line.3119"></a>
+<span class="sourceLineNo">3120</span><a name="line.3120"></a>
+<span class="sourceLineNo">3121</span> @Override<a name="line.3121"></a>
+<span class="sourceLineNo">3122</span> public List<TableDescriptor> listTableDescriptorsByNamespace(String name) throws IOException {<a name="line.3122"></a>
+<span class="sourceLineNo">3123</span> checkInitialized();<a name="line.3123"></a>
+<span class="sourceLineNo">3124</span> return listTableDescriptors(name, null, null, true);<a name="line.3124"></a>
+<span class="sourceLineNo">3125</span> }<a name="line.3125"></a>
+<span class="sourceLineNo">3126</span><a name="line.3126"></a>
+<span class="sourceLineNo">3127</span> @Override<a name="line.3127"></a>
+<span class="sourceLineNo">3128</span> public boolean abortProcedure(final long procId, final boolean mayInterruptIfRunning)<a name="line.3128"></a>
+<span class="sourceLineNo">3129</span> throws IOException {<a name="line.3129"></a>
+<span class="sourceLineNo">3130</span> if (cpHost != null) {<a name="line.3130"></a>
+<span class="sourceLineNo">3131</span> cpHost.preAbortProcedure(this.procedureExecutor, procId);<a name="line.3131"></a>
+<span class="sourceLineNo">3132</span> }<a name="line.3132"></a>
+<span class="sourceLineNo">3133</span><a name="line.3133"></a>
+<span class="sourceLineNo">3134</span> final boolean result = this.procedureExecutor.abort(procId, mayInterruptIfRunning);<a name="line.3134"></a>
+<span class="sourceLineNo">3135</span><a name="line.3135"></a>
+<span class="sourceLineNo">3136</span> if (cpHost != null) {<a name="line.3136"></a>
+<span class="sourceLineNo">3137</span> cpHost.postAbortProcedure();<a name="line.3137"></a>
+<span class="sourceLineNo">3138</span> }<a name="line.3138"></a>
<span class="sourceLineNo">3139</span><a name="line.3139"></a>
-<span class="sourceLineNo">3140</span> @Override<a name="line.3140"></a>
-<span class="sourceLineNo">3141</span> public List<Procedure<?>> getProcedures() throws IOException {<a name="line.3141"></a>
-<span class="sourceLineNo">3142</span> if (cpHost != null) {<a name="line.3142"></a>
-<span class="sourceLineNo">3143</span> cpHost.preGetProcedures();<a name="line.3143"></a>
-<span class="sourceLineNo">3144</span> }<a name="line.3144"></a>
-<span class="sourceLineNo">3145</span><a name="line.3145"></a>
-<span class="sourceLineNo">3146</span> final List<Procedure<?>> procList = this.procedureExecutor.getProcedures();<a name="line.3146"></a>
-<span class="sourceLineNo">3147</span><a name="line.3147"></a>
-<span class="sourceLineNo">3148</span> if (cpHost != null) {<a name="line.3148"></a>
-<span class="sourceLineNo">3149</span> cpHost.postGetProcedures(procList);<a name="line.3149"></a>
-<span class="sourceLineNo">3150</span> }<a name="line.3150"></a>
-<span class="sourceLineNo">3151</span><a name="line.3151"></a>
-<span class="sourceLineNo">3152</span> return procList;<a name="line.3152"></a>
-<span class="sourceLineNo">3153</span> }<a name="line.3153"></a>
+<span class="sourceLineNo">3140</span> return result;<a name="line.3140"></a>
+<span class="sourceLineNo">3141</span> }<a name="line.3141"></a>
+<span class="sourceLineNo">3142</span><a name="line.3142"></a>
+<span class="sourceLineNo">3143</span> @Override<a name="line.3143"></a>
+<span class="sourceLineNo">3144</span> public List<Procedure<?>> getProcedures() throws IOException {<a name="line.3144"></a>
+<span class="sourceLineNo">3145</span> if (cpHost != null) {<a name="line.3145"></a>
+<span class="sourceLineNo">3146</span> cpHost.preGetProcedures();<a name="line.3146"></a>
+<span class="sourceLineNo">3147</span> }<a name="line.3147"></a>
+<span class="sourceLineNo">3148</span><a name="line.3148"></a>
+<span class="sourceLineNo">3149</span> final List<Procedure<?>> procList = this.procedureExecutor.getProcedures();<a name="line.3149"></a>
+<span class="sourceLineNo">3150</span><a name="line.3150"></a>
+<span class="sourceLineNo">3151</span> if (cpHost != null) {<a name="line.3151"></a>
+<span class="sourceLineNo">3152</span> cpHost.postGetProcedures(procList);<a name="line.3152"></a>
+<span class="sourceLineNo">3153</span> }<a name="line.3153"></a>
<span class="sourceLineNo">3154</span><a name="line.3154"></a>
-<span class="sourceLineNo">3155</span> @Override<a name="line.3155"></a>
-<span class="sourceLineNo">3156</span> public List<LockedResource> getLocks() throws IOException {<a name="line.3156"></a>
-<span class="sourceLineNo">3157</span> if (cpHost != null) {<a name="line.3157"></a>
-<span class="sourceLineNo">3158</span> cpHost.preGetLocks();<a name="line.3158"></a>
-<span class="sourceLineNo">3159</span> }<a name="line.3159"></a>
-<span class="sourceLineNo">3160</span><a name="line.3160"></a>
-<span class="sourceLineNo">3161</span> MasterProcedureScheduler procedureScheduler = procedureExecutor.getEnvironment().getProcedureScheduler();<a name="line.3161"></a>
-<span class="sourceLineNo">3162</span><a name="line.3162"></a>
-<span class="sourceLineNo">3163</span> final List<LockedResource> lockedResources = procedureScheduler.getLocks();<a name="line.3163"></a>
-<span class="sourceLineNo">3164</span><a name="line.3164"></a>
-<span class="sourceLineNo">3165</span> if (cpHost != null) {<a name="line.3165"></a>
-<span class="sourceLineNo">3166</span> cpHost.postGetLocks(lockedResources);<a name="line.3166"></a>
-<span class="sourceLineNo">3167</span> }<a name="line.3167"></a>
-<span class="sourceLineNo">3168</span><a name="line.3168"></a>
-<span class="sourceLineNo">3169</span> return lockedResources;<a name="line.3169"></a>
-<span class="sourceLineNo">3170</span> }<a name="line.3170"></a>
+<span class="sourceLineNo">3155</span> return procList;<a name="line.3155"></a>
+<span class="sourceLineNo">3156</span> }<a name="line.3156"></a>
+<span class="sourceLineNo">3157</span><a name="line.3157"></a>
+<span class="sourceLineNo">3158</span> @Override<a name="line.3158"></a>
+<span class="sourceLineNo">3159</span> public List<LockedResource> getLocks() throws IOException {<a name="line.3159"></a>
+<span class="sourceLineNo">3160</span> if (cpHost != null) {<a name="line.3160"></a>
+<span class="sourceLineNo">3161</span> cpHost.preGetLocks();<a name="line.3161"></a>
+<span class="sourceLineNo">3162</span> }<a name="line.3162"></a>
+<span class="sourceLineNo">3163</span><a name="line.3163"></a>
+<span class="sourceLineNo">3164</span> MasterProcedureScheduler procedureScheduler = procedureExecutor.getEnvironment().getProcedureScheduler();<a name="line.3164"></a>
+<span class="sourceLineNo">3165</span><a name="line.3165"></a>
+<span class="sourceLineNo">3166</span> final List<LockedResource> lockedResources = procedureScheduler.getLocks();<a name="line.3166"></a>
+<span class="sourceLineNo">3167</span><a name="line.3167"></a>
+<span class="sourceLineNo">3168</span> if (cpHost != null) {<a name="line.3168"></a>
+<span class="sourceLineNo">3169</span> cpHost.postGetLocks(lockedResources);<a name="line.3169"></a>
+<span class="sourceLineNo">3170</span> }<a name="line.3170"></a>
<span class="sourceLineNo">3171</span><a name="line.3171"></a>
-<span class="sourceLineNo">3172</span> /**<a name="line.3172"></a>
-<span class="sourceLineNo">3173</span> * Returns the list of table descriptors that match the specified request<a name="line.3173"></a>
-<span class="sourceLineNo">3174</span> * @param namespace the namespace to query, or null if querying for all<a name="line.3174"></a>
-<span class="sourceLineNo">3175</span> * @param regex The regular expression to match against, or null if querying for all<a name="line.3175"></a>
-<span class="sourceLineNo">3176</span> * @param tableNameList the list of table names, or null if querying for all<a name="line.3176"></a>
-<span class="sourceLineNo">3177</span> * @param includeSysTables False to match only against userspace tables<a name="line.3177"></a>
-<span class="sourceLineNo">3178</span> * @return the list of table descriptors<a name="line.3178"></a>
-<span class="sourceLineNo">3179</span> */<a name="line.3179"></a>
-<span class="sourceLineNo">3180</span> public List<TableDescriptor> listTableDescriptors(final String namespace, final String regex,<a name="line.3180"></a>
-<span class="sourceLineNo">3181</span> final List<TableName> tableNameList, final boolean includeSysTables)<a name="line.3181"></a>
-<span class="sourceLineNo">3182</span> throws IOException {<a name="line.3182"></a>
-<span class="sourceLineNo">3183</span> List<TableDescriptor> htds = new ArrayList<>();<a name="line.3183"></a>
-<span class="sourceLineNo">3184</span> if (cpHost != null) {<a name="line.3184"></a>
-<span class="sourceLineNo">3185</span> cpHost.preGetTableDescriptors(tableNameList, htds, regex);<a name="line.3185"></a>
-<span class="sourceLineNo">3186</span> }<a name="line.3186"></a>
-<span class="sourceLineNo">3187</span> htds = getTableDescriptors(htds, namespace, regex, tableNameList, includeSysTables);<a name="line.3187"></a>
-<span class="sourceLineNo">3188</span> if (cpHost != null) {<a name="line.3188"></a>
-<span class="sourceLineNo">3189</span> cpHost.postGetTableDescriptors(tableNameList, htds, regex);<a name="line.3189"></a>
-<span class="sourceLineNo">3190</span> }<a name="line.3190"></a>
-<span class="sourceLineNo">3191</span> return htds;<a name="line.3191"></a>
-<span class="sourceLineNo">3192</span> }<a name="line.3192"></a>
-<span class="sourceLineNo">3193</span><a name="line.3193"></a>
-<span class="sourceLineNo">3194</span> /**<a name="line.3194"></a>
-<span class="sourceLineNo">3195</span> * Returns the list of table names that match the specified request<a name="line.3195"></a>
-<span class="sourceLineNo">3196</span> * @param regex The regular expression to match against, or null if querying for all<a name="line.3196"></a>
-<span class="sourceLineNo">3197</span> * @param namespace the namespace to query, or null if querying for all<a name="line.3197"></a>
-<span class="sourceLineNo">3198</span> * @param includeSysTables False to match only against userspace tables<a name="line.3198"></a>
-<span class="sourceLineNo">3199</span> * @return the list of table names<a name="line.3199"></a>
-<span class="sourceLineNo">3200</span> */<a name="line.3200"></a>
-<span class="sourceLineNo">3201</span> public List<TableName> listTableNames(final String namespace, final String regex,<a name="line.3201"></a>
-<span class="sourceLineNo">3202</span> final boolean includeSysTables) throws IOException {<a name="line.3202"></a>
-<span class="sourceLineNo">3203</span> List<TableDescriptor> htds = new ArrayList<>();<a name="line.3203"></a>
-<span class="sourceLineNo">3204</span> if (cpHost != null) {<a name="line.3204"></a>
-<span class="sourceLineNo">3205</span> cpHost.preGetTableNames(htds, regex);<a name="line.3205"></a>
-<span class="sourceLineNo">3206</span> }<a name="line.3206"></a>
-<span class="sourceLineNo">3207</span> htds = getTableDescriptors(htds, namespace, regex, null, includeSysTables);<a name="line.3207"></a>
-<span class="sourceLineNo">3208</span> if (cpHost != null) {<a name="line.3208"></a>
-<span class="sourceLineNo">3209</span> cpHost.postGetTableNames(htds, regex);<a name="line.3209"></a>
-<span class="sourceLineNo">3210</span> }<a name="line.3210"></a>
-<span class="sourceLineNo">3211</span> List<TableName> result = new ArrayList<>(htds.size());<a name="line.3211"></a>
-<span class="sourceLineNo">3212</span> for (TableDescriptor htd: htds) result.add(htd.getTableName());<a name="line.3212"></a>
-<span class="sourceLineNo">3213</span> return result;<a name="line.3213"></a>
-<span class="sourceLineNo">3214</span> }<a name="line.3214"></a>
-<span class="sourceLineNo">3215</span><a name="line.3215"></a>
-<span class="sourceLineNo">3216</span> /**<a name="line.3216"></a>
-<span class="sourceLineNo">3217</span> * @return list of table table descriptors after filtering by regex and whether to include system<a name="line.3217"></a>
-<span class="sourceLineNo">3218</span> * tables, etc.<a name="line.3218"></a>
-<span class="sourceLineNo">3219</span> * @throws IOException<a name="line.3219"></a>
-<span class="sourceLineNo">3220</span> */<a name="line.3220"></a>
-<span class="sourceLineNo">3221</span> private List<TableDescriptor> getTableDescriptors(final List<TableDescriptor> htds,<a name="line.3221"></a>
-<span class="sourceLineNo">3222</span> final String namespace, final String regex, final List<TableName> tableNameList,<a name="line.3222"></a>
-<span class="sourceLineNo">3223</span> final boolean includeSysTables)<a name="line.3223"></a>
-<span class="sourceLineNo">3224</span> throws IOException {<a name="line.3224"></a>
-<span class="sourceLineNo">3225</span> if (tableNameList == null || tableNameList.isEmpty()) {<a name="line.3225"></a>
-<span class="sourceLineNo">3226</span> // request for all TableDescriptors<a name="line.3226"></a>
-<span class="sourceLineNo">3227</span> Collection<TableDescriptor> allHtds;<a name="line.3227"></a>
-<span class="sourceLineNo">3228</span> if (namespace != null && namespace.length() > 0) {<a name="line.3228"></a>
-<span class="sourceLineNo">3229</span> // Do a check on the namespace existence. Will fail if does not exist.<a name="line.3229"></a>
-<span class="sourceLineNo">3230</span> this.clusterSchemaService.getNamespace(namespace);<a name="line.3230"></a>
-<span class="sourceLineNo">3231</span> allHtds = tableDescriptors.getByNamespace(namespace).values();<a name="line.3231"></a>
-<span class="sourceLineNo">3232</span> } else {<a name="line.3232"></a>
-<span class="sourceLineNo">3233</span> allHtds = tableDescriptors.getAll().values();<a name="line.3233"></a>
-<span class="sourceLineNo">3234</span> }<a name="line.3234"></a>
-<span class="sourceLineNo">3235</span> for (TableDescriptor desc: allHtds) {<a name="line.3235"></a>
-<span class="sourceLineNo">3236</span> if (tableStateManager.isTablePresent(desc.getTableName())<a name="line.3236"></a>
-<span class="sourceLineNo">3237</span> && (includeSysTables || !desc.getTableName().isSystemTable())) {<a name="line.3237"></a>
-<span class="sourceLineNo">3238</span> htds.add(desc);<a name="line.3238"></a>
-<span class="sourceLineNo">3239</span> }<a name="line.3239"></a>
-<span class="sourceLineNo">3240</span> }<a name="line.3240"></a>
-<span class="sourceLineNo">3241</span> } else {<a name="line.3241"></a>
-<span class="sourceLineNo">3242</span> for (TableName s: tableNameList) {<a name="line.3242"></a>
-<span class="sourceLineNo">3243</span> if (tableStateManager.isTablePresent(s)) {<a name="line.3243"></a>
-<span class="sourceLineNo">3244</span> TableDescriptor desc = tableDescriptors.get(s);<a name="line.3244"></a>
-<span class="sourceLineNo">3245</span> if (desc != null) {<a name="line.3245"></a>
-<span class="sourceLineNo">3246</span> htds.add(desc);<a name="line.3246"></a>
-<span class="sourceLineNo">3247</span> }<a name="line.3247"></a>
-<span class="sourceLineNo">3248</span> }<a name="line.3248"></a>
-<span class="sourceLineNo">3249</span> }<a name="line.3249"></a>
-<span class="sourceLineNo">3250</span> }<a name="line.3250"></a>
-<span class="sourceLineNo">3251</span><a name="line.3251"></a>
-<span class="sourceLineNo">3252</span> // Retains only those matched by regular expression.<a name="line.3252"></a>
-<span class="sourceLineNo">3253</span> if (regex != null) filterTablesByRegex(htds, Pattern.compile(regex));<a name="line.3253"></a>
-<span class="sourceLineNo">3254</span> return htds;<a name="line.3254"></a>
-<span class="sourceLineNo">3255</span> }<a name="line.3255"></a>
-<span class="sourceLineNo">3256</span><a name="line.3256"></a>
-<span class="sourceLineNo">3257</span> /**<a name="line.3257"></a>
-<span class="sourceLineNo">3258</span> * Removes the table descriptors that don't match the pattern.<a name="line.3258"></a>
-<span class="sourceLineNo">3259</span> * @param descriptors list of table descriptors to filter<a name="line.3259"></a>
-<span class="sourceLineNo">3260</span> * @param pattern the regex to use<a name="line.3260"></a>
-<span class="sourceLineNo">3261</span> */<a name="line.3261"></a>
-<span class="sourceLineNo">3262</span> private static void filterTablesByRegex(final Collection<TableDescriptor> descriptors,<a name="line.3262"></a>
-<span class="sourceLineNo">3263</span> final Pattern pattern) {<a name="line.3263"></a>
-<span class="sourceLineNo">3264</span> final String defaultNS = NamespaceDescriptor.DEFAULT_NAMESPACE_NAME_STR;<a name="line.3264"></a>
-<span class="sourceLineNo">3265</span> Iterator<TableDescriptor> itr = descriptors.iterator();<a name="line.3265"></a>
-<span class="sourceLineNo">3266</span> while (itr.hasNext()) {<a name="line.3266"></a>
-<span class="sourceLineNo">3267</span> TableDescriptor htd = itr.next();<a name="line.3267"></a>
-<span class="sourceLineNo">3268</span> String tableName = htd.getTableName().getNameAsString();<a name="line.3268"></a>
-<span class="sourceLineNo">3269</span> boolean matched = pattern.matcher(tableName).matches();<a name="line.3269"></a>
-<span class="sourceLineNo">3270</span> if (!matched && htd.getTableName().getNamespaceAsString().equals(defaultNS)) {<a name="line.3270"></a>
-<span class="sourceLineNo">3271</span> matched = pattern.matcher(defaultNS + TableName.NAMESPACE_DELIM + tableName).matches();<a name="line.3271"></a>
-<span class="sourceLineNo">3272</span> }<a name="line.3272"></a>
-<span class="sourceLineNo">3273</span> if (!matched) {<a name="line.3273"></a>
-<span class="sourceLineNo">3274</span> itr.remove();<a name="line.3274"></a>
+<span class="sourceLineNo">3172</span> return lockedResources;<a name="line.3172"></a>
+<span class="sourceLineNo">3173</span> }<a name="line.3173"></a>
+<span class="sourceLineNo">3174</span><a name="line.3174"></a>
+<span class="sourceLineNo">3175</span> /**<a name="line.3175"></a>
+<span class="sourceLineNo">3176</span> * Returns the list of table descriptors that match the specified request<a name="line.3176"></a>
+<span class="sourceLineNo">3177</span> * @param namespace the namespace to query, or null if querying for all<a name="line.3177"></a>
+<span class="sourceLineNo">3178</span> * @param regex The regular expression to match against, or null if querying for all<a name="line.3178"></a>
+<span class="sourceLineNo">3179</span> * @param tableNameList the list of table names, or null if querying for all<a name="line.3179"></a>
+<span class="sourceLineNo">3180</span> * @param includeSysTables False to match only against userspace tables<a name="line.3180"></a>
+<span class="sourceLineNo">3181</span> * @return the list of table descriptors<a name="line.3181"></a>
+<span class="sourceLineNo">3182</span> */<a name="line.3182"></a>
+<span class="sourceLineNo">3183</span> public List<TableDescriptor> listTableDescriptors(final String namespace, final String regex,<a name="line.3183"></a>
+<span class="sourceLineNo">3184</span> final List<TableName> tableNameList, final boolean includeSysTables)<a name="line.3184"></a>
+<span class="sourceLineNo">3185</span> throws IOException {<a name="line.3185"></a>
+<span class="sourceLineNo">3186</span> List<TableDescriptor> htds = new ArrayList<>();<a name="line.3186"></a>
+<span class="sourceLineNo">3187</span> if (cpHost != null) {<a name="line.3187"></a>
+<span class="sourceLineNo">3188</span> cpHost.preGetTableDescriptors(tableNameList, htds, regex);<a name="line.3188"></a>
+<span class="sourceLineNo">3189</span> }<a name="line.3189"></a>
+<span class="sourceLineNo">3190</span> htds = getTableDescriptors(htds, namespace, regex, tableNameList, includeSysTables);<a name="line.3190"></a>
+<span class="sourceLineNo">3191</span> if (cpHost != null) {<a name="line.3191"></a>
+<span class="sourceLineNo">3192</span> cpHost.postGetTableDescriptors(tableNameList, htds, regex);<a name="line.3192"></a>
+<span class="sourceLineNo">3193</span> }<a name="line.3193"></a>
+<span class="sourceLineNo">3194</span> return htds;<a name="line.3194"></a>
+<span class="sourceLineNo">3195</span> }<a name="line.3195"></a>
+<span class="sourceLineNo">3196</span><a name="line.3196"></a>
+<span class="sourceLineNo">3197</span> /**<a name="line.3197"></a>
+<span class="sourceLineNo">3198</span> * Returns the list of table names that match the specified request<a name="line.3198"></a>
+<span class="sourceLineNo">3199</span> * @param regex The regular expression to match against, or null if querying for all<a name="line.3199"></a>
+<span class="sourceLineNo">3200</span> * @param namespace the namespace to query, or null if querying for all<a name="line.3200"></a>
+<span class="sourceLineNo">3201</span> * @param includeSysTables False to match only against userspace tables<a name="line.3201"></a>
+<span class="sourceLineNo">3202</span> * @return the list of table names<a name="line.3202"></a>
+<span class="sourceLineNo">3203</span> */<a name="line.3203"></a>
+<span class="sourceLineNo">3204</span> public List<TableName> listTableNames(final String namespace, final String regex,<a name="line.3204"></a>
+<span class="sourceLineNo">3205</span> final boolean includeSysTables) throws IOException {<a name="line.3205"></a>
+<span class="sourceLineNo">3206</span> List<TableDescriptor> htds = new ArrayList<>();<a name="line.3206"></a>
+<span class="sourceLineNo">3207</span> if (cpHost != null) {<a name="line.3207"></a>
+<span class="sourceLineNo">3208</span> cpHost.preGetTableNames(htds, regex);<a name="line.3208"></a>
+<span class="sourceLineNo">3209</span> }<a name="line.3209"></a>
+<span class="sourceLineNo">3210</span> htds = getTableDescriptors(htds, namespace, regex, null, includeSysTables);<a name="line.3210"></a>
+<span class="sourceLineNo">3211</span> if (cpHost != null) {<a name="line.3211"></a>
+<span class="sourceLineNo">3212</span> cpHost.postGetTableNames(htds, regex);<a name="line.3212"></a>
+<span class="sourceLineNo">3213</span> }<a name="line.3213"></a>
+<span class="sourceLineNo">3214</span> List<TableName> result = new ArrayList<>(htds.size());<a name="line.3214"></a>
+<span class="sourceLineNo">3215</span> for (TableDescriptor htd: htds) result.add(htd.getTableName());<a name="line.3215"></a>
+<span class="sourceLineNo">3216</span> return result;<a name="line.3216"></a>
+<span class="sourceLineNo">3217</span> }<a name="line.3217"></a>
+<span class="sourceLineNo">3218</span><a name="line.3218"></a>
+<span class="sourceLineNo">3219</span> /**<a name="line.3219"></a>
+<span class="sourceLineNo">3220</span> * @return list of table table descriptors after filtering by regex and whether to include system<a name="line.3220"></a>
+<span class="sourceLineNo">3221</span> * tables, etc.<a name="line.3221"></a>
+<span class="sourceLineNo">3222</span> * @throws IOException<a name="line.3222"></a>
+<span class="sourceLineNo">3223</span> */<a name="line.3223"></a>
+<span class="sourceLineNo">3224</span> private List<TableDescriptor> getTableDescriptors(final List<TableDescriptor> htds,<a name="line.3224"></a>
+<span class="sourceLineNo">3225</span> final String namespace, final String regex, final List<TableName> tableNameList,<a name="line.3225"></a>
+<span class="sourceLineNo">3226</span> final boolean includeSysTables)<a name="line.3226"></a>
+<span class="sourceLineNo">3227</span> throws IOException {<a name="line.3227"></a>
+<span class="sourceLineNo">3228</span> if (tableNameList == null || tableNameList.isEmpty()) {<a name="line.3228"></a>
+<span class="sourceLineNo">3229</span> // request for all TableDescriptors<a name="line.3229"></a>
+<span class="sourceLineNo">3230</span> Collection<TableDescriptor> allHtds;<a name="line.3230"></a>
+<span class="sourceLineNo">3231</span> if (namespace != null && namespace.length() > 0) {<a name="line.3231"></a>
+<span class="sourceLineNo">3232</span> // Do a check on the namespace existence. Will fail if does not exist.<a name="line.3232"></a>
+<span class="sourceLineNo">3233</span> this.clusterSchemaService.getNamespace(namespace);<a name="line.3233"></a>
+<span class="sourceLineNo">3234</span> allHtds = tableDescriptors.getByNamespace(namespace).values();<a name="line.3234"></a>
+<span class="sourceLineNo">3235</span> } else {<a name="line.3235"></a>
+<span class="sourceLineNo">3236</span> allHtds = tableDescriptors.getAll().values();<a name="line.3236"></a>
+<span class="sourceLineNo">3237</span> }<a name="line.3237"></a>
+<span class="sourceLineNo">3238</span> for (TableDescriptor desc: allHtds) {<a name="line.3238"></a>
+<span class="sourceLineNo">3239</span> if (tableStateManager.isTablePresent(desc.getTableName())<a name="line.3239"></a>
+<span class="sourceLineNo">3240</span> && (includeSysTables || !desc.getTableName().isSystemTable())) {<a name="line.3240"></a>
+<span class="sourceLineNo">3241</span> htds.add(desc);<a name="line.3241"></a>
+<span class="sourceLineNo">3242</span> }<a name="line.3242"></a>
+<span class="sourceLineNo">3243</span> }<a name="line.3243"></a>
+<span class="sourceLineNo">3244</span> } else {<a name="line.3244"></a>
+<span class="sourceLineNo">3245</span> for (TableName s: tableNameList) {<a name="line.3245"></a>
+<span class="sourceLineNo">3246</span> if (tableStateManager.isTablePresent(s)) {<a name="line.3246"></a>
+<span class="sourceLineNo">3247</span> TableDescriptor desc = tableDescriptors.get(s);<a name="line.3247"></a>
+<span class="sourceLineNo">3248</span> if (desc != null) {<a name="line.3248"></a>
+<span class="sourceLineNo">3249</span> htds.add(desc);<a name="line.3249"></a>
+<span class="sourceLineNo">3250</span> }<a name="line.3250"></a>
+<span class="sourceLineNo">3251</span> }<a name="line.3251"></a>
+<span class="sourceLineNo">3252</span> }<a name="line.3252"></a>
+<span class="sourceLineNo">3253</span> }<a name="line.3253"></a>
+<span class="sourceLineNo">3254</span><a name="line.3254"></a>
+<span class="sourceLineNo">3255</span> // Retains only those matched by regular expression.<a name="line.3255"></a>
+<span class="sourceLineNo">3256</span> if (regex != null) filterTablesByRegex(htds, Pattern.compile(regex));<a name="line.3256"></a>
+<span class="sourceLineNo">3257</span> return htds;<a name="line.3257"></a>
+<span class="sourceLineNo">3258</span> }<a name="line.3258"></a>
+<span class="sourceLineNo">3259</span><a name="line.3259"></a>
+<span class="sourceLineNo">3260</span> /**<a name="line.3260"></a>
+<span class="sourceLineNo">3261</span> * Removes the table descriptors that don't match the pattern.<a name="line.3261"></a>
+<span class="sourceLineNo">3262</span> * @param descriptors list of table descriptors to filter<a name="line.3262"></a>
+<span class="sourceLineNo">3263</span> * @param pattern the regex to use<a name="line.3263"></a>
+<span class="sourceLineNo">3264</span> */<a name="line.3264"></a>
+<span class="sourceLineNo">3265</span> private static void filterTablesByRegex(final Collection<TableDescriptor> descriptors,<a name="line.3265"></a>
+<span class="sourceLineNo">3266</span> final Pattern pattern) {<a name="line.3266"></a>
+<span class="sourceLineNo">3267</span> final String defaultNS = NamespaceDescriptor.DEFAULT_NAMESPACE_NAME_STR;<a name="line.3267"></a>
+<span class="sourceLineNo">3268</span> Iterator<TableDescriptor> itr = descriptors.iterator();<a name="line.3268"></a>
+<span class="sourceLineNo">3269</span> while (itr.hasNext()) {<a name="line.3269"></a>
+<span class="sourceLineNo">3270</span> TableDescriptor htd = itr.next();<a name="line.3270"></a>
+<span class="sourceLineNo">3271</span>
<TRUNCATED>
[03/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.TimeoutExecutorThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.TimeoutExecutorThread.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.TimeoutExecutorThread.html
index 594ef24..17d5c40 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.TimeoutExecutorThread.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.TimeoutExecutorThread.html
@@ -170,241 +170,242 @@
<span class="sourceLineNo">162</span> }<a name="line.162"></a>
<span class="sourceLineNo">163</span><a name="line.163"></a>
<span class="sourceLineNo">164</span> /**<a name="line.164"></a>
-<span class="sourceLineNo">165</span> * Add a remote rpc. Be sure to check result for successful add.<a name="line.165"></a>
+<span class="sourceLineNo">165</span> * Add a remote rpc.<a name="line.165"></a>
<span class="sourceLineNo">166</span> * @param key the node identifier<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * @return True if we successfully added the operation.<a name="line.167"></a>
-<span class="sourceLineNo">168</span> */<a name="line.168"></a>
-<span class="sourceLineNo">169</span> public boolean addOperationToNode(final TRemote key, RemoteProcedure rp) {<a name="line.169"></a>
+<span class="sourceLineNo">167</span> */<a name="line.167"></a>
+<span class="sourceLineNo">168</span> public void addOperationToNode(final TRemote key, RemoteProcedure rp)<a name="line.168"></a>
+<span class="sourceLineNo">169</span> throws NullTargetServerDispatchException, NoServerDispatchException, NoNodeDispatchException {<a name="line.169"></a>
<span class="sourceLineNo">170</span> if (key == null) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span> // Key is remote server name. Be careful. It could have been nulled by a concurrent<a name="line.171"></a>
-<span class="sourceLineNo">172</span> // ServerCrashProcedure shutting down outstanding RPC requests. See remoteCallFailed.<a name="line.172"></a>
-<span class="sourceLineNo">173</span> return false;<a name="line.173"></a>
-<span class="sourceLineNo">174</span> }<a name="line.174"></a>
-<span class="sourceLineNo">175</span> assert key != null : "found null key for node";<a name="line.175"></a>
-<span class="sourceLineNo">176</span> BufferNode node = nodeMap.get(key);<a name="line.176"></a>
-<span class="sourceLineNo">177</span> if (node == null) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span> return false;<a name="line.178"></a>
-<span class="sourceLineNo">179</span> }<a name="line.179"></a>
-<span class="sourceLineNo">180</span> node.add(rp);<a name="line.180"></a>
-<span class="sourceLineNo">181</span> // Check our node still in the map; could have been removed by #removeNode.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> return nodeMap.containsValue(node);<a name="line.182"></a>
-<span class="sourceLineNo">183</span> }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span> /**<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * Remove a remote node<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * @param key the node identifier<a name="line.187"></a>
-<span class="sourceLineNo">188</span> */<a name="line.188"></a>
-<span class="sourceLineNo">189</span> public boolean removeNode(final TRemote key) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span> final BufferNode node = nodeMap.remove(key);<a name="line.190"></a>
-<span class="sourceLineNo">191</span> if (node == null) return false;<a name="line.191"></a>
-<span class="sourceLineNo">192</span> node.abortOperationsInQueue();<a name="line.192"></a>
-<span class="sourceLineNo">193</span> return true;<a name="line.193"></a>
-<span class="sourceLineNo">194</span> }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span> // ============================================================================================<a name="line.196"></a>
-<span class="sourceLineNo">197</span> // Task Helpers<a name="line.197"></a>
-<span class="sourceLineNo">198</span> // ============================================================================================<a name="line.198"></a>
-<span class="sourceLineNo">199</span> protected Future<Void> submitTask(Callable<Void> task) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span> return threadPool.submit(task);<a name="line.200"></a>
-<span class="sourceLineNo">201</span> }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span> protected Future<Void> submitTask(Callable<Void> task, long delay, TimeUnit unit) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span> final FutureTask<Void> futureTask = new FutureTask(task);<a name="line.204"></a>
-<span class="sourceLineNo">205</span> timeoutExecutor.add(new DelayedTask(futureTask, delay, unit));<a name="line.205"></a>
-<span class="sourceLineNo">206</span> return futureTask;<a name="line.206"></a>
-<span class="sourceLineNo">207</span> }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span> protected abstract void remoteDispatch(TRemote key, Set<RemoteProcedure> operations);<a name="line.209"></a>
-<span class="sourceLineNo">210</span> protected abstract void abortPendingOperations(TRemote key, Set<RemoteProcedure> operations);<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span> /**<a name="line.212"></a>
-<span class="sourceLineNo">213</span> * Data structure with reference to remote operation.<a name="line.213"></a>
-<span class="sourceLineNo">214</span> */<a name="line.214"></a>
-<span class="sourceLineNo">215</span> public static abstract class RemoteOperation {<a name="line.215"></a>
-<span class="sourceLineNo">216</span> private final RemoteProcedure remoteProcedure;<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span> protected RemoteOperation(final RemoteProcedure remoteProcedure) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span> this.remoteProcedure = remoteProcedure;<a name="line.219"></a>
-<span class="sourceLineNo">220</span> }<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span> public RemoteProcedure getRemoteProcedure() {<a name="line.222"></a>
-<span class="sourceLineNo">223</span> return remoteProcedure;<a name="line.223"></a>
-<span class="sourceLineNo">224</span> }<a name="line.224"></a>
-<span class="sourceLineNo">225</span> }<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span> /**<a name="line.227"></a>
-<span class="sourceLineNo">228</span> * Remote procedure reference.<a name="line.228"></a>
-<span class="sourceLineNo">229</span> */<a name="line.229"></a>
-<span class="sourceLineNo">230</span> public interface RemoteProcedure<TEnv, TRemote> {<a name="line.230"></a>
-<span class="sourceLineNo">231</span> /**<a name="line.231"></a>
-<span class="sourceLineNo">232</span> * For building the remote operation.<a name="line.232"></a>
-<span class="sourceLineNo">233</span> */<a name="line.233"></a>
-<span class="sourceLineNo">234</span> RemoteOperation remoteCallBuild(TEnv env, TRemote remote);<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span> /**<a name="line.236"></a>
-<span class="sourceLineNo">237</span> * Called when the executeProcedure call is failed.<a name="line.237"></a>
-<span class="sourceLineNo">238</span> */<a name="line.238"></a>
-<span class="sourceLineNo">239</span> void remoteCallFailed(TEnv env, TRemote remote, IOException exception);<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span> /**<a name="line.241"></a>
-<span class="sourceLineNo">242</span> * Called when RS tells the remote procedure is succeeded through the<a name="line.242"></a>
-<span class="sourceLineNo">243</span> * {@code reportProcedureDone} method.<a name="line.243"></a>
-<span class="sourceLineNo">244</span> */<a name="line.244"></a>
-<span class="sourceLineNo">245</span> void remoteOperationCompleted(TEnv env);<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span> /**<a name="line.247"></a>
-<span class="sourceLineNo">248</span> * Called when RS tells the remote procedure is failed through the {@code reportProcedureDone}<a name="line.248"></a>
-<span class="sourceLineNo">249</span> * method.<a name="line.249"></a>
-<span class="sourceLineNo">250</span> */<a name="line.250"></a>
-<span class="sourceLineNo">251</span> void remoteOperationFailed(TEnv env, RemoteProcedureException error);<a name="line.251"></a>
-<span class="sourceLineNo">252</span> }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span> /**<a name="line.254"></a>
-<span class="sourceLineNo">255</span> * Account of what procedures are running on remote node.<a name="line.255"></a>
-<span class="sourceLineNo">256</span> * @param <TEnv><a name="line.256"></a>
-<span class="sourceLineNo">257</span> * @param <TRemote><a name="line.257"></a>
-<span class="sourceLineNo">258</span> */<a name="line.258"></a>
-<span class="sourceLineNo">259</span> public interface RemoteNode<TEnv, TRemote> {<a name="line.259"></a>
-<span class="sourceLineNo">260</span> TRemote getKey();<a name="line.260"></a>
-<span class="sourceLineNo">261</span> void add(RemoteProcedure<TEnv, TRemote> operation);<a name="line.261"></a>
-<span class="sourceLineNo">262</span> void dispatch();<a name="line.262"></a>
-<span class="sourceLineNo">263</span> }<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span> protected ArrayListMultimap<Class<?>, RemoteOperation> buildAndGroupRequestByType(final TEnv env,<a name="line.265"></a>
-<span class="sourceLineNo">266</span> final TRemote remote, final Set<RemoteProcedure> remoteProcedures) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span> final ArrayListMultimap<Class<?>, RemoteOperation> requestByType = ArrayListMultimap.create();<a name="line.267"></a>
-<span class="sourceLineNo">268</span> for (RemoteProcedure proc: remoteProcedures) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span> RemoteOperation operation = proc.remoteCallBuild(env, remote);<a name="line.269"></a>
-<span class="sourceLineNo">270</span> requestByType.put(operation.getClass(), operation);<a name="line.270"></a>
-<span class="sourceLineNo">271</span> }<a name="line.271"></a>
-<span class="sourceLineNo">272</span> return requestByType;<a name="line.272"></a>
-<span class="sourceLineNo">273</span> }<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span> protected <T extends RemoteOperation> List<T> fetchType(<a name="line.275"></a>
-<span class="sourceLineNo">276</span> final ArrayListMultimap<Class<?>, RemoteOperation> requestByType, final Class<T> type) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span> return (List<T>)requestByType.removeAll(type);<a name="line.277"></a>
-<span class="sourceLineNo">278</span> }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span> // ============================================================================================<a name="line.280"></a>
-<span class="sourceLineNo">281</span> // Timeout Helpers<a name="line.281"></a>
-<span class="sourceLineNo">282</span> // ============================================================================================<a name="line.282"></a>
-<span class="sourceLineNo">283</span> private final class TimeoutExecutorThread extends Thread {<a name="line.283"></a>
-<span class="sourceLineNo">284</span> private final DelayQueue<DelayedWithTimeout> queue = new DelayQueue<DelayedWithTimeout>();<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span> public TimeoutExecutorThread() {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> super("ProcedureDispatcherTimeoutThread");<a name="line.287"></a>
-<span class="sourceLineNo">288</span> }<a name="line.288"></a>
-<span class="sourceLineNo">289</span><a name="line.289"></a>
-<span class="sourceLineNo">290</span> @Override<a name="line.290"></a>
-<span class="sourceLineNo">291</span> public void run() {<a name="line.291"></a>
-<span class="sourceLineNo">292</span> while (running.get()) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span> final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.293"></a>
-<span class="sourceLineNo">294</span> if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span> // the executor may be shutting down, and the task is just the shutdown request<a name="line.295"></a>
-<span class="sourceLineNo">296</span> continue;<a name="line.296"></a>
-<span class="sourceLineNo">297</span> }<a name="line.297"></a>
-<span class="sourceLineNo">298</span> if (task instanceof DelayedTask) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span> threadPool.execute(((DelayedTask)task).getObject());<a name="line.299"></a>
-<span class="sourceLineNo">300</span> } else {<a name="line.300"></a>
-<span class="sourceLineNo">301</span> ((BufferNode)task).dispatch();<a name="line.301"></a>
-<span class="sourceLineNo">302</span> }<a name="line.302"></a>
-<span class="sourceLineNo">303</span> }<a name="line.303"></a>
-<span class="sourceLineNo">304</span> }<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span> public void add(final DelayedWithTimeout delayed) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span> queue.add(delayed);<a name="line.307"></a>
-<span class="sourceLineNo">308</span> }<a name="line.308"></a>
-<span class="sourceLineNo">309</span><a name="line.309"></a>
-<span class="sourceLineNo">310</span> public void remove(final DelayedWithTimeout delayed) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span> queue.remove(delayed);<a name="line.311"></a>
-<span class="sourceLineNo">312</span> }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span> public void sendStopSignal() {<a name="line.314"></a>
-<span class="sourceLineNo">315</span> queue.add(DelayedUtil.DELAYED_POISON);<a name="line.315"></a>
-<span class="sourceLineNo">316</span> }<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span> public void awaitTermination() {<a name="line.318"></a>
-<span class="sourceLineNo">319</span> try {<a name="line.319"></a>
-<span class="sourceLineNo">320</span> final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.320"></a>
-<span class="sourceLineNo">321</span> for (int i = 0; isAlive(); ++i) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span> sendStopSignal();<a name="line.322"></a>
-<span class="sourceLineNo">323</span> join(250);<a name="line.323"></a>
-<span class="sourceLineNo">324</span> if (i > 0 && (i % 8) == 0) {<a name="line.324"></a>
-<span class="sourceLineNo">325</span> LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.325"></a>
-<span class="sourceLineNo">326</span> StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.326"></a>
-<span class="sourceLineNo">327</span> }<a name="line.327"></a>
-<span class="sourceLineNo">328</span> }<a name="line.328"></a>
-<span class="sourceLineNo">329</span> } catch (InterruptedException e) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span> LOG.warn(getName() + " join wait got interrupted", e);<a name="line.330"></a>
-<span class="sourceLineNo">331</span> }<a name="line.331"></a>
-<span class="sourceLineNo">332</span> }<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> // ============================================================================================<a name="line.335"></a>
-<span class="sourceLineNo">336</span> // Internals Helpers<a name="line.336"></a>
-<span class="sourceLineNo">337</span> // ============================================================================================<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span> /**<a name="line.339"></a>
-<span class="sourceLineNo">340</span> * Node that contains a set of RemoteProcedures<a name="line.340"></a>
-<span class="sourceLineNo">341</span> */<a name="line.341"></a>
-<span class="sourceLineNo">342</span> protected final class BufferNode extends DelayedContainerWithTimestamp<TRemote><a name="line.342"></a>
-<span class="sourceLineNo">343</span> implements RemoteNode<TEnv, TRemote> {<a name="line.343"></a>
-<span class="sourceLineNo">344</span> private Set<RemoteProcedure> operations;<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span> protected BufferNode(final TRemote key) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> super(key, 0);<a name="line.347"></a>
-<span class="sourceLineNo">348</span> }<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span> @Override<a name="line.350"></a>
-<span class="sourceLineNo">351</span> public TRemote getKey() {<a name="line.351"></a>
-<span class="sourceLineNo">352</span> return getObject();<a name="line.352"></a>
-<span class="sourceLineNo">353</span> }<a name="line.353"></a>
-<span class="sourceLineNo">354</span><a name="line.354"></a>
-<span class="sourceLineNo">355</span> @Override<a name="line.355"></a>
-<span class="sourceLineNo">356</span> public synchronized void add(final RemoteProcedure operation) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span> if (this.operations == null) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> this.operations = new HashSet<>();<a name="line.358"></a>
-<span class="sourceLineNo">359</span> setTimeout(EnvironmentEdgeManager.currentTime() + operationDelay);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> timeoutExecutor.add(this);<a name="line.360"></a>
-<span class="sourceLineNo">361</span> }<a name="line.361"></a>
-<span class="sourceLineNo">362</span> this.operations.add(operation);<a name="line.362"></a>
-<span class="sourceLineNo">363</span> if (this.operations.size() > queueMaxSize) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span> timeoutExecutor.remove(this);<a name="line.364"></a>
-<span class="sourceLineNo">365</span> dispatch();<a name="line.365"></a>
-<span class="sourceLineNo">366</span> }<a name="line.366"></a>
-<span class="sourceLineNo">367</span> }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span> @Override<a name="line.369"></a>
-<span class="sourceLineNo">370</span> public synchronized void dispatch() {<a name="line.370"></a>
-<span class="sourceLineNo">371</span> if (operations != null) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span> remoteDispatch(getKey(), operations);<a name="line.372"></a>
-<span class="sourceLineNo">373</span> this.operations = null;<a name="line.373"></a>
-<span class="sourceLineNo">374</span> }<a name="line.374"></a>
-<span class="sourceLineNo">375</span> }<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span> public synchronized void abortOperationsInQueue() {<a name="line.377"></a>
-<span class="sourceLineNo">378</span> if (operations != null) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span> abortPendingOperations(getKey(), operations);<a name="line.379"></a>
-<span class="sourceLineNo">380</span> this.operations = null;<a name="line.380"></a>
-<span class="sourceLineNo">381</span> }<a name="line.381"></a>
-<span class="sourceLineNo">382</span> }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span> @Override<a name="line.384"></a>
-<span class="sourceLineNo">385</span> public String toString() {<a name="line.385"></a>
-<span class="sourceLineNo">386</span> return super.toString() + ", operations=" + this.operations;<a name="line.386"></a>
-<span class="sourceLineNo">387</span> }<a name="line.387"></a>
-<span class="sourceLineNo">388</span> }<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span> /**<a name="line.390"></a>
-<span class="sourceLineNo">391</span> * Delayed object that holds a FutureTask.<a name="line.391"></a>
-<span class="sourceLineNo">392</span> * used to submit something later to the thread-pool.<a name="line.392"></a>
-<span class="sourceLineNo">393</span> */<a name="line.393"></a>
-<span class="sourceLineNo">394</span> private static final class DelayedTask extends DelayedContainerWithTimestamp<FutureTask<Void>> {<a name="line.394"></a>
-<span class="sourceLineNo">395</span> public DelayedTask(final FutureTask<Void> task, final long delay, final TimeUnit unit) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span> super(task, EnvironmentEdgeManager.currentTime() + unit.toMillis(delay));<a name="line.396"></a>
-<span class="sourceLineNo">397</span> }<a name="line.397"></a>
-<span class="sourceLineNo">398</span> }<a name="line.398"></a>
-<span class="sourceLineNo">399</span>}<a name="line.399"></a>
+<span class="sourceLineNo">171</span> throw new NullTargetServerDispatchException(rp.toString());<a name="line.171"></a>
+<span class="sourceLineNo">172</span> }<a name="line.172"></a>
+<span class="sourceLineNo">173</span> BufferNode node = nodeMap.get(key);<a name="line.173"></a>
+<span class="sourceLineNo">174</span> if (node == null) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span> // If null here, it means node has been removed because it crashed. This happens when server<a name="line.175"></a>
+<span class="sourceLineNo">176</span> // is expired in ServerManager. ServerCrashProcedure may or may not have run.<a name="line.176"></a>
+<span class="sourceLineNo">177</span> throw new NoServerDispatchException(key.toString() + "; " + rp.toString());<a name="line.177"></a>
+<span class="sourceLineNo">178</span> }<a name="line.178"></a>
+<span class="sourceLineNo">179</span> node.add(rp);<a name="line.179"></a>
+<span class="sourceLineNo">180</span> // Check our node still in the map; could have been removed by #removeNode.<a name="line.180"></a>
+<span class="sourceLineNo">181</span> if (!nodeMap.containsValue(node)) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span> throw new NoNodeDispatchException(key.toString() + "; " + rp.toString());<a name="line.182"></a>
+<span class="sourceLineNo">183</span> }<a name="line.183"></a>
+<span class="sourceLineNo">184</span> }<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span> /**<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * Remove a remote node<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * @param key the node identifier<a name="line.188"></a>
+<span class="sourceLineNo">189</span> */<a name="line.189"></a>
+<span class="sourceLineNo">190</span> public boolean removeNode(final TRemote key) {<a name="line.190"></a>
+<span class="sourceLineNo">191</span> final BufferNode node = nodeMap.remove(key);<a name="line.191"></a>
+<span class="sourceLineNo">192</span> if (node == null) return false;<a name="line.192"></a>
+<span class="sourceLineNo">193</span> node.abortOperationsInQueue();<a name="line.193"></a>
+<span class="sourceLineNo">194</span> return true;<a name="line.194"></a>
+<span class="sourceLineNo">195</span> }<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span> // ============================================================================================<a name="line.197"></a>
+<span class="sourceLineNo">198</span> // Task Helpers<a name="line.198"></a>
+<span class="sourceLineNo">199</span> // ============================================================================================<a name="line.199"></a>
+<span class="sourceLineNo">200</span> protected Future<Void> submitTask(Callable<Void> task) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span> return threadPool.submit(task);<a name="line.201"></a>
+<span class="sourceLineNo">202</span> }<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span> protected Future<Void> submitTask(Callable<Void> task, long delay, TimeUnit unit) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span> final FutureTask<Void> futureTask = new FutureTask(task);<a name="line.205"></a>
+<span class="sourceLineNo">206</span> timeoutExecutor.add(new DelayedTask(futureTask, delay, unit));<a name="line.206"></a>
+<span class="sourceLineNo">207</span> return futureTask;<a name="line.207"></a>
+<span class="sourceLineNo">208</span> }<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span> protected abstract void remoteDispatch(TRemote key, Set<RemoteProcedure> operations);<a name="line.210"></a>
+<span class="sourceLineNo">211</span> protected abstract void abortPendingOperations(TRemote key, Set<RemoteProcedure> operations);<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span> /**<a name="line.213"></a>
+<span class="sourceLineNo">214</span> * Data structure with reference to remote operation.<a name="line.214"></a>
+<span class="sourceLineNo">215</span> */<a name="line.215"></a>
+<span class="sourceLineNo">216</span> public static abstract class RemoteOperation {<a name="line.216"></a>
+<span class="sourceLineNo">217</span> private final RemoteProcedure remoteProcedure;<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span> protected RemoteOperation(final RemoteProcedure remoteProcedure) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span> this.remoteProcedure = remoteProcedure;<a name="line.220"></a>
+<span class="sourceLineNo">221</span> }<a name="line.221"></a>
+<span class="sourceLineNo">222</span><a name="line.222"></a>
+<span class="sourceLineNo">223</span> public RemoteProcedure getRemoteProcedure() {<a name="line.223"></a>
+<span class="sourceLineNo">224</span> return remoteProcedure;<a name="line.224"></a>
+<span class="sourceLineNo">225</span> }<a name="line.225"></a>
+<span class="sourceLineNo">226</span> }<a name="line.226"></a>
+<span class="sourceLineNo">227</span><a name="line.227"></a>
+<span class="sourceLineNo">228</span> /**<a name="line.228"></a>
+<span class="sourceLineNo">229</span> * Remote procedure reference.<a name="line.229"></a>
+<span class="sourceLineNo">230</span> */<a name="line.230"></a>
+<span class="sourceLineNo">231</span> public interface RemoteProcedure<TEnv, TRemote> {<a name="line.231"></a>
+<span class="sourceLineNo">232</span> /**<a name="line.232"></a>
+<span class="sourceLineNo">233</span> * For building the remote operation.<a name="line.233"></a>
+<span class="sourceLineNo">234</span> */<a name="line.234"></a>
+<span class="sourceLineNo">235</span> RemoteOperation remoteCallBuild(TEnv env, TRemote remote);<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span> /**<a name="line.237"></a>
+<span class="sourceLineNo">238</span> * Called when the executeProcedure call is failed.<a name="line.238"></a>
+<span class="sourceLineNo">239</span> */<a name="line.239"></a>
+<span class="sourceLineNo">240</span> void remoteCallFailed(TEnv env, TRemote remote, IOException exception);<a name="line.240"></a>
+<span class="sourceLineNo">241</span><a name="line.241"></a>
+<span class="sourceLineNo">242</span> /**<a name="line.242"></a>
+<span class="sourceLineNo">243</span> * Called when RS tells the remote procedure is succeeded through the<a name="line.243"></a>
+<span class="sourceLineNo">244</span> * {@code reportProcedureDone} method.<a name="line.244"></a>
+<span class="sourceLineNo">245</span> */<a name="line.245"></a>
+<span class="sourceLineNo">246</span> void remoteOperationCompleted(TEnv env);<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span> /**<a name="line.248"></a>
+<span class="sourceLineNo">249</span> * Called when RS tells the remote procedure is failed through the {@code reportProcedureDone}<a name="line.249"></a>
+<span class="sourceLineNo">250</span> * method.<a name="line.250"></a>
+<span class="sourceLineNo">251</span> */<a name="line.251"></a>
+<span class="sourceLineNo">252</span> void remoteOperationFailed(TEnv env, RemoteProcedureException error);<a name="line.252"></a>
+<span class="sourceLineNo">253</span> }<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span> /**<a name="line.255"></a>
+<span class="sourceLineNo">256</span> * Account of what procedures are running on remote node.<a name="line.256"></a>
+<span class="sourceLineNo">257</span> * @param <TEnv><a name="line.257"></a>
+<span class="sourceLineNo">258</span> * @param <TRemote><a name="line.258"></a>
+<span class="sourceLineNo">259</span> */<a name="line.259"></a>
+<span class="sourceLineNo">260</span> public interface RemoteNode<TEnv, TRemote> {<a name="line.260"></a>
+<span class="sourceLineNo">261</span> TRemote getKey();<a name="line.261"></a>
+<span class="sourceLineNo">262</span> void add(RemoteProcedure<TEnv, TRemote> operation);<a name="line.262"></a>
+<span class="sourceLineNo">263</span> void dispatch();<a name="line.263"></a>
+<span class="sourceLineNo">264</span> }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span> protected ArrayListMultimap<Class<?>, RemoteOperation> buildAndGroupRequestByType(final TEnv env,<a name="line.266"></a>
+<span class="sourceLineNo">267</span> final TRemote remote, final Set<RemoteProcedure> remoteProcedures) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span> final ArrayListMultimap<Class<?>, RemoteOperation> requestByType = ArrayListMultimap.create();<a name="line.268"></a>
+<span class="sourceLineNo">269</span> for (RemoteProcedure proc: remoteProcedures) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span> RemoteOperation operation = proc.remoteCallBuild(env, remote);<a name="line.270"></a>
+<span class="sourceLineNo">271</span> requestByType.put(operation.getClass(), operation);<a name="line.271"></a>
+<span class="sourceLineNo">272</span> }<a name="line.272"></a>
+<span class="sourceLineNo">273</span> return requestByType;<a name="line.273"></a>
+<span class="sourceLineNo">274</span> }<a name="line.274"></a>
+<span class="sourceLineNo">275</span><a name="line.275"></a>
+<span class="sourceLineNo">276</span> protected <T extends RemoteOperation> List<T> fetchType(<a name="line.276"></a>
+<span class="sourceLineNo">277</span> final ArrayListMultimap<Class<?>, RemoteOperation> requestByType, final Class<T> type) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span> return (List<T>)requestByType.removeAll(type);<a name="line.278"></a>
+<span class="sourceLineNo">279</span> }<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span> // ============================================================================================<a name="line.281"></a>
+<span class="sourceLineNo">282</span> // Timeout Helpers<a name="line.282"></a>
+<span class="sourceLineNo">283</span> // ============================================================================================<a name="line.283"></a>
+<span class="sourceLineNo">284</span> private final class TimeoutExecutorThread extends Thread {<a name="line.284"></a>
+<span class="sourceLineNo">285</span> private final DelayQueue<DelayedWithTimeout> queue = new DelayQueue<DelayedWithTimeout>();<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span> public TimeoutExecutorThread() {<a name="line.287"></a>
+<span class="sourceLineNo">288</span> super("ProcedureDispatcherTimeoutThread");<a name="line.288"></a>
+<span class="sourceLineNo">289</span> }<a name="line.289"></a>
+<span class="sourceLineNo">290</span><a name="line.290"></a>
+<span class="sourceLineNo">291</span> @Override<a name="line.291"></a>
+<span class="sourceLineNo">292</span> public void run() {<a name="line.292"></a>
+<span class="sourceLineNo">293</span> while (running.get()) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span> final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.294"></a>
+<span class="sourceLineNo">295</span> if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.295"></a>
+<span class="sourceLineNo">296</span> // the executor may be shutting down, and the task is just the shutdown request<a name="line.296"></a>
+<span class="sourceLineNo">297</span> continue;<a name="line.297"></a>
+<span class="sourceLineNo">298</span> }<a name="line.298"></a>
+<span class="sourceLineNo">299</span> if (task instanceof DelayedTask) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span> threadPool.execute(((DelayedTask)task).getObject());<a name="line.300"></a>
+<span class="sourceLineNo">301</span> } else {<a name="line.301"></a>
+<span class="sourceLineNo">302</span> ((BufferNode)task).dispatch();<a name="line.302"></a>
+<span class="sourceLineNo">303</span> }<a name="line.303"></a>
+<span class="sourceLineNo">304</span> }<a name="line.304"></a>
+<span class="sourceLineNo">305</span> }<a name="line.305"></a>
+<span class="sourceLineNo">306</span><a name="line.306"></a>
+<span class="sourceLineNo">307</span> public void add(final DelayedWithTimeout delayed) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span> queue.add(delayed);<a name="line.308"></a>
+<span class="sourceLineNo">309</span> }<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span> public void remove(final DelayedWithTimeout delayed) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span> queue.remove(delayed);<a name="line.312"></a>
+<span class="sourceLineNo">313</span> }<a name="line.313"></a>
+<span class="sourceLineNo">314</span><a name="line.314"></a>
+<span class="sourceLineNo">315</span> public void sendStopSignal() {<a name="line.315"></a>
+<span class="sourceLineNo">316</span> queue.add(DelayedUtil.DELAYED_POISON);<a name="line.316"></a>
+<span class="sourceLineNo">317</span> }<a name="line.317"></a>
+<span class="sourceLineNo">318</span><a name="line.318"></a>
+<span class="sourceLineNo">319</span> public void awaitTermination() {<a name="line.319"></a>
+<span class="sourceLineNo">320</span> try {<a name="line.320"></a>
+<span class="sourceLineNo">321</span> final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.321"></a>
+<span class="sourceLineNo">322</span> for (int i = 0; isAlive(); ++i) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span> sendStopSignal();<a name="line.323"></a>
+<span class="sourceLineNo">324</span> join(250);<a name="line.324"></a>
+<span class="sourceLineNo">325</span> if (i > 0 && (i % 8) == 0) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span> LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.326"></a>
+<span class="sourceLineNo">327</span> StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.327"></a>
+<span class="sourceLineNo">328</span> }<a name="line.328"></a>
+<span class="sourceLineNo">329</span> }<a name="line.329"></a>
+<span class="sourceLineNo">330</span> } catch (InterruptedException e) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span> LOG.warn(getName() + " join wait got interrupted", e);<a name="line.331"></a>
+<span class="sourceLineNo">332</span> }<a name="line.332"></a>
+<span class="sourceLineNo">333</span> }<a name="line.333"></a>
+<span class="sourceLineNo">334</span> }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span> // ============================================================================================<a name="line.336"></a>
+<span class="sourceLineNo">337</span> // Internals Helpers<a name="line.337"></a>
+<span class="sourceLineNo">338</span> // ============================================================================================<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span> /**<a name="line.340"></a>
+<span class="sourceLineNo">341</span> * Node that contains a set of RemoteProcedures<a name="line.341"></a>
+<span class="sourceLineNo">342</span> */<a name="line.342"></a>
+<span class="sourceLineNo">343</span> protected final class BufferNode extends DelayedContainerWithTimestamp<TRemote><a name="line.343"></a>
+<span class="sourceLineNo">344</span> implements RemoteNode<TEnv, TRemote> {<a name="line.344"></a>
+<span class="sourceLineNo">345</span> private Set<RemoteProcedure> operations;<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span> protected BufferNode(final TRemote key) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span> super(key, 0);<a name="line.348"></a>
+<span class="sourceLineNo">349</span> }<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span> @Override<a name="line.351"></a>
+<span class="sourceLineNo">352</span> public TRemote getKey() {<a name="line.352"></a>
+<span class="sourceLineNo">353</span> return getObject();<a name="line.353"></a>
+<span class="sourceLineNo">354</span> }<a name="line.354"></a>
+<span class="sourceLineNo">355</span><a name="line.355"></a>
+<span class="sourceLineNo">356</span> @Override<a name="line.356"></a>
+<span class="sourceLineNo">357</span> public synchronized void add(final RemoteProcedure operation) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span> if (this.operations == null) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span> this.operations = new HashSet<>();<a name="line.359"></a>
+<span class="sourceLineNo">360</span> setTimeout(EnvironmentEdgeManager.currentTime() + operationDelay);<a name="line.360"></a>
+<span class="sourceLineNo">361</span> timeoutExecutor.add(this);<a name="line.361"></a>
+<span class="sourceLineNo">362</span> }<a name="line.362"></a>
+<span class="sourceLineNo">363</span> this.operations.add(operation);<a name="line.363"></a>
+<span class="sourceLineNo">364</span> if (this.operations.size() > queueMaxSize) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span> timeoutExecutor.remove(this);<a name="line.365"></a>
+<span class="sourceLineNo">366</span> dispatch();<a name="line.366"></a>
+<span class="sourceLineNo">367</span> }<a name="line.367"></a>
+<span class="sourceLineNo">368</span> }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span> @Override<a name="line.370"></a>
+<span class="sourceLineNo">371</span> public synchronized void dispatch() {<a name="line.371"></a>
+<span class="sourceLineNo">372</span> if (operations != null) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> remoteDispatch(getKey(), operations);<a name="line.373"></a>
+<span class="sourceLineNo">374</span> this.operations = null;<a name="line.374"></a>
+<span class="sourceLineNo">375</span> }<a name="line.375"></a>
+<span class="sourceLineNo">376</span> }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span> public synchronized void abortOperationsInQueue() {<a name="line.378"></a>
+<span class="sourceLineNo">379</span> if (operations != null) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span> abortPendingOperations(getKey(), operations);<a name="line.380"></a>
+<span class="sourceLineNo">381</span> this.operations = null;<a name="line.381"></a>
+<span class="sourceLineNo">382</span> }<a name="line.382"></a>
+<span class="sourceLineNo">383</span> }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
+<span class="sourceLineNo">386</span> public String toString() {<a name="line.386"></a>
+<span class="sourceLineNo">387</span> return super.toString() + ", operations=" + this.operations;<a name="line.387"></a>
+<span class="sourceLineNo">388</span> }<a name="line.388"></a>
+<span class="sourceLineNo">389</span> }<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span> /**<a name="line.391"></a>
+<span class="sourceLineNo">392</span> * Delayed object that holds a FutureTask.<a name="line.392"></a>
+<span class="sourceLineNo">393</span> * used to submit something later to the thread-pool.<a name="line.393"></a>
+<span class="sourceLineNo">394</span> */<a name="line.394"></a>
+<span class="sourceLineNo">395</span> private static final class DelayedTask extends DelayedContainerWithTimestamp<FutureTask<Void>> {<a name="line.395"></a>
+<span class="sourceLineNo">396</span> public DelayedTask(final FutureTask<Void> task, final long delay, final TimeUnit unit) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span> super(task, EnvironmentEdgeManager.currentTime() + unit.toMillis(delay));<a name="line.397"></a>
+<span class="sourceLineNo">398</span> }<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>}<a name="line.400"></a>
[05/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html
index 594ef24..17d5c40 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html
@@ -170,241 +170,242 @@
<span class="sourceLineNo">162</span> }<a name="line.162"></a>
<span class="sourceLineNo">163</span><a name="line.163"></a>
<span class="sourceLineNo">164</span> /**<a name="line.164"></a>
-<span class="sourceLineNo">165</span> * Add a remote rpc. Be sure to check result for successful add.<a name="line.165"></a>
+<span class="sourceLineNo">165</span> * Add a remote rpc.<a name="line.165"></a>
<span class="sourceLineNo">166</span> * @param key the node identifier<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * @return True if we successfully added the operation.<a name="line.167"></a>
-<span class="sourceLineNo">168</span> */<a name="line.168"></a>
-<span class="sourceLineNo">169</span> public boolean addOperationToNode(final TRemote key, RemoteProcedure rp) {<a name="line.169"></a>
+<span class="sourceLineNo">167</span> */<a name="line.167"></a>
+<span class="sourceLineNo">168</span> public void addOperationToNode(final TRemote key, RemoteProcedure rp)<a name="line.168"></a>
+<span class="sourceLineNo">169</span> throws NullTargetServerDispatchException, NoServerDispatchException, NoNodeDispatchException {<a name="line.169"></a>
<span class="sourceLineNo">170</span> if (key == null) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span> // Key is remote server name. Be careful. It could have been nulled by a concurrent<a name="line.171"></a>
-<span class="sourceLineNo">172</span> // ServerCrashProcedure shutting down outstanding RPC requests. See remoteCallFailed.<a name="line.172"></a>
-<span class="sourceLineNo">173</span> return false;<a name="line.173"></a>
-<span class="sourceLineNo">174</span> }<a name="line.174"></a>
-<span class="sourceLineNo">175</span> assert key != null : "found null key for node";<a name="line.175"></a>
-<span class="sourceLineNo">176</span> BufferNode node = nodeMap.get(key);<a name="line.176"></a>
-<span class="sourceLineNo">177</span> if (node == null) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span> return false;<a name="line.178"></a>
-<span class="sourceLineNo">179</span> }<a name="line.179"></a>
-<span class="sourceLineNo">180</span> node.add(rp);<a name="line.180"></a>
-<span class="sourceLineNo">181</span> // Check our node still in the map; could have been removed by #removeNode.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> return nodeMap.containsValue(node);<a name="line.182"></a>
-<span class="sourceLineNo">183</span> }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span> /**<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * Remove a remote node<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * @param key the node identifier<a name="line.187"></a>
-<span class="sourceLineNo">188</span> */<a name="line.188"></a>
-<span class="sourceLineNo">189</span> public boolean removeNode(final TRemote key) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span> final BufferNode node = nodeMap.remove(key);<a name="line.190"></a>
-<span class="sourceLineNo">191</span> if (node == null) return false;<a name="line.191"></a>
-<span class="sourceLineNo">192</span> node.abortOperationsInQueue();<a name="line.192"></a>
-<span class="sourceLineNo">193</span> return true;<a name="line.193"></a>
-<span class="sourceLineNo">194</span> }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span> // ============================================================================================<a name="line.196"></a>
-<span class="sourceLineNo">197</span> // Task Helpers<a name="line.197"></a>
-<span class="sourceLineNo">198</span> // ============================================================================================<a name="line.198"></a>
-<span class="sourceLineNo">199</span> protected Future<Void> submitTask(Callable<Void> task) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span> return threadPool.submit(task);<a name="line.200"></a>
-<span class="sourceLineNo">201</span> }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span> protected Future<Void> submitTask(Callable<Void> task, long delay, TimeUnit unit) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span> final FutureTask<Void> futureTask = new FutureTask(task);<a name="line.204"></a>
-<span class="sourceLineNo">205</span> timeoutExecutor.add(new DelayedTask(futureTask, delay, unit));<a name="line.205"></a>
-<span class="sourceLineNo">206</span> return futureTask;<a name="line.206"></a>
-<span class="sourceLineNo">207</span> }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span> protected abstract void remoteDispatch(TRemote key, Set<RemoteProcedure> operations);<a name="line.209"></a>
-<span class="sourceLineNo">210</span> protected abstract void abortPendingOperations(TRemote key, Set<RemoteProcedure> operations);<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span> /**<a name="line.212"></a>
-<span class="sourceLineNo">213</span> * Data structure with reference to remote operation.<a name="line.213"></a>
-<span class="sourceLineNo">214</span> */<a name="line.214"></a>
-<span class="sourceLineNo">215</span> public static abstract class RemoteOperation {<a name="line.215"></a>
-<span class="sourceLineNo">216</span> private final RemoteProcedure remoteProcedure;<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span> protected RemoteOperation(final RemoteProcedure remoteProcedure) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span> this.remoteProcedure = remoteProcedure;<a name="line.219"></a>
-<span class="sourceLineNo">220</span> }<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span> public RemoteProcedure getRemoteProcedure() {<a name="line.222"></a>
-<span class="sourceLineNo">223</span> return remoteProcedure;<a name="line.223"></a>
-<span class="sourceLineNo">224</span> }<a name="line.224"></a>
-<span class="sourceLineNo">225</span> }<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span> /**<a name="line.227"></a>
-<span class="sourceLineNo">228</span> * Remote procedure reference.<a name="line.228"></a>
-<span class="sourceLineNo">229</span> */<a name="line.229"></a>
-<span class="sourceLineNo">230</span> public interface RemoteProcedure<TEnv, TRemote> {<a name="line.230"></a>
-<span class="sourceLineNo">231</span> /**<a name="line.231"></a>
-<span class="sourceLineNo">232</span> * For building the remote operation.<a name="line.232"></a>
-<span class="sourceLineNo">233</span> */<a name="line.233"></a>
-<span class="sourceLineNo">234</span> RemoteOperation remoteCallBuild(TEnv env, TRemote remote);<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span> /**<a name="line.236"></a>
-<span class="sourceLineNo">237</span> * Called when the executeProcedure call is failed.<a name="line.237"></a>
-<span class="sourceLineNo">238</span> */<a name="line.238"></a>
-<span class="sourceLineNo">239</span> void remoteCallFailed(TEnv env, TRemote remote, IOException exception);<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span> /**<a name="line.241"></a>
-<span class="sourceLineNo">242</span> * Called when RS tells the remote procedure is succeeded through the<a name="line.242"></a>
-<span class="sourceLineNo">243</span> * {@code reportProcedureDone} method.<a name="line.243"></a>
-<span class="sourceLineNo">244</span> */<a name="line.244"></a>
-<span class="sourceLineNo">245</span> void remoteOperationCompleted(TEnv env);<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span> /**<a name="line.247"></a>
-<span class="sourceLineNo">248</span> * Called when RS tells the remote procedure is failed through the {@code reportProcedureDone}<a name="line.248"></a>
-<span class="sourceLineNo">249</span> * method.<a name="line.249"></a>
-<span class="sourceLineNo">250</span> */<a name="line.250"></a>
-<span class="sourceLineNo">251</span> void remoteOperationFailed(TEnv env, RemoteProcedureException error);<a name="line.251"></a>
-<span class="sourceLineNo">252</span> }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span> /**<a name="line.254"></a>
-<span class="sourceLineNo">255</span> * Account of what procedures are running on remote node.<a name="line.255"></a>
-<span class="sourceLineNo">256</span> * @param <TEnv><a name="line.256"></a>
-<span class="sourceLineNo">257</span> * @param <TRemote><a name="line.257"></a>
-<span class="sourceLineNo">258</span> */<a name="line.258"></a>
-<span class="sourceLineNo">259</span> public interface RemoteNode<TEnv, TRemote> {<a name="line.259"></a>
-<span class="sourceLineNo">260</span> TRemote getKey();<a name="line.260"></a>
-<span class="sourceLineNo">261</span> void add(RemoteProcedure<TEnv, TRemote> operation);<a name="line.261"></a>
-<span class="sourceLineNo">262</span> void dispatch();<a name="line.262"></a>
-<span class="sourceLineNo">263</span> }<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span> protected ArrayListMultimap<Class<?>, RemoteOperation> buildAndGroupRequestByType(final TEnv env,<a name="line.265"></a>
-<span class="sourceLineNo">266</span> final TRemote remote, final Set<RemoteProcedure> remoteProcedures) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span> final ArrayListMultimap<Class<?>, RemoteOperation> requestByType = ArrayListMultimap.create();<a name="line.267"></a>
-<span class="sourceLineNo">268</span> for (RemoteProcedure proc: remoteProcedures) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span> RemoteOperation operation = proc.remoteCallBuild(env, remote);<a name="line.269"></a>
-<span class="sourceLineNo">270</span> requestByType.put(operation.getClass(), operation);<a name="line.270"></a>
-<span class="sourceLineNo">271</span> }<a name="line.271"></a>
-<span class="sourceLineNo">272</span> return requestByType;<a name="line.272"></a>
-<span class="sourceLineNo">273</span> }<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span> protected <T extends RemoteOperation> List<T> fetchType(<a name="line.275"></a>
-<span class="sourceLineNo">276</span> final ArrayListMultimap<Class<?>, RemoteOperation> requestByType, final Class<T> type) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span> return (List<T>)requestByType.removeAll(type);<a name="line.277"></a>
-<span class="sourceLineNo">278</span> }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span> // ============================================================================================<a name="line.280"></a>
-<span class="sourceLineNo">281</span> // Timeout Helpers<a name="line.281"></a>
-<span class="sourceLineNo">282</span> // ============================================================================================<a name="line.282"></a>
-<span class="sourceLineNo">283</span> private final class TimeoutExecutorThread extends Thread {<a name="line.283"></a>
-<span class="sourceLineNo">284</span> private final DelayQueue<DelayedWithTimeout> queue = new DelayQueue<DelayedWithTimeout>();<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span> public TimeoutExecutorThread() {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> super("ProcedureDispatcherTimeoutThread");<a name="line.287"></a>
-<span class="sourceLineNo">288</span> }<a name="line.288"></a>
-<span class="sourceLineNo">289</span><a name="line.289"></a>
-<span class="sourceLineNo">290</span> @Override<a name="line.290"></a>
-<span class="sourceLineNo">291</span> public void run() {<a name="line.291"></a>
-<span class="sourceLineNo">292</span> while (running.get()) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span> final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.293"></a>
-<span class="sourceLineNo">294</span> if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span> // the executor may be shutting down, and the task is just the shutdown request<a name="line.295"></a>
-<span class="sourceLineNo">296</span> continue;<a name="line.296"></a>
-<span class="sourceLineNo">297</span> }<a name="line.297"></a>
-<span class="sourceLineNo">298</span> if (task instanceof DelayedTask) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span> threadPool.execute(((DelayedTask)task).getObject());<a name="line.299"></a>
-<span class="sourceLineNo">300</span> } else {<a name="line.300"></a>
-<span class="sourceLineNo">301</span> ((BufferNode)task).dispatch();<a name="line.301"></a>
-<span class="sourceLineNo">302</span> }<a name="line.302"></a>
-<span class="sourceLineNo">303</span> }<a name="line.303"></a>
-<span class="sourceLineNo">304</span> }<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span> public void add(final DelayedWithTimeout delayed) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span> queue.add(delayed);<a name="line.307"></a>
-<span class="sourceLineNo">308</span> }<a name="line.308"></a>
-<span class="sourceLineNo">309</span><a name="line.309"></a>
-<span class="sourceLineNo">310</span> public void remove(final DelayedWithTimeout delayed) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span> queue.remove(delayed);<a name="line.311"></a>
-<span class="sourceLineNo">312</span> }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span> public void sendStopSignal() {<a name="line.314"></a>
-<span class="sourceLineNo">315</span> queue.add(DelayedUtil.DELAYED_POISON);<a name="line.315"></a>
-<span class="sourceLineNo">316</span> }<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span> public void awaitTermination() {<a name="line.318"></a>
-<span class="sourceLineNo">319</span> try {<a name="line.319"></a>
-<span class="sourceLineNo">320</span> final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.320"></a>
-<span class="sourceLineNo">321</span> for (int i = 0; isAlive(); ++i) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span> sendStopSignal();<a name="line.322"></a>
-<span class="sourceLineNo">323</span> join(250);<a name="line.323"></a>
-<span class="sourceLineNo">324</span> if (i > 0 && (i % 8) == 0) {<a name="line.324"></a>
-<span class="sourceLineNo">325</span> LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.325"></a>
-<span class="sourceLineNo">326</span> StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.326"></a>
-<span class="sourceLineNo">327</span> }<a name="line.327"></a>
-<span class="sourceLineNo">328</span> }<a name="line.328"></a>
-<span class="sourceLineNo">329</span> } catch (InterruptedException e) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span> LOG.warn(getName() + " join wait got interrupted", e);<a name="line.330"></a>
-<span class="sourceLineNo">331</span> }<a name="line.331"></a>
-<span class="sourceLineNo">332</span> }<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> // ============================================================================================<a name="line.335"></a>
-<span class="sourceLineNo">336</span> // Internals Helpers<a name="line.336"></a>
-<span class="sourceLineNo">337</span> // ============================================================================================<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span> /**<a name="line.339"></a>
-<span class="sourceLineNo">340</span> * Node that contains a set of RemoteProcedures<a name="line.340"></a>
-<span class="sourceLineNo">341</span> */<a name="line.341"></a>
-<span class="sourceLineNo">342</span> protected final class BufferNode extends DelayedContainerWithTimestamp<TRemote><a name="line.342"></a>
-<span class="sourceLineNo">343</span> implements RemoteNode<TEnv, TRemote> {<a name="line.343"></a>
-<span class="sourceLineNo">344</span> private Set<RemoteProcedure> operations;<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span> protected BufferNode(final TRemote key) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> super(key, 0);<a name="line.347"></a>
-<span class="sourceLineNo">348</span> }<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span> @Override<a name="line.350"></a>
-<span class="sourceLineNo">351</span> public TRemote getKey() {<a name="line.351"></a>
-<span class="sourceLineNo">352</span> return getObject();<a name="line.352"></a>
-<span class="sourceLineNo">353</span> }<a name="line.353"></a>
-<span class="sourceLineNo">354</span><a name="line.354"></a>
-<span class="sourceLineNo">355</span> @Override<a name="line.355"></a>
-<span class="sourceLineNo">356</span> public synchronized void add(final RemoteProcedure operation) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span> if (this.operations == null) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> this.operations = new HashSet<>();<a name="line.358"></a>
-<span class="sourceLineNo">359</span> setTimeout(EnvironmentEdgeManager.currentTime() + operationDelay);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> timeoutExecutor.add(this);<a name="line.360"></a>
-<span class="sourceLineNo">361</span> }<a name="line.361"></a>
-<span class="sourceLineNo">362</span> this.operations.add(operation);<a name="line.362"></a>
-<span class="sourceLineNo">363</span> if (this.operations.size() > queueMaxSize) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span> timeoutExecutor.remove(this);<a name="line.364"></a>
-<span class="sourceLineNo">365</span> dispatch();<a name="line.365"></a>
-<span class="sourceLineNo">366</span> }<a name="line.366"></a>
-<span class="sourceLineNo">367</span> }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span> @Override<a name="line.369"></a>
-<span class="sourceLineNo">370</span> public synchronized void dispatch() {<a name="line.370"></a>
-<span class="sourceLineNo">371</span> if (operations != null) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span> remoteDispatch(getKey(), operations);<a name="line.372"></a>
-<span class="sourceLineNo">373</span> this.operations = null;<a name="line.373"></a>
-<span class="sourceLineNo">374</span> }<a name="line.374"></a>
-<span class="sourceLineNo">375</span> }<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span> public synchronized void abortOperationsInQueue() {<a name="line.377"></a>
-<span class="sourceLineNo">378</span> if (operations != null) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span> abortPendingOperations(getKey(), operations);<a name="line.379"></a>
-<span class="sourceLineNo">380</span> this.operations = null;<a name="line.380"></a>
-<span class="sourceLineNo">381</span> }<a name="line.381"></a>
-<span class="sourceLineNo">382</span> }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span> @Override<a name="line.384"></a>
-<span class="sourceLineNo">385</span> public String toString() {<a name="line.385"></a>
-<span class="sourceLineNo">386</span> return super.toString() + ", operations=" + this.operations;<a name="line.386"></a>
-<span class="sourceLineNo">387</span> }<a name="line.387"></a>
-<span class="sourceLineNo">388</span> }<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span> /**<a name="line.390"></a>
-<span class="sourceLineNo">391</span> * Delayed object that holds a FutureTask.<a name="line.391"></a>
-<span class="sourceLineNo">392</span> * used to submit something later to the thread-pool.<a name="line.392"></a>
-<span class="sourceLineNo">393</span> */<a name="line.393"></a>
-<span class="sourceLineNo">394</span> private static final class DelayedTask extends DelayedContainerWithTimestamp<FutureTask<Void>> {<a name="line.394"></a>
-<span class="sourceLineNo">395</span> public DelayedTask(final FutureTask<Void> task, final long delay, final TimeUnit unit) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span> super(task, EnvironmentEdgeManager.currentTime() + unit.toMillis(delay));<a name="line.396"></a>
-<span class="sourceLineNo">397</span> }<a name="line.397"></a>
-<span class="sourceLineNo">398</span> }<a name="line.398"></a>
-<span class="sourceLineNo">399</span>}<a name="line.399"></a>
+<span class="sourceLineNo">171</span> throw new NullTargetServerDispatchException(rp.toString());<a name="line.171"></a>
+<span class="sourceLineNo">172</span> }<a name="line.172"></a>
+<span class="sourceLineNo">173</span> BufferNode node = nodeMap.get(key);<a name="line.173"></a>
+<span class="sourceLineNo">174</span> if (node == null) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span> // If null here, it means node has been removed because it crashed. This happens when server<a name="line.175"></a>
+<span class="sourceLineNo">176</span> // is expired in ServerManager. ServerCrashProcedure may or may not have run.<a name="line.176"></a>
+<span class="sourceLineNo">177</span> throw new NoServerDispatchException(key.toString() + "; " + rp.toString());<a name="line.177"></a>
+<span class="sourceLineNo">178</span> }<a name="line.178"></a>
+<span class="sourceLineNo">179</span> node.add(rp);<a name="line.179"></a>
+<span class="sourceLineNo">180</span> // Check our node still in the map; could have been removed by #removeNode.<a name="line.180"></a>
+<span class="sourceLineNo">181</span> if (!nodeMap.containsValue(node)) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span> throw new NoNodeDispatchException(key.toString() + "; " + rp.toString());<a name="line.182"></a>
+<span class="sourceLineNo">183</span> }<a name="line.183"></a>
+<span class="sourceLineNo">184</span> }<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span> /**<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * Remove a remote node<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * @param key the node identifier<a name="line.188"></a>
+<span class="sourceLineNo">189</span> */<a name="line.189"></a>
+<span class="sourceLineNo">190</span> public boolean removeNode(final TRemote key) {<a name="line.190"></a>
+<span class="sourceLineNo">191</span> final BufferNode node = nodeMap.remove(key);<a name="line.191"></a>
+<span class="sourceLineNo">192</span> if (node == null) return false;<a name="line.192"></a>
+<span class="sourceLineNo">193</span> node.abortOperationsInQueue();<a name="line.193"></a>
+<span class="sourceLineNo">194</span> return true;<a name="line.194"></a>
+<span class="sourceLineNo">195</span> }<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span> // ============================================================================================<a name="line.197"></a>
+<span class="sourceLineNo">198</span> // Task Helpers<a name="line.198"></a>
+<span class="sourceLineNo">199</span> // ============================================================================================<a name="line.199"></a>
+<span class="sourceLineNo">200</span> protected Future<Void> submitTask(Callable<Void> task) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span> return threadPool.submit(task);<a name="line.201"></a>
+<span class="sourceLineNo">202</span> }<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span> protected Future<Void> submitTask(Callable<Void> task, long delay, TimeUnit unit) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span> final FutureTask<Void> futureTask = new FutureTask(task);<a name="line.205"></a>
+<span class="sourceLineNo">206</span> timeoutExecutor.add(new DelayedTask(futureTask, delay, unit));<a name="line.206"></a>
+<span class="sourceLineNo">207</span> return futureTask;<a name="line.207"></a>
+<span class="sourceLineNo">208</span> }<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span> protected abstract void remoteDispatch(TRemote key, Set<RemoteProcedure> operations);<a name="line.210"></a>
+<span class="sourceLineNo">211</span> protected abstract void abortPendingOperations(TRemote key, Set<RemoteProcedure> operations);<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span> /**<a name="line.213"></a>
+<span class="sourceLineNo">214</span> * Data structure with reference to remote operation.<a name="line.214"></a>
+<span class="sourceLineNo">215</span> */<a name="line.215"></a>
+<span class="sourceLineNo">216</span> public static abstract class RemoteOperation {<a name="line.216"></a>
+<span class="sourceLineNo">217</span> private final RemoteProcedure remoteProcedure;<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span> protected RemoteOperation(final RemoteProcedure remoteProcedure) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span> this.remoteProcedure = remoteProcedure;<a name="line.220"></a>
+<span class="sourceLineNo">221</span> }<a name="line.221"></a>
+<span class="sourceLineNo">222</span><a name="line.222"></a>
+<span class="sourceLineNo">223</span> public RemoteProcedure getRemoteProcedure() {<a name="line.223"></a>
+<span class="sourceLineNo">224</span> return remoteProcedure;<a name="line.224"></a>
+<span class="sourceLineNo">225</span> }<a name="line.225"></a>
+<span class="sourceLineNo">226</span> }<a name="line.226"></a>
+<span class="sourceLineNo">227</span><a name="line.227"></a>
+<span class="sourceLineNo">228</span> /**<a name="line.228"></a>
+<span class="sourceLineNo">229</span> * Remote procedure reference.<a name="line.229"></a>
+<span class="sourceLineNo">230</span> */<a name="line.230"></a>
+<span class="sourceLineNo">231</span> public interface RemoteProcedure<TEnv, TRemote> {<a name="line.231"></a>
+<span class="sourceLineNo">232</span> /**<a name="line.232"></a>
+<span class="sourceLineNo">233</span> * For building the remote operation.<a name="line.233"></a>
+<span class="sourceLineNo">234</span> */<a name="line.234"></a>
+<span class="sourceLineNo">235</span> RemoteOperation remoteCallBuild(TEnv env, TRemote remote);<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span> /**<a name="line.237"></a>
+<span class="sourceLineNo">238</span> * Called when the executeProcedure call is failed.<a name="line.238"></a>
+<span class="sourceLineNo">239</span> */<a name="line.239"></a>
+<span class="sourceLineNo">240</span> void remoteCallFailed(TEnv env, TRemote remote, IOException exception);<a name="line.240"></a>
+<span class="sourceLineNo">241</span><a name="line.241"></a>
+<span class="sourceLineNo">242</span> /**<a name="line.242"></a>
+<span class="sourceLineNo">243</span> * Called when RS tells the remote procedure is succeeded through the<a name="line.243"></a>
+<span class="sourceLineNo">244</span> * {@code reportProcedureDone} method.<a name="line.244"></a>
+<span class="sourceLineNo">245</span> */<a name="line.245"></a>
+<span class="sourceLineNo">246</span> void remoteOperationCompleted(TEnv env);<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span> /**<a name="line.248"></a>
+<span class="sourceLineNo">249</span> * Called when RS tells the remote procedure is failed through the {@code reportProcedureDone}<a name="line.249"></a>
+<span class="sourceLineNo">250</span> * method.<a name="line.250"></a>
+<span class="sourceLineNo">251</span> */<a name="line.251"></a>
+<span class="sourceLineNo">252</span> void remoteOperationFailed(TEnv env, RemoteProcedureException error);<a name="line.252"></a>
+<span class="sourceLineNo">253</span> }<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span> /**<a name="line.255"></a>
+<span class="sourceLineNo">256</span> * Account of what procedures are running on remote node.<a name="line.256"></a>
+<span class="sourceLineNo">257</span> * @param <TEnv><a name="line.257"></a>
+<span class="sourceLineNo">258</span> * @param <TRemote><a name="line.258"></a>
+<span class="sourceLineNo">259</span> */<a name="line.259"></a>
+<span class="sourceLineNo">260</span> public interface RemoteNode<TEnv, TRemote> {<a name="line.260"></a>
+<span class="sourceLineNo">261</span> TRemote getKey();<a name="line.261"></a>
+<span class="sourceLineNo">262</span> void add(RemoteProcedure<TEnv, TRemote> operation);<a name="line.262"></a>
+<span class="sourceLineNo">263</span> void dispatch();<a name="line.263"></a>
+<span class="sourceLineNo">264</span> }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span> protected ArrayListMultimap<Class<?>, RemoteOperation> buildAndGroupRequestByType(final TEnv env,<a name="line.266"></a>
+<span class="sourceLineNo">267</span> final TRemote remote, final Set<RemoteProcedure> remoteProcedures) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span> final ArrayListMultimap<Class<?>, RemoteOperation> requestByType = ArrayListMultimap.create();<a name="line.268"></a>
+<span class="sourceLineNo">269</span> for (RemoteProcedure proc: remoteProcedures) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span> RemoteOperation operation = proc.remoteCallBuild(env, remote);<a name="line.270"></a>
+<span class="sourceLineNo">271</span> requestByType.put(operation.getClass(), operation);<a name="line.271"></a>
+<span class="sourceLineNo">272</span> }<a name="line.272"></a>
+<span class="sourceLineNo">273</span> return requestByType;<a name="line.273"></a>
+<span class="sourceLineNo">274</span> }<a name="line.274"></a>
+<span class="sourceLineNo">275</span><a name="line.275"></a>
+<span class="sourceLineNo">276</span> protected <T extends RemoteOperation> List<T> fetchType(<a name="line.276"></a>
+<span class="sourceLineNo">277</span> final ArrayListMultimap<Class<?>, RemoteOperation> requestByType, final Class<T> type) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span> return (List<T>)requestByType.removeAll(type);<a name="line.278"></a>
+<span class="sourceLineNo">279</span> }<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span> // ============================================================================================<a name="line.281"></a>
+<span class="sourceLineNo">282</span> // Timeout Helpers<a name="line.282"></a>
+<span class="sourceLineNo">283</span> // ============================================================================================<a name="line.283"></a>
+<span class="sourceLineNo">284</span> private final class TimeoutExecutorThread extends Thread {<a name="line.284"></a>
+<span class="sourceLineNo">285</span> private final DelayQueue<DelayedWithTimeout> queue = new DelayQueue<DelayedWithTimeout>();<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span> public TimeoutExecutorThread() {<a name="line.287"></a>
+<span class="sourceLineNo">288</span> super("ProcedureDispatcherTimeoutThread");<a name="line.288"></a>
+<span class="sourceLineNo">289</span> }<a name="line.289"></a>
+<span class="sourceLineNo">290</span><a name="line.290"></a>
+<span class="sourceLineNo">291</span> @Override<a name="line.291"></a>
+<span class="sourceLineNo">292</span> public void run() {<a name="line.292"></a>
+<span class="sourceLineNo">293</span> while (running.get()) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span> final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.294"></a>
+<span class="sourceLineNo">295</span> if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.295"></a>
+<span class="sourceLineNo">296</span> // the executor may be shutting down, and the task is just the shutdown request<a name="line.296"></a>
+<span class="sourceLineNo">297</span> continue;<a name="line.297"></a>
+<span class="sourceLineNo">298</span> }<a name="line.298"></a>
+<span class="sourceLineNo">299</span> if (task instanceof DelayedTask) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span> threadPool.execute(((DelayedTask)task).getObject());<a name="line.300"></a>
+<span class="sourceLineNo">301</span> } else {<a name="line.301"></a>
+<span class="sourceLineNo">302</span> ((BufferNode)task).dispatch();<a name="line.302"></a>
+<span class="sourceLineNo">303</span> }<a name="line.303"></a>
+<span class="sourceLineNo">304</span> }<a name="line.304"></a>
+<span class="sourceLineNo">305</span> }<a name="line.305"></a>
+<span class="sourceLineNo">306</span><a name="line.306"></a>
+<span class="sourceLineNo">307</span> public void add(final DelayedWithTimeout delayed) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span> queue.add(delayed);<a name="line.308"></a>
+<span class="sourceLineNo">309</span> }<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span> public void remove(final DelayedWithTimeout delayed) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span> queue.remove(delayed);<a name="line.312"></a>
+<span class="sourceLineNo">313</span> }<a name="line.313"></a>
+<span class="sourceLineNo">314</span><a name="line.314"></a>
+<span class="sourceLineNo">315</span> public void sendStopSignal() {<a name="line.315"></a>
+<span class="sourceLineNo">316</span> queue.add(DelayedUtil.DELAYED_POISON);<a name="line.316"></a>
+<span class="sourceLineNo">317</span> }<a name="line.317"></a>
+<span class="sourceLineNo">318</span><a name="line.318"></a>
+<span class="sourceLineNo">319</span> public void awaitTermination() {<a name="line.319"></a>
+<span class="sourceLineNo">320</span> try {<a name="line.320"></a>
+<span class="sourceLineNo">321</span> final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.321"></a>
+<span class="sourceLineNo">322</span> for (int i = 0; isAlive(); ++i) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span> sendStopSignal();<a name="line.323"></a>
+<span class="sourceLineNo">324</span> join(250);<a name="line.324"></a>
+<span class="sourceLineNo">325</span> if (i > 0 && (i % 8) == 0) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span> LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.326"></a>
+<span class="sourceLineNo">327</span> StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.327"></a>
+<span class="sourceLineNo">328</span> }<a name="line.328"></a>
+<span class="sourceLineNo">329</span> }<a name="line.329"></a>
+<span class="sourceLineNo">330</span> } catch (InterruptedException e) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span> LOG.warn(getName() + " join wait got interrupted", e);<a name="line.331"></a>
+<span class="sourceLineNo">332</span> }<a name="line.332"></a>
+<span class="sourceLineNo">333</span> }<a name="line.333"></a>
+<span class="sourceLineNo">334</span> }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span> // ============================================================================================<a name="line.336"></a>
+<span class="sourceLineNo">337</span> // Internals Helpers<a name="line.337"></a>
+<span class="sourceLineNo">338</span> // ============================================================================================<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span> /**<a name="line.340"></a>
+<span class="sourceLineNo">341</span> * Node that contains a set of RemoteProcedures<a name="line.341"></a>
+<span class="sourceLineNo">342</span> */<a name="line.342"></a>
+<span class="sourceLineNo">343</span> protected final class BufferNode extends DelayedContainerWithTimestamp<TRemote><a name="line.343"></a>
+<span class="sourceLineNo">344</span> implements RemoteNode<TEnv, TRemote> {<a name="line.344"></a>
+<span class="sourceLineNo">345</span> private Set<RemoteProcedure> operations;<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span> protected BufferNode(final TRemote key) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span> super(key, 0);<a name="line.348"></a>
+<span class="sourceLineNo">349</span> }<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span> @Override<a name="line.351"></a>
+<span class="sourceLineNo">352</span> public TRemote getKey() {<a name="line.352"></a>
+<span class="sourceLineNo">353</span> return getObject();<a name="line.353"></a>
+<span class="sourceLineNo">354</span> }<a name="line.354"></a>
+<span class="sourceLineNo">355</span><a name="line.355"></a>
+<span class="sourceLineNo">356</span> @Override<a name="line.356"></a>
+<span class="sourceLineNo">357</span> public synchronized void add(final RemoteProcedure operation) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span> if (this.operations == null) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span> this.operations = new HashSet<>();<a name="line.359"></a>
+<span class="sourceLineNo">360</span> setTimeout(EnvironmentEdgeManager.currentTime() + operationDelay);<a name="line.360"></a>
+<span class="sourceLineNo">361</span> timeoutExecutor.add(this);<a name="line.361"></a>
+<span class="sourceLineNo">362</span> }<a name="line.362"></a>
+<span class="sourceLineNo">363</span> this.operations.add(operation);<a name="line.363"></a>
+<span class="sourceLineNo">364</span> if (this.operations.size() > queueMaxSize) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span> timeoutExecutor.remove(this);<a name="line.365"></a>
+<span class="sourceLineNo">366</span> dispatch();<a name="line.366"></a>
+<span class="sourceLineNo">367</span> }<a name="line.367"></a>
+<span class="sourceLineNo">368</span> }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span> @Override<a name="line.370"></a>
+<span class="sourceLineNo">371</span> public synchronized void dispatch() {<a name="line.371"></a>
+<span class="sourceLineNo">372</span> if (operations != null) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> remoteDispatch(getKey(), operations);<a name="line.373"></a>
+<span class="sourceLineNo">374</span> this.operations = null;<a name="line.374"></a>
+<span class="sourceLineNo">375</span> }<a name="line.375"></a>
+<span class="sourceLineNo">376</span> }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span> public synchronized void abortOperationsInQueue() {<a name="line.378"></a>
+<span class="sourceLineNo">379</span> if (operations != null) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span> abortPendingOperations(getKey(), operations);<a name="line.380"></a>
+<span class="sourceLineNo">381</span> this.operations = null;<a name="line.381"></a>
+<span class="sourceLineNo">382</span> }<a name="line.382"></a>
+<span class="sourceLineNo">383</span> }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
+<span class="sourceLineNo">386</span> public String toString() {<a name="line.386"></a>
+<span class="sourceLineNo">387</span> return super.toString() + ", operations=" + this.operations;<a name="line.387"></a>
+<span class="sourceLineNo">388</span> }<a name="line.388"></a>
+<span class="sourceLineNo">389</span> }<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span> /**<a name="line.391"></a>
+<span class="sourceLineNo">392</span> * Delayed object that holds a FutureTask.<a name="line.392"></a>
+<span class="sourceLineNo">393</span> * used to submit something later to the thread-pool.<a name="line.393"></a>
+<span class="sourceLineNo">394</span> */<a name="line.394"></a>
+<span class="sourceLineNo">395</span> private static final class DelayedTask extends DelayedContainerWithTimestamp<FutureTask<Void>> {<a name="line.395"></a>
+<span class="sourceLineNo">396</span> public DelayedTask(final FutureTask<Void> task, final long delay, final TimeUnit unit) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span> super(task, EnvironmentEdgeManager.currentTime() + unit.toMillis(delay));<a name="line.397"></a>
+<span class="sourceLineNo">398</span> }<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>}<a name="line.400"></a>
[37/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/assignment/class-use/RegionStates.RegionStateNode.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/class-use/RegionStates.RegionStateNode.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/class-use/RegionStates.RegionStateNode.html
index cab0e78..f8ead79 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/class-use/RegionStates.RegionStateNode.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/class-use/RegionStates.RegionStateNode.html
@@ -279,26 +279,42 @@
<a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</code> </td>
</tr>
<tr class="rowColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">UnassignProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#isSafeToProceed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-java.io.IOException-">isSafeToProceed</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+ <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a> exception)</code>
+<div class="block">Our remote call failed but there are a few states where it is safe to proceed with the
+ unassign; e.g.</div>
+</td>
+</tr>
+<tr class="altColor">
<td class="colFirst"><code>protected boolean</code></td>
<td class="colLast"><span class="typeNameLabel">RegionTransitionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#isServerOnline-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">isServerOnline</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><span class="typeNameLabel">AssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#markRegionAsClosed-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">markRegionAsClosed</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><span class="typeNameLabel">AssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#markRegionAsClosing-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">markRegionAsClosing</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><span class="typeNameLabel">AssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#markRegionAsOpened-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">markRegionAsOpened</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><span class="typeNameLabel">AssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#markRegionAsOpening-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">markRegionAsOpening</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</code> </td>
</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><span class="typeNameLabel">UnassignProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#proceed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">proceed</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+ <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</code>
+<div class="block">Set it up so when procedure is unsuspended, we'll move to the procedure finish.</div>
+</td>
+</tr>
<tr class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><span class="typeNameLabel">AssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#queueAssign-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">queueAssign</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</code>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/assignment/class-use/RegionStates.ServerStateNode.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/class-use/RegionStates.ServerStateNode.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/class-use/RegionStates.ServerStateNode.html
index 4c185ad..46ea3a4 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/class-use/RegionStates.ServerStateNode.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/class-use/RegionStates.ServerStateNode.html
@@ -121,7 +121,9 @@
</tr>
<tr class="rowColor">
<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a></code></td>
-<td class="colLast"><span class="typeNameLabel">RegionStates.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#getOrCreateServer-org.apache.hadoop.hbase.ServerName-">getOrCreateServer</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code> </td>
+<td class="colLast"><span class="typeNameLabel">RegionStates.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#getOrCreateServer-org.apache.hadoop.hbase.ServerName-">getOrCreateServer</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code>
+<div class="block">Be judicious calling this method.</div>
+</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a></code></td>
@@ -156,7 +158,7 @@
<td class="colLast"><span class="typeNameLabel">RegionStates.ServerStateNode.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html#compareTo-org.apache.hadoop.hbase.master.assignment.RegionStates.ServerStateNode-">compareTo</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a> other)</code> </td>
</tr>
<tr class="rowColor">
-<td class="colFirst"><code>void</code></td>
+<td class="colFirst"><code>private void</code></td>
<td class="colLast"><span class="typeNameLabel">AssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#killRegionServer-org.apache.hadoop.hbase.master.assignment.RegionStates.ServerStateNode-">killRegionServer</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a> serverNode)</code> </td>
</tr>
<tr class="altColor">
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/assignment/package-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/package-frame.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/package-frame.html
index f7aedd4..5ab0399 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/package-frame.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/package-frame.html
@@ -43,10 +43,6 @@
<ul title="Enums">
<li><a href="RegionStates.ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment" target="classFrame">RegionStates.ServerState</a></li>
</ul>
-<h2 title="Exceptions">Exceptions</h2>
-<ul title="Exceptions">
-<li><a href="FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">FailedRemoteDispatchException</a></li>
-</ul>
</div>
</body>
</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/assignment/package-summary.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/package-summary.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/package-summary.html
index c6bba43..3accf1c 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/package-summary.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/package-summary.html
@@ -179,7 +179,9 @@
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a></td>
-<td class="colLast"> </td>
+<td class="colLast">
+<div class="block">State of Server; list of hosted regions, etc.</div>
+</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateStore.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateStore</a></td>
@@ -224,24 +226,8 @@
<tbody>
<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerState</a></td>
-<td class="colLast"> </td>
-</tr>
-</tbody>
-</table>
-</li>
-<li class="blockList">
-<table class="typeSummary" border="0" cellpadding="3" cellspacing="0" summary="Exception Summary table, listing exceptions, and an explanation">
-<caption><span>Exception Summary</span><span class="tabEnd"> </span></caption>
-<tr>
-<th class="colFirst" scope="col">Exception</th>
-<th class="colLast" scope="col">Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.master.assignment">FailedRemoteDispatchException</a></td>
<td class="colLast">
-<div class="block">Used internally signaling failed queue of a remote procedure
- operation.</div>
+<div class="block">Server State.</div>
</td>
</tr>
</tbody>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
index 2d31da9..8d76841 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
@@ -129,23 +129,6 @@
<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">RegionStates.ServerStateNode</span></a> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>)</li>
<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateStore.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">RegionStateStore</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.StoreFileSplitter.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">SplitTableRegionProcedure.StoreFileSplitter</span></a> (implements java.util.concurrent.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><V>)</li>
-<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Throwable</span></a> (implements java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
-<ul>
-<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Exception</span></a>
-<ul>
-<li type="circle">java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io"><span class="typeNameLink">IOException</span></a>
-<ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseIOException</span></a>
-<ul>
-<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">FailedRemoteDispatchException</span></a></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</li>
<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Util.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Util</span></a></li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/assignment/package-use.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/package-use.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/package-use.html
index d41f354..57839be 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/package-use.html
@@ -185,10 +185,14 @@
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/class-use/RegionStates.ServerReportEvent.html#org.apache.hadoop.hbase.master.assignment">RegionStates.ServerReportEvent</a> </td>
</tr>
<tr class="rowColor">
-<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/class-use/RegionStates.ServerState.html#org.apache.hadoop.hbase.master.assignment">RegionStates.ServerState</a> </td>
+<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/class-use/RegionStates.ServerState.html#org.apache.hadoop.hbase.master.assignment">RegionStates.ServerState</a>
+<div class="block">Server State.</div>
+</td>
</tr>
<tr class="altColor">
-<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/class-use/RegionStates.ServerStateNode.html#org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a> </td>
+<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/class-use/RegionStates.ServerStateNode.html#org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a>
+<div class="block">State of Server; list of hosted regions, etc.</div>
+</td>
</tr>
<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/class-use/RegionStateStore.html#org.apache.hadoop.hbase.master.assignment">RegionStateStore</a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
index eb945fb..ad40e69 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
@@ -197,8 +197,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.Action.Type</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.LocalityType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.Action.Type</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
index 7e21e9c..da60bfb 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -346,10 +346,10 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.TerminationStatus</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.TerminationStatus</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html
index 0e82abe..f2ae0a5 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html
@@ -564,7 +564,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>processMeta</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.203">processMeta</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.206">processMeta</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -580,7 +580,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>filterDefaultMetaRegions</h4>
-<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.216">filterDefaultMetaRegions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> regions)</pre>
+<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.219">filterDefaultMetaRegions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> regions)</pre>
</li>
</ul>
<a name="isDefaultMetaRegion-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -589,7 +589,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>isDefaultMetaRegion</h4>
-<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.222">isDefaultMetaRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> hri)</pre>
+<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.225">isDefaultMetaRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> hri)</pre>
</li>
</ul>
<a name="splitLogs-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
@@ -598,7 +598,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>splitLogs</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.227">splitLogs</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.230">splitLogs</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -612,7 +612,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>rollbackState</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.243">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.245">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.ServerCrashState state)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#rollbackState-TEnvironment-TState-">StateMachineProcedure</a></code></span></div>
@@ -632,7 +632,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>getState</h4>
-<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.ServerCrashState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.250">getState</a>(int stateId)</pre>
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.ServerCrashState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.252">getState</a>(int stateId)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getState-int-">StateMachineProcedure</a></code></span></div>
<div class="block">Convert an ordinal (or state id) to an Enum (or more descriptive) state object.</div>
<dl>
@@ -651,7 +651,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>getStateId</h4>
-<pre>protected int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.255">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.ServerCrashState state)</pre>
+<pre>protected int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.257">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.ServerCrashState state)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getStateId-TState-">StateMachineProcedure</a></code></span></div>
<div class="block">Convert the Enum (or more descriptive) state object to an ordinal (or state id).</div>
<dl>
@@ -670,7 +670,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>getInitialState</h4>
-<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.ServerCrashState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.260">getInitialState</a>()</pre>
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.ServerCrashState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.262">getInitialState</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getInitialState--">StateMachineProcedure</a></code></span></div>
<div class="block">Return the initial state object that will be used for the first call to executeFromState().</div>
<dl>
@@ -687,7 +687,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>abort</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.265">abort</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.267">abort</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#abort-TEnvironment-">Procedure</a></code></span></div>
<div class="block">The abort() call is asynchronous and each procedure must decide how to deal
with it, if they want to be abortable. The simplest implementation
@@ -710,7 +710,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>acquireLock</h4>
-<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.271">acquireLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.273">acquireLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock-TEnvironment-">Procedure</a></code></span></div>
<div class="block">The user should override this method if they need a lock on an Entity.
A lock can be anything, and it is up to the implementor. The Procedure
@@ -747,7 +747,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>releaseLock</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.282">releaseLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.284">releaseLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock-TEnvironment-">Procedure</a></code></span></div>
<div class="block">The user should override this method, and release lock if necessary.</div>
<dl>
@@ -762,7 +762,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>toStringClassDetails</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.287">toStringClassDetails</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a> sb)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.289">toStringClassDetails</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a> sb)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClassDetails-java.lang.StringBuilder-">Procedure</a></code></span></div>
<div class="block">Extend the toString() information with the procedure details
e.g. className and parameters</div>
@@ -780,7 +780,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>serializeStateData</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.298">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.300">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
<div class="block">The user-level code of the procedure may have some state to
@@ -802,7 +802,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>deserializeStateData</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.316">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.318">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
<div class="block">Called on store load to allow the user to decode the previously serialized
@@ -823,7 +823,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>getServerName</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.336">getServerName</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.338">getServerName</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.html#getServerName--">getServerName</a></code> in interface <code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">ServerProcedureInterface</a></code></dd>
@@ -838,7 +838,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>hasMetaTableRegion</h4>
-<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.341">hasMetaTableRegion</a>()</pre>
+<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.343">hasMetaTableRegion</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.html#hasMetaTableRegion--">hasMetaTableRegion</a></code> in interface <code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">ServerProcedureInterface</a></code></dd>
@@ -853,7 +853,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>getServerOperationType</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">ServerProcedureInterface.ServerOperationType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.346">getServerOperationType</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">ServerProcedureInterface.ServerOperationType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.348">getServerOperationType</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.html#getServerOperationType--">ServerProcedureInterface</a></code></span></div>
<div class="block">Given an operation type we can take decisions about what to do with pending operations.
e.g. if we get a crash handler and we have some assignment operation pending
@@ -872,7 +872,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>isYieldBeforeExecuteFromState</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.358">isYieldBeforeExecuteFromState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.360">isYieldBeforeExecuteFromState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.ServerCrashState state)</pre>
<div class="block">For this procedure, yield at end of each successful flow step so that all crashed servers
can make progress rather than do the default which has each procedure running to completion
@@ -895,7 +895,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>shouldWaitClientAck</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.363">shouldWaitClientAck</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.365">shouldWaitClientAck</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#shouldWaitClientAck-TEnvironment-">Procedure</a></code></span></div>
<div class="block">By default, the executor will keep the procedure result around util
the eviction TTL is expired. The client can cut down the waiting time
@@ -918,7 +918,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>handleRIT</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.378">handleRIT</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.380">handleRIT</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> regions)</pre>
<div class="block">Handle any outstanding RIT that are up against this.serverName, the crashed server.
Notify them of crash. Remove assign entries from the passed in <code>regions</code>
@@ -939,7 +939,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockListLast">
<li class="blockList">
<h4>getProcedureMetrics</h4>
-<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureMetrics.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureMetrics</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.421">getProcedureMetrics</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureMetrics.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureMetrics</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#line.423">getProcedureMetrics</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcedureMetrics-TEnvironment-">Procedure</a></code></span></div>
<div class="block">Override this method to provide procedure specific counters for submitted count, failed
count and time histogram.</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html
index 2d8d745..34532b7 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html
@@ -432,16 +432,25 @@
<a href="../../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a> rs)</code> </td>
</tr>
<tr class="rowColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">UnassignProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#isSafeToProceed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-java.io.IOException-">isSafeToProceed</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+ <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a> exception)</code>
+<div class="block">Our remote call failed but there are a few states where it is safe to proceed with the
+ unassign; e.g.</div>
+</td>
+</tr>
+<tr class="altColor">
<td class="colFirst"><code>protected boolean</code></td>
<td class="colLast"><span class="typeNameLabel">RegionTransitionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#isServerOnline-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">isServerOnline</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>protected boolean</code></td>
<td class="colLast"><span class="typeNameLabel">RegionTransitionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#isServerOnline-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.ServerName-">isServerOnline</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><span class="typeNameLabel">MergeTableRegionsProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/MergeTableRegionsProcedure.html#mergeStoreFiles-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.regionserver.HRegionFileSystem-org.apache.hadoop.fs.Path-">mergeStoreFiles</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../../org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionFileSystem</a> regionFs,
@@ -449,88 +458,95 @@
<div class="block">Create reference file(s) of merging regions under the merged directory</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><span class="typeNameLabel">SplitTableRegionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#openParentRegion-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">openParentRegion</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</code>
<div class="block">Rollback close parent region</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><span class="typeNameLabel">AssignmentManager.RegionInTransitionChore.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html#periodicExecute-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">periodicExecute</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><span class="typeNameLabel">MergeTableRegionsProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/MergeTableRegionsProcedure.html#postCompletedMergeRegions-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">postCompletedMergeRegions</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</code>
<div class="block">Post merge region action</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><span class="typeNameLabel">MergeTableRegionsProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/MergeTableRegionsProcedure.html#postMergeRegionsCommit-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">postMergeRegionsCommit</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</code>
<div class="block">Post merge region action</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><span class="typeNameLabel">MergeTableRegionsProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/MergeTableRegionsProcedure.html#postRollBackMergeRegions-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">postRollBackMergeRegions</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</code>
<div class="block">Action after rollback a merge table regions action.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><span class="typeNameLabel">SplitTableRegionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#postRollBackSplitRegion-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">postRollBackSplitRegion</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</code>
<div class="block">Action after rollback a split table region action.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><span class="typeNameLabel">SplitTableRegionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#postSplitRegion-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">postSplitRegion</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</code>
<div class="block">Post split region actions</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><span class="typeNameLabel">MergeTableRegionsProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/MergeTableRegionsProcedure.html#preMergeRegions-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">preMergeRegions</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</code>
<div class="block">Pre merge region action</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><span class="typeNameLabel">MergeTableRegionsProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/MergeTableRegionsProcedure.html#preMergeRegionsCommit-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">preMergeRegionsCommit</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</code>
<div class="block">Post merge region action</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private boolean</code></td>
<td class="colLast"><span class="typeNameLabel">MergeTableRegionsProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/MergeTableRegionsProcedure.html#prepareMergeRegion-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">prepareMergeRegion</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</code>
<div class="block">Prepare merge and do some check</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><span class="typeNameLabel">SplitTableRegionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#prepareSplitRegion-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">prepareSplitRegion</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</code>
<div class="block">Prepare to Split region.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><span class="typeNameLabel">SplitTableRegionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#preSplitRegion-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">preSplitRegion</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</code>
<div class="block">Action before splitting region in a table.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><span class="typeNameLabel">SplitTableRegionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#preSplitRegionAfterMETA-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">preSplitRegionAfterMETA</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</code>
<div class="block">Pre split region actions after the Point-of-No-Return step</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><span class="typeNameLabel">SplitTableRegionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#preSplitRegionBeforeMETA-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">preSplitRegionBeforeMETA</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</code>
<div class="block">Post split region actions before the Point-of-No-Return step</div>
</td>
</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><span class="typeNameLabel">UnassignProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#proceed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">proceed</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+ <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</code>
+<div class="block">Set it up so when procedure is unsuspended, we'll move to the procedure finish.</div>
+</td>
+</tr>
<tr class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><span class="typeNameLabel">MergeTableRegionsProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/MergeTableRegionsProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</code> </td>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
index 2ae933c..701a238 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -210,8 +210,8 @@
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TableProcedureInterface.TableOperationType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">PeerProcedureInterface.PeerOperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TableProcedureInterface.TableOperationType</span></a></li>
</ul>
</li>
</ul>
[02/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html
index 594ef24..17d5c40 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html
@@ -170,241 +170,242 @@
<span class="sourceLineNo">162</span> }<a name="line.162"></a>
<span class="sourceLineNo">163</span><a name="line.163"></a>
<span class="sourceLineNo">164</span> /**<a name="line.164"></a>
-<span class="sourceLineNo">165</span> * Add a remote rpc. Be sure to check result for successful add.<a name="line.165"></a>
+<span class="sourceLineNo">165</span> * Add a remote rpc.<a name="line.165"></a>
<span class="sourceLineNo">166</span> * @param key the node identifier<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * @return True if we successfully added the operation.<a name="line.167"></a>
-<span class="sourceLineNo">168</span> */<a name="line.168"></a>
-<span class="sourceLineNo">169</span> public boolean addOperationToNode(final TRemote key, RemoteProcedure rp) {<a name="line.169"></a>
+<span class="sourceLineNo">167</span> */<a name="line.167"></a>
+<span class="sourceLineNo">168</span> public void addOperationToNode(final TRemote key, RemoteProcedure rp)<a name="line.168"></a>
+<span class="sourceLineNo">169</span> throws NullTargetServerDispatchException, NoServerDispatchException, NoNodeDispatchException {<a name="line.169"></a>
<span class="sourceLineNo">170</span> if (key == null) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span> // Key is remote server name. Be careful. It could have been nulled by a concurrent<a name="line.171"></a>
-<span class="sourceLineNo">172</span> // ServerCrashProcedure shutting down outstanding RPC requests. See remoteCallFailed.<a name="line.172"></a>
-<span class="sourceLineNo">173</span> return false;<a name="line.173"></a>
-<span class="sourceLineNo">174</span> }<a name="line.174"></a>
-<span class="sourceLineNo">175</span> assert key != null : "found null key for node";<a name="line.175"></a>
-<span class="sourceLineNo">176</span> BufferNode node = nodeMap.get(key);<a name="line.176"></a>
-<span class="sourceLineNo">177</span> if (node == null) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span> return false;<a name="line.178"></a>
-<span class="sourceLineNo">179</span> }<a name="line.179"></a>
-<span class="sourceLineNo">180</span> node.add(rp);<a name="line.180"></a>
-<span class="sourceLineNo">181</span> // Check our node still in the map; could have been removed by #removeNode.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> return nodeMap.containsValue(node);<a name="line.182"></a>
-<span class="sourceLineNo">183</span> }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span> /**<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * Remove a remote node<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * @param key the node identifier<a name="line.187"></a>
-<span class="sourceLineNo">188</span> */<a name="line.188"></a>
-<span class="sourceLineNo">189</span> public boolean removeNode(final TRemote key) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span> final BufferNode node = nodeMap.remove(key);<a name="line.190"></a>
-<span class="sourceLineNo">191</span> if (node == null) return false;<a name="line.191"></a>
-<span class="sourceLineNo">192</span> node.abortOperationsInQueue();<a name="line.192"></a>
-<span class="sourceLineNo">193</span> return true;<a name="line.193"></a>
-<span class="sourceLineNo">194</span> }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span> // ============================================================================================<a name="line.196"></a>
-<span class="sourceLineNo">197</span> // Task Helpers<a name="line.197"></a>
-<span class="sourceLineNo">198</span> // ============================================================================================<a name="line.198"></a>
-<span class="sourceLineNo">199</span> protected Future<Void> submitTask(Callable<Void> task) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span> return threadPool.submit(task);<a name="line.200"></a>
-<span class="sourceLineNo">201</span> }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span> protected Future<Void> submitTask(Callable<Void> task, long delay, TimeUnit unit) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span> final FutureTask<Void> futureTask = new FutureTask(task);<a name="line.204"></a>
-<span class="sourceLineNo">205</span> timeoutExecutor.add(new DelayedTask(futureTask, delay, unit));<a name="line.205"></a>
-<span class="sourceLineNo">206</span> return futureTask;<a name="line.206"></a>
-<span class="sourceLineNo">207</span> }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span> protected abstract void remoteDispatch(TRemote key, Set<RemoteProcedure> operations);<a name="line.209"></a>
-<span class="sourceLineNo">210</span> protected abstract void abortPendingOperations(TRemote key, Set<RemoteProcedure> operations);<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span> /**<a name="line.212"></a>
-<span class="sourceLineNo">213</span> * Data structure with reference to remote operation.<a name="line.213"></a>
-<span class="sourceLineNo">214</span> */<a name="line.214"></a>
-<span class="sourceLineNo">215</span> public static abstract class RemoteOperation {<a name="line.215"></a>
-<span class="sourceLineNo">216</span> private final RemoteProcedure remoteProcedure;<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span> protected RemoteOperation(final RemoteProcedure remoteProcedure) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span> this.remoteProcedure = remoteProcedure;<a name="line.219"></a>
-<span class="sourceLineNo">220</span> }<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span> public RemoteProcedure getRemoteProcedure() {<a name="line.222"></a>
-<span class="sourceLineNo">223</span> return remoteProcedure;<a name="line.223"></a>
-<span class="sourceLineNo">224</span> }<a name="line.224"></a>
-<span class="sourceLineNo">225</span> }<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span> /**<a name="line.227"></a>
-<span class="sourceLineNo">228</span> * Remote procedure reference.<a name="line.228"></a>
-<span class="sourceLineNo">229</span> */<a name="line.229"></a>
-<span class="sourceLineNo">230</span> public interface RemoteProcedure<TEnv, TRemote> {<a name="line.230"></a>
-<span class="sourceLineNo">231</span> /**<a name="line.231"></a>
-<span class="sourceLineNo">232</span> * For building the remote operation.<a name="line.232"></a>
-<span class="sourceLineNo">233</span> */<a name="line.233"></a>
-<span class="sourceLineNo">234</span> RemoteOperation remoteCallBuild(TEnv env, TRemote remote);<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span> /**<a name="line.236"></a>
-<span class="sourceLineNo">237</span> * Called when the executeProcedure call is failed.<a name="line.237"></a>
-<span class="sourceLineNo">238</span> */<a name="line.238"></a>
-<span class="sourceLineNo">239</span> void remoteCallFailed(TEnv env, TRemote remote, IOException exception);<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span> /**<a name="line.241"></a>
-<span class="sourceLineNo">242</span> * Called when RS tells the remote procedure is succeeded through the<a name="line.242"></a>
-<span class="sourceLineNo">243</span> * {@code reportProcedureDone} method.<a name="line.243"></a>
-<span class="sourceLineNo">244</span> */<a name="line.244"></a>
-<span class="sourceLineNo">245</span> void remoteOperationCompleted(TEnv env);<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span> /**<a name="line.247"></a>
-<span class="sourceLineNo">248</span> * Called when RS tells the remote procedure is failed through the {@code reportProcedureDone}<a name="line.248"></a>
-<span class="sourceLineNo">249</span> * method.<a name="line.249"></a>
-<span class="sourceLineNo">250</span> */<a name="line.250"></a>
-<span class="sourceLineNo">251</span> void remoteOperationFailed(TEnv env, RemoteProcedureException error);<a name="line.251"></a>
-<span class="sourceLineNo">252</span> }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span> /**<a name="line.254"></a>
-<span class="sourceLineNo">255</span> * Account of what procedures are running on remote node.<a name="line.255"></a>
-<span class="sourceLineNo">256</span> * @param <TEnv><a name="line.256"></a>
-<span class="sourceLineNo">257</span> * @param <TRemote><a name="line.257"></a>
-<span class="sourceLineNo">258</span> */<a name="line.258"></a>
-<span class="sourceLineNo">259</span> public interface RemoteNode<TEnv, TRemote> {<a name="line.259"></a>
-<span class="sourceLineNo">260</span> TRemote getKey();<a name="line.260"></a>
-<span class="sourceLineNo">261</span> void add(RemoteProcedure<TEnv, TRemote> operation);<a name="line.261"></a>
-<span class="sourceLineNo">262</span> void dispatch();<a name="line.262"></a>
-<span class="sourceLineNo">263</span> }<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span> protected ArrayListMultimap<Class<?>, RemoteOperation> buildAndGroupRequestByType(final TEnv env,<a name="line.265"></a>
-<span class="sourceLineNo">266</span> final TRemote remote, final Set<RemoteProcedure> remoteProcedures) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span> final ArrayListMultimap<Class<?>, RemoteOperation> requestByType = ArrayListMultimap.create();<a name="line.267"></a>
-<span class="sourceLineNo">268</span> for (RemoteProcedure proc: remoteProcedures) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span> RemoteOperation operation = proc.remoteCallBuild(env, remote);<a name="line.269"></a>
-<span class="sourceLineNo">270</span> requestByType.put(operation.getClass(), operation);<a name="line.270"></a>
-<span class="sourceLineNo">271</span> }<a name="line.271"></a>
-<span class="sourceLineNo">272</span> return requestByType;<a name="line.272"></a>
-<span class="sourceLineNo">273</span> }<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span> protected <T extends RemoteOperation> List<T> fetchType(<a name="line.275"></a>
-<span class="sourceLineNo">276</span> final ArrayListMultimap<Class<?>, RemoteOperation> requestByType, final Class<T> type) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span> return (List<T>)requestByType.removeAll(type);<a name="line.277"></a>
-<span class="sourceLineNo">278</span> }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span> // ============================================================================================<a name="line.280"></a>
-<span class="sourceLineNo">281</span> // Timeout Helpers<a name="line.281"></a>
-<span class="sourceLineNo">282</span> // ============================================================================================<a name="line.282"></a>
-<span class="sourceLineNo">283</span> private final class TimeoutExecutorThread extends Thread {<a name="line.283"></a>
-<span class="sourceLineNo">284</span> private final DelayQueue<DelayedWithTimeout> queue = new DelayQueue<DelayedWithTimeout>();<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span> public TimeoutExecutorThread() {<a name="line.286"></a>
-<span class="sourceLineNo">287</span> super("ProcedureDispatcherTimeoutThread");<a name="line.287"></a>
-<span class="sourceLineNo">288</span> }<a name="line.288"></a>
-<span class="sourceLineNo">289</span><a name="line.289"></a>
-<span class="sourceLineNo">290</span> @Override<a name="line.290"></a>
-<span class="sourceLineNo">291</span> public void run() {<a name="line.291"></a>
-<span class="sourceLineNo">292</span> while (running.get()) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span> final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.293"></a>
-<span class="sourceLineNo">294</span> if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span> // the executor may be shutting down, and the task is just the shutdown request<a name="line.295"></a>
-<span class="sourceLineNo">296</span> continue;<a name="line.296"></a>
-<span class="sourceLineNo">297</span> }<a name="line.297"></a>
-<span class="sourceLineNo">298</span> if (task instanceof DelayedTask) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span> threadPool.execute(((DelayedTask)task).getObject());<a name="line.299"></a>
-<span class="sourceLineNo">300</span> } else {<a name="line.300"></a>
-<span class="sourceLineNo">301</span> ((BufferNode)task).dispatch();<a name="line.301"></a>
-<span class="sourceLineNo">302</span> }<a name="line.302"></a>
-<span class="sourceLineNo">303</span> }<a name="line.303"></a>
-<span class="sourceLineNo">304</span> }<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span> public void add(final DelayedWithTimeout delayed) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span> queue.add(delayed);<a name="line.307"></a>
-<span class="sourceLineNo">308</span> }<a name="line.308"></a>
-<span class="sourceLineNo">309</span><a name="line.309"></a>
-<span class="sourceLineNo">310</span> public void remove(final DelayedWithTimeout delayed) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span> queue.remove(delayed);<a name="line.311"></a>
-<span class="sourceLineNo">312</span> }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span> public void sendStopSignal() {<a name="line.314"></a>
-<span class="sourceLineNo">315</span> queue.add(DelayedUtil.DELAYED_POISON);<a name="line.315"></a>
-<span class="sourceLineNo">316</span> }<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span> public void awaitTermination() {<a name="line.318"></a>
-<span class="sourceLineNo">319</span> try {<a name="line.319"></a>
-<span class="sourceLineNo">320</span> final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.320"></a>
-<span class="sourceLineNo">321</span> for (int i = 0; isAlive(); ++i) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span> sendStopSignal();<a name="line.322"></a>
-<span class="sourceLineNo">323</span> join(250);<a name="line.323"></a>
-<span class="sourceLineNo">324</span> if (i > 0 && (i % 8) == 0) {<a name="line.324"></a>
-<span class="sourceLineNo">325</span> LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.325"></a>
-<span class="sourceLineNo">326</span> StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.326"></a>
-<span class="sourceLineNo">327</span> }<a name="line.327"></a>
-<span class="sourceLineNo">328</span> }<a name="line.328"></a>
-<span class="sourceLineNo">329</span> } catch (InterruptedException e) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span> LOG.warn(getName() + " join wait got interrupted", e);<a name="line.330"></a>
-<span class="sourceLineNo">331</span> }<a name="line.331"></a>
-<span class="sourceLineNo">332</span> }<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> // ============================================================================================<a name="line.335"></a>
-<span class="sourceLineNo">336</span> // Internals Helpers<a name="line.336"></a>
-<span class="sourceLineNo">337</span> // ============================================================================================<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span> /**<a name="line.339"></a>
-<span class="sourceLineNo">340</span> * Node that contains a set of RemoteProcedures<a name="line.340"></a>
-<span class="sourceLineNo">341</span> */<a name="line.341"></a>
-<span class="sourceLineNo">342</span> protected final class BufferNode extends DelayedContainerWithTimestamp<TRemote><a name="line.342"></a>
-<span class="sourceLineNo">343</span> implements RemoteNode<TEnv, TRemote> {<a name="line.343"></a>
-<span class="sourceLineNo">344</span> private Set<RemoteProcedure> operations;<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span> protected BufferNode(final TRemote key) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> super(key, 0);<a name="line.347"></a>
-<span class="sourceLineNo">348</span> }<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span> @Override<a name="line.350"></a>
-<span class="sourceLineNo">351</span> public TRemote getKey() {<a name="line.351"></a>
-<span class="sourceLineNo">352</span> return getObject();<a name="line.352"></a>
-<span class="sourceLineNo">353</span> }<a name="line.353"></a>
-<span class="sourceLineNo">354</span><a name="line.354"></a>
-<span class="sourceLineNo">355</span> @Override<a name="line.355"></a>
-<span class="sourceLineNo">356</span> public synchronized void add(final RemoteProcedure operation) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span> if (this.operations == null) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> this.operations = new HashSet<>();<a name="line.358"></a>
-<span class="sourceLineNo">359</span> setTimeout(EnvironmentEdgeManager.currentTime() + operationDelay);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> timeoutExecutor.add(this);<a name="line.360"></a>
-<span class="sourceLineNo">361</span> }<a name="line.361"></a>
-<span class="sourceLineNo">362</span> this.operations.add(operation);<a name="line.362"></a>
-<span class="sourceLineNo">363</span> if (this.operations.size() > queueMaxSize) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span> timeoutExecutor.remove(this);<a name="line.364"></a>
-<span class="sourceLineNo">365</span> dispatch();<a name="line.365"></a>
-<span class="sourceLineNo">366</span> }<a name="line.366"></a>
-<span class="sourceLineNo">367</span> }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span> @Override<a name="line.369"></a>
-<span class="sourceLineNo">370</span> public synchronized void dispatch() {<a name="line.370"></a>
-<span class="sourceLineNo">371</span> if (operations != null) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span> remoteDispatch(getKey(), operations);<a name="line.372"></a>
-<span class="sourceLineNo">373</span> this.operations = null;<a name="line.373"></a>
-<span class="sourceLineNo">374</span> }<a name="line.374"></a>
-<span class="sourceLineNo">375</span> }<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span> public synchronized void abortOperationsInQueue() {<a name="line.377"></a>
-<span class="sourceLineNo">378</span> if (operations != null) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span> abortPendingOperations(getKey(), operations);<a name="line.379"></a>
-<span class="sourceLineNo">380</span> this.operations = null;<a name="line.380"></a>
-<span class="sourceLineNo">381</span> }<a name="line.381"></a>
-<span class="sourceLineNo">382</span> }<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span> @Override<a name="line.384"></a>
-<span class="sourceLineNo">385</span> public String toString() {<a name="line.385"></a>
-<span class="sourceLineNo">386</span> return super.toString() + ", operations=" + this.operations;<a name="line.386"></a>
-<span class="sourceLineNo">387</span> }<a name="line.387"></a>
-<span class="sourceLineNo">388</span> }<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span> /**<a name="line.390"></a>
-<span class="sourceLineNo">391</span> * Delayed object that holds a FutureTask.<a name="line.391"></a>
-<span class="sourceLineNo">392</span> * used to submit something later to the thread-pool.<a name="line.392"></a>
-<span class="sourceLineNo">393</span> */<a name="line.393"></a>
-<span class="sourceLineNo">394</span> private static final class DelayedTask extends DelayedContainerWithTimestamp<FutureTask<Void>> {<a name="line.394"></a>
-<span class="sourceLineNo">395</span> public DelayedTask(final FutureTask<Void> task, final long delay, final TimeUnit unit) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span> super(task, EnvironmentEdgeManager.currentTime() + unit.toMillis(delay));<a name="line.396"></a>
-<span class="sourceLineNo">397</span> }<a name="line.397"></a>
-<span class="sourceLineNo">398</span> }<a name="line.398"></a>
-<span class="sourceLineNo">399</span>}<a name="line.399"></a>
+<span class="sourceLineNo">171</span> throw new NullTargetServerDispatchException(rp.toString());<a name="line.171"></a>
+<span class="sourceLineNo">172</span> }<a name="line.172"></a>
+<span class="sourceLineNo">173</span> BufferNode node = nodeMap.get(key);<a name="line.173"></a>
+<span class="sourceLineNo">174</span> if (node == null) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span> // If null here, it means node has been removed because it crashed. This happens when server<a name="line.175"></a>
+<span class="sourceLineNo">176</span> // is expired in ServerManager. ServerCrashProcedure may or may not have run.<a name="line.176"></a>
+<span class="sourceLineNo">177</span> throw new NoServerDispatchException(key.toString() + "; " + rp.toString());<a name="line.177"></a>
+<span class="sourceLineNo">178</span> }<a name="line.178"></a>
+<span class="sourceLineNo">179</span> node.add(rp);<a name="line.179"></a>
+<span class="sourceLineNo">180</span> // Check our node still in the map; could have been removed by #removeNode.<a name="line.180"></a>
+<span class="sourceLineNo">181</span> if (!nodeMap.containsValue(node)) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span> throw new NoNodeDispatchException(key.toString() + "; " + rp.toString());<a name="line.182"></a>
+<span class="sourceLineNo">183</span> }<a name="line.183"></a>
+<span class="sourceLineNo">184</span> }<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span> /**<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * Remove a remote node<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * @param key the node identifier<a name="line.188"></a>
+<span class="sourceLineNo">189</span> */<a name="line.189"></a>
+<span class="sourceLineNo">190</span> public boolean removeNode(final TRemote key) {<a name="line.190"></a>
+<span class="sourceLineNo">191</span> final BufferNode node = nodeMap.remove(key);<a name="line.191"></a>
+<span class="sourceLineNo">192</span> if (node == null) return false;<a name="line.192"></a>
+<span class="sourceLineNo">193</span> node.abortOperationsInQueue();<a name="line.193"></a>
+<span class="sourceLineNo">194</span> return true;<a name="line.194"></a>
+<span class="sourceLineNo">195</span> }<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span> // ============================================================================================<a name="line.197"></a>
+<span class="sourceLineNo">198</span> // Task Helpers<a name="line.198"></a>
+<span class="sourceLineNo">199</span> // ============================================================================================<a name="line.199"></a>
+<span class="sourceLineNo">200</span> protected Future<Void> submitTask(Callable<Void> task) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span> return threadPool.submit(task);<a name="line.201"></a>
+<span class="sourceLineNo">202</span> }<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span> protected Future<Void> submitTask(Callable<Void> task, long delay, TimeUnit unit) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span> final FutureTask<Void> futureTask = new FutureTask(task);<a name="line.205"></a>
+<span class="sourceLineNo">206</span> timeoutExecutor.add(new DelayedTask(futureTask, delay, unit));<a name="line.206"></a>
+<span class="sourceLineNo">207</span> return futureTask;<a name="line.207"></a>
+<span class="sourceLineNo">208</span> }<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span> protected abstract void remoteDispatch(TRemote key, Set<RemoteProcedure> operations);<a name="line.210"></a>
+<span class="sourceLineNo">211</span> protected abstract void abortPendingOperations(TRemote key, Set<RemoteProcedure> operations);<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span> /**<a name="line.213"></a>
+<span class="sourceLineNo">214</span> * Data structure with reference to remote operation.<a name="line.214"></a>
+<span class="sourceLineNo">215</span> */<a name="line.215"></a>
+<span class="sourceLineNo">216</span> public static abstract class RemoteOperation {<a name="line.216"></a>
+<span class="sourceLineNo">217</span> private final RemoteProcedure remoteProcedure;<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span> protected RemoteOperation(final RemoteProcedure remoteProcedure) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span> this.remoteProcedure = remoteProcedure;<a name="line.220"></a>
+<span class="sourceLineNo">221</span> }<a name="line.221"></a>
+<span class="sourceLineNo">222</span><a name="line.222"></a>
+<span class="sourceLineNo">223</span> public RemoteProcedure getRemoteProcedure() {<a name="line.223"></a>
+<span class="sourceLineNo">224</span> return remoteProcedure;<a name="line.224"></a>
+<span class="sourceLineNo">225</span> }<a name="line.225"></a>
+<span class="sourceLineNo">226</span> }<a name="line.226"></a>
+<span class="sourceLineNo">227</span><a name="line.227"></a>
+<span class="sourceLineNo">228</span> /**<a name="line.228"></a>
+<span class="sourceLineNo">229</span> * Remote procedure reference.<a name="line.229"></a>
+<span class="sourceLineNo">230</span> */<a name="line.230"></a>
+<span class="sourceLineNo">231</span> public interface RemoteProcedure<TEnv, TRemote> {<a name="line.231"></a>
+<span class="sourceLineNo">232</span> /**<a name="line.232"></a>
+<span class="sourceLineNo">233</span> * For building the remote operation.<a name="line.233"></a>
+<span class="sourceLineNo">234</span> */<a name="line.234"></a>
+<span class="sourceLineNo">235</span> RemoteOperation remoteCallBuild(TEnv env, TRemote remote);<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span> /**<a name="line.237"></a>
+<span class="sourceLineNo">238</span> * Called when the executeProcedure call is failed.<a name="line.238"></a>
+<span class="sourceLineNo">239</span> */<a name="line.239"></a>
+<span class="sourceLineNo">240</span> void remoteCallFailed(TEnv env, TRemote remote, IOException exception);<a name="line.240"></a>
+<span class="sourceLineNo">241</span><a name="line.241"></a>
+<span class="sourceLineNo">242</span> /**<a name="line.242"></a>
+<span class="sourceLineNo">243</span> * Called when RS tells the remote procedure is succeeded through the<a name="line.243"></a>
+<span class="sourceLineNo">244</span> * {@code reportProcedureDone} method.<a name="line.244"></a>
+<span class="sourceLineNo">245</span> */<a name="line.245"></a>
+<span class="sourceLineNo">246</span> void remoteOperationCompleted(TEnv env);<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span> /**<a name="line.248"></a>
+<span class="sourceLineNo">249</span> * Called when RS tells the remote procedure is failed through the {@code reportProcedureDone}<a name="line.249"></a>
+<span class="sourceLineNo">250</span> * method.<a name="line.250"></a>
+<span class="sourceLineNo">251</span> */<a name="line.251"></a>
+<span class="sourceLineNo">252</span> void remoteOperationFailed(TEnv env, RemoteProcedureException error);<a name="line.252"></a>
+<span class="sourceLineNo">253</span> }<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span> /**<a name="line.255"></a>
+<span class="sourceLineNo">256</span> * Account of what procedures are running on remote node.<a name="line.256"></a>
+<span class="sourceLineNo">257</span> * @param <TEnv><a name="line.257"></a>
+<span class="sourceLineNo">258</span> * @param <TRemote><a name="line.258"></a>
+<span class="sourceLineNo">259</span> */<a name="line.259"></a>
+<span class="sourceLineNo">260</span> public interface RemoteNode<TEnv, TRemote> {<a name="line.260"></a>
+<span class="sourceLineNo">261</span> TRemote getKey();<a name="line.261"></a>
+<span class="sourceLineNo">262</span> void add(RemoteProcedure<TEnv, TRemote> operation);<a name="line.262"></a>
+<span class="sourceLineNo">263</span> void dispatch();<a name="line.263"></a>
+<span class="sourceLineNo">264</span> }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span> protected ArrayListMultimap<Class<?>, RemoteOperation> buildAndGroupRequestByType(final TEnv env,<a name="line.266"></a>
+<span class="sourceLineNo">267</span> final TRemote remote, final Set<RemoteProcedure> remoteProcedures) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span> final ArrayListMultimap<Class<?>, RemoteOperation> requestByType = ArrayListMultimap.create();<a name="line.268"></a>
+<span class="sourceLineNo">269</span> for (RemoteProcedure proc: remoteProcedures) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span> RemoteOperation operation = proc.remoteCallBuild(env, remote);<a name="line.270"></a>
+<span class="sourceLineNo">271</span> requestByType.put(operation.getClass(), operation);<a name="line.271"></a>
+<span class="sourceLineNo">272</span> }<a name="line.272"></a>
+<span class="sourceLineNo">273</span> return requestByType;<a name="line.273"></a>
+<span class="sourceLineNo">274</span> }<a name="line.274"></a>
+<span class="sourceLineNo">275</span><a name="line.275"></a>
+<span class="sourceLineNo">276</span> protected <T extends RemoteOperation> List<T> fetchType(<a name="line.276"></a>
+<span class="sourceLineNo">277</span> final ArrayListMultimap<Class<?>, RemoteOperation> requestByType, final Class<T> type) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span> return (List<T>)requestByType.removeAll(type);<a name="line.278"></a>
+<span class="sourceLineNo">279</span> }<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span> // ============================================================================================<a name="line.281"></a>
+<span class="sourceLineNo">282</span> // Timeout Helpers<a name="line.282"></a>
+<span class="sourceLineNo">283</span> // ============================================================================================<a name="line.283"></a>
+<span class="sourceLineNo">284</span> private final class TimeoutExecutorThread extends Thread {<a name="line.284"></a>
+<span class="sourceLineNo">285</span> private final DelayQueue<DelayedWithTimeout> queue = new DelayQueue<DelayedWithTimeout>();<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span> public TimeoutExecutorThread() {<a name="line.287"></a>
+<span class="sourceLineNo">288</span> super("ProcedureDispatcherTimeoutThread");<a name="line.288"></a>
+<span class="sourceLineNo">289</span> }<a name="line.289"></a>
+<span class="sourceLineNo">290</span><a name="line.290"></a>
+<span class="sourceLineNo">291</span> @Override<a name="line.291"></a>
+<span class="sourceLineNo">292</span> public void run() {<a name="line.292"></a>
+<span class="sourceLineNo">293</span> while (running.get()) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span> final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.294"></a>
+<span class="sourceLineNo">295</span> if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.295"></a>
+<span class="sourceLineNo">296</span> // the executor may be shutting down, and the task is just the shutdown request<a name="line.296"></a>
+<span class="sourceLineNo">297</span> continue;<a name="line.297"></a>
+<span class="sourceLineNo">298</span> }<a name="line.298"></a>
+<span class="sourceLineNo">299</span> if (task instanceof DelayedTask) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span> threadPool.execute(((DelayedTask)task).getObject());<a name="line.300"></a>
+<span class="sourceLineNo">301</span> } else {<a name="line.301"></a>
+<span class="sourceLineNo">302</span> ((BufferNode)task).dispatch();<a name="line.302"></a>
+<span class="sourceLineNo">303</span> }<a name="line.303"></a>
+<span class="sourceLineNo">304</span> }<a name="line.304"></a>
+<span class="sourceLineNo">305</span> }<a name="line.305"></a>
+<span class="sourceLineNo">306</span><a name="line.306"></a>
+<span class="sourceLineNo">307</span> public void add(final DelayedWithTimeout delayed) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span> queue.add(delayed);<a name="line.308"></a>
+<span class="sourceLineNo">309</span> }<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span> public void remove(final DelayedWithTimeout delayed) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span> queue.remove(delayed);<a name="line.312"></a>
+<span class="sourceLineNo">313</span> }<a name="line.313"></a>
+<span class="sourceLineNo">314</span><a name="line.314"></a>
+<span class="sourceLineNo">315</span> public void sendStopSignal() {<a name="line.315"></a>
+<span class="sourceLineNo">316</span> queue.add(DelayedUtil.DELAYED_POISON);<a name="line.316"></a>
+<span class="sourceLineNo">317</span> }<a name="line.317"></a>
+<span class="sourceLineNo">318</span><a name="line.318"></a>
+<span class="sourceLineNo">319</span> public void awaitTermination() {<a name="line.319"></a>
+<span class="sourceLineNo">320</span> try {<a name="line.320"></a>
+<span class="sourceLineNo">321</span> final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.321"></a>
+<span class="sourceLineNo">322</span> for (int i = 0; isAlive(); ++i) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span> sendStopSignal();<a name="line.323"></a>
+<span class="sourceLineNo">324</span> join(250);<a name="line.324"></a>
+<span class="sourceLineNo">325</span> if (i > 0 && (i % 8) == 0) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span> LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.326"></a>
+<span class="sourceLineNo">327</span> StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.327"></a>
+<span class="sourceLineNo">328</span> }<a name="line.328"></a>
+<span class="sourceLineNo">329</span> }<a name="line.329"></a>
+<span class="sourceLineNo">330</span> } catch (InterruptedException e) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span> LOG.warn(getName() + " join wait got interrupted", e);<a name="line.331"></a>
+<span class="sourceLineNo">332</span> }<a name="line.332"></a>
+<span class="sourceLineNo">333</span> }<a name="line.333"></a>
+<span class="sourceLineNo">334</span> }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span> // ============================================================================================<a name="line.336"></a>
+<span class="sourceLineNo">337</span> // Internals Helpers<a name="line.337"></a>
+<span class="sourceLineNo">338</span> // ============================================================================================<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span> /**<a name="line.340"></a>
+<span class="sourceLineNo">341</span> * Node that contains a set of RemoteProcedures<a name="line.341"></a>
+<span class="sourceLineNo">342</span> */<a name="line.342"></a>
+<span class="sourceLineNo">343</span> protected final class BufferNode extends DelayedContainerWithTimestamp<TRemote><a name="line.343"></a>
+<span class="sourceLineNo">344</span> implements RemoteNode<TEnv, TRemote> {<a name="line.344"></a>
+<span class="sourceLineNo">345</span> private Set<RemoteProcedure> operations;<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span> protected BufferNode(final TRemote key) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span> super(key, 0);<a name="line.348"></a>
+<span class="sourceLineNo">349</span> }<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span> @Override<a name="line.351"></a>
+<span class="sourceLineNo">352</span> public TRemote getKey() {<a name="line.352"></a>
+<span class="sourceLineNo">353</span> return getObject();<a name="line.353"></a>
+<span class="sourceLineNo">354</span> }<a name="line.354"></a>
+<span class="sourceLineNo">355</span><a name="line.355"></a>
+<span class="sourceLineNo">356</span> @Override<a name="line.356"></a>
+<span class="sourceLineNo">357</span> public synchronized void add(final RemoteProcedure operation) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span> if (this.operations == null) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span> this.operations = new HashSet<>();<a name="line.359"></a>
+<span class="sourceLineNo">360</span> setTimeout(EnvironmentEdgeManager.currentTime() + operationDelay);<a name="line.360"></a>
+<span class="sourceLineNo">361</span> timeoutExecutor.add(this);<a name="line.361"></a>
+<span class="sourceLineNo">362</span> }<a name="line.362"></a>
+<span class="sourceLineNo">363</span> this.operations.add(operation);<a name="line.363"></a>
+<span class="sourceLineNo">364</span> if (this.operations.size() > queueMaxSize) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span> timeoutExecutor.remove(this);<a name="line.365"></a>
+<span class="sourceLineNo">366</span> dispatch();<a name="line.366"></a>
+<span class="sourceLineNo">367</span> }<a name="line.367"></a>
+<span class="sourceLineNo">368</span> }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span> @Override<a name="line.370"></a>
+<span class="sourceLineNo">371</span> public synchronized void dispatch() {<a name="line.371"></a>
+<span class="sourceLineNo">372</span> if (operations != null) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> remoteDispatch(getKey(), operations);<a name="line.373"></a>
+<span class="sourceLineNo">374</span> this.operations = null;<a name="line.374"></a>
+<span class="sourceLineNo">375</span> }<a name="line.375"></a>
+<span class="sourceLineNo">376</span> }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span> public synchronized void abortOperationsInQueue() {<a name="line.378"></a>
+<span class="sourceLineNo">379</span> if (operations != null) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span> abortPendingOperations(getKey(), operations);<a name="line.380"></a>
+<span class="sourceLineNo">381</span> this.operations = null;<a name="line.381"></a>
+<span class="sourceLineNo">382</span> }<a name="line.382"></a>
+<span class="sourceLineNo">383</span> }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
+<span class="sourceLineNo">386</span> public String toString() {<a name="line.386"></a>
+<span class="sourceLineNo">387</span> return super.toString() + ", operations=" + this.operations;<a name="line.387"></a>
+<span class="sourceLineNo">388</span> }<a name="line.388"></a>
+<span class="sourceLineNo">389</span> }<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span> /**<a name="line.391"></a>
+<span class="sourceLineNo">392</span> * Delayed object that holds a FutureTask.<a name="line.392"></a>
+<span class="sourceLineNo">393</span> * used to submit something later to the thread-pool.<a name="line.393"></a>
+<span class="sourceLineNo">394</span> */<a name="line.394"></a>
+<span class="sourceLineNo">395</span> private static final class DelayedTask extends DelayedContainerWithTimestamp<FutureTask<Void>> {<a name="line.395"></a>
+<span class="sourceLineNo">396</span> public DelayedTask(final FutureTask<Void> task, final long delay, final TimeUnit unit) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span> super(task, EnvironmentEdgeManager.currentTime() + unit.toMillis(delay));<a name="line.397"></a>
+<span class="sourceLineNo">398</span> }<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>}<a name="line.400"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html
index 6a8a474..b1d561d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html
@@ -287,7 +287,16 @@
<span class="sourceLineNo">279</span> }<a name="line.279"></a>
<span class="sourceLineNo">280</span> return sb.toString();<a name="line.280"></a>
<span class="sourceLineNo">281</span> }<a name="line.281"></a>
-<span class="sourceLineNo">282</span>}<a name="line.282"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span> @Override<a name="line.283"></a>
+<span class="sourceLineNo">284</span> List<KeyValueScanner> getSnapshotScanners() {<a name="line.284"></a>
+<span class="sourceLineNo">285</span> List<KeyValueScanner> list = new ArrayList<>(this.segments.size());<a name="line.285"></a>
+<span class="sourceLineNo">286</span> for (ImmutableSegment segment: this.segments) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span> list.add(new SnapshotSegmentScanner(segment));<a name="line.287"></a>
+<span class="sourceLineNo">288</span> }<a name="line.288"></a>
+<span class="sourceLineNo">289</span> return list;<a name="line.289"></a>
+<span class="sourceLineNo">290</span> }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>}<a name="line.291"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ImmutableSegment.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ImmutableSegment.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ImmutableSegment.html
index 8783566..786e169 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ImmutableSegment.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ImmutableSegment.html
@@ -92,7 +92,11 @@
<span class="sourceLineNo">084</span> res += "Num uniques "+getNumUniqueKeys()+"; ";<a name="line.84"></a>
<span class="sourceLineNo">085</span> return res;<a name="line.85"></a>
<span class="sourceLineNo">086</span> }<a name="line.86"></a>
-<span class="sourceLineNo">087</span>}<a name="line.87"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span> List<KeyValueScanner> getSnapshotScanners() {<a name="line.88"></a>
+<span class="sourceLineNo">089</span> return Collections.singletonList(new SnapshotSegmentScanner(this));<a name="line.89"></a>
+<span class="sourceLineNo">090</span> }<a name="line.90"></a>
+<span class="sourceLineNo">091</span>}<a name="line.91"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.html
index b8b1115..d6ef1ac 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.html
@@ -48,7 +48,7 @@
<span class="sourceLineNo">040</span> this.cellsCount = snapshot.getCellsCount();<a name="line.40"></a>
<span class="sourceLineNo">041</span> this.memStoreSize = snapshot.getMemStoreSize();<a name="line.41"></a>
<span class="sourceLineNo">042</span> this.timeRangeTracker = snapshot.getTimeRangeTracker();<a name="line.42"></a>
-<span class="sourceLineNo">043</span> this.scanners = snapshot.getScanners(Long.MAX_VALUE);<a name="line.43"></a>
+<span class="sourceLineNo">043</span> this.scanners = snapshot.getSnapshotScanners();<a name="line.43"></a>
<span class="sourceLineNo">044</span> this.tagsPresent = snapshot.isTagsPresent();<a name="line.44"></a>
<span class="sourceLineNo">045</span> }<a name="line.45"></a>
<span class="sourceLineNo">046</span><a name="line.46"></a>
@@ -103,8 +103,7 @@
<span class="sourceLineNo">095</span> }<a name="line.95"></a>
<span class="sourceLineNo">096</span> }<a name="line.96"></a>
<span class="sourceLineNo">097</span> }<a name="line.97"></a>
-<span class="sourceLineNo">098</span><a name="line.98"></a>
-<span class="sourceLineNo">099</span>}<a name="line.99"></a>
+<span class="sourceLineNo">098</span>}<a name="line.98"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html
new file mode 100644
index 0000000..32260a1
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/SnapshotSegmentScanner.html
@@ -0,0 +1,173 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
+<span class="sourceLineNo">002</span> *<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * or more contributor license agreements. See the NOTICE file<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * distributed with this work for additional information<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * regarding copyright ownership. The ASF licenses this file<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * to you under the Apache License, Version 2.0 (the<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * "License"); you may not use this file except in compliance<a name="line.8"></a>
+<span class="sourceLineNo">009</span> * with the License. You may obtain a copy of the License at<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *<a name="line.10"></a>
+<span class="sourceLineNo">011</span> * http://www.apache.org/licenses/LICENSE-2.0<a name="line.11"></a>
+<span class="sourceLineNo">012</span> *<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * Unless required by applicable law or agreed to in writing, software<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * See the License for the specific language governing permissions and<a name="line.16"></a>
+<span class="sourceLineNo">017</span> * limitations under the License.<a name="line.17"></a>
+<span class="sourceLineNo">018</span> */<a name="line.18"></a>
+<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.regionserver;<a name="line.19"></a>
+<span class="sourceLineNo">020</span><a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.util.Iterator;<a name="line.21"></a>
+<span class="sourceLineNo">022</span><a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.Cell;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span><a name="line.26"></a>
+<span class="sourceLineNo">027</span>/**<a name="line.27"></a>
+<span class="sourceLineNo">028</span> * A basic SegmentScanner used against an ImmutableScanner snapshot<a name="line.28"></a>
+<span class="sourceLineNo">029</span> * Used flushing where we do a single pass, no reverse scanning or<a name="line.29"></a>
+<span class="sourceLineNo">030</span> * inserts happening. Its a dumbed-down Scanner that can go fast.<a name="line.30"></a>
+<span class="sourceLineNo">031</span> * Like {@link org.apache.hadoop.hbase.util.CollectionBackedScanner}<a name="line.31"></a>
+<span class="sourceLineNo">032</span> * (but making it know about Segments was onerous).<a name="line.32"></a>
+<span class="sourceLineNo">033</span> */<a name="line.33"></a>
+<span class="sourceLineNo">034</span>@InterfaceAudience.Private<a name="line.34"></a>
+<span class="sourceLineNo">035</span>public class SnapshotSegmentScanner extends NonReversedNonLazyKeyValueScanner {<a name="line.35"></a>
+<span class="sourceLineNo">036</span> private final ImmutableSegment segment;<a name="line.36"></a>
+<span class="sourceLineNo">037</span> private Iterator<Cell> iter;<a name="line.37"></a>
+<span class="sourceLineNo">038</span> private Cell current;<a name="line.38"></a>
+<span class="sourceLineNo">039</span><a name="line.39"></a>
+<span class="sourceLineNo">040</span> public SnapshotSegmentScanner(ImmutableSegment segment) {<a name="line.40"></a>
+<span class="sourceLineNo">041</span> this.segment = segment;<a name="line.41"></a>
+<span class="sourceLineNo">042</span> this.segment.incScannerCount();<a name="line.42"></a>
+<span class="sourceLineNo">043</span> this.iter = createIterator(this.segment);<a name="line.43"></a>
+<span class="sourceLineNo">044</span> if (this.iter.hasNext()){<a name="line.44"></a>
+<span class="sourceLineNo">045</span> this.current = this.iter.next();<a name="line.45"></a>
+<span class="sourceLineNo">046</span> }<a name="line.46"></a>
+<span class="sourceLineNo">047</span> }<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span> private static Iterator<Cell> createIterator(Segment segment) {<a name="line.49"></a>
+<span class="sourceLineNo">050</span> return segment.getCellSet().iterator();<a name="line.50"></a>
+<span class="sourceLineNo">051</span> }<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span> @Override<a name="line.53"></a>
+<span class="sourceLineNo">054</span> public Cell peek() {<a name="line.54"></a>
+<span class="sourceLineNo">055</span> return current;<a name="line.55"></a>
+<span class="sourceLineNo">056</span> }<a name="line.56"></a>
+<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">058</span> @Override<a name="line.58"></a>
+<span class="sourceLineNo">059</span> public Cell next() {<a name="line.59"></a>
+<span class="sourceLineNo">060</span> Cell oldCurrent = current;<a name="line.60"></a>
+<span class="sourceLineNo">061</span> if(iter.hasNext()){<a name="line.61"></a>
+<span class="sourceLineNo">062</span> current = iter.next();<a name="line.62"></a>
+<span class="sourceLineNo">063</span> } else {<a name="line.63"></a>
+<span class="sourceLineNo">064</span> current = null;<a name="line.64"></a>
+<span class="sourceLineNo">065</span> }<a name="line.65"></a>
+<span class="sourceLineNo">066</span> return oldCurrent;<a name="line.66"></a>
+<span class="sourceLineNo">067</span> }<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span> @Override<a name="line.69"></a>
+<span class="sourceLineNo">070</span> public boolean seek(Cell seekCell) {<a name="line.70"></a>
+<span class="sourceLineNo">071</span> // restart iterator<a name="line.71"></a>
+<span class="sourceLineNo">072</span> this.iter = createIterator(this.segment);<a name="line.72"></a>
+<span class="sourceLineNo">073</span> return reseek(seekCell);<a name="line.73"></a>
+<span class="sourceLineNo">074</span> }<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span> @Override<a name="line.76"></a>
+<span class="sourceLineNo">077</span> public boolean reseek(Cell seekCell) {<a name="line.77"></a>
+<span class="sourceLineNo">078</span> while (this.iter.hasNext()){<a name="line.78"></a>
+<span class="sourceLineNo">079</span> Cell next = this.iter.next();<a name="line.79"></a>
+<span class="sourceLineNo">080</span> int ret = this.segment.getComparator().compare(next, seekCell);<a name="line.80"></a>
+<span class="sourceLineNo">081</span> if (ret >= 0) {<a name="line.81"></a>
+<span class="sourceLineNo">082</span> this.current = next;<a name="line.82"></a>
+<span class="sourceLineNo">083</span> return true;<a name="line.83"></a>
+<span class="sourceLineNo">084</span> }<a name="line.84"></a>
+<span class="sourceLineNo">085</span> }<a name="line.85"></a>
+<span class="sourceLineNo">086</span> return false;<a name="line.86"></a>
+<span class="sourceLineNo">087</span> }<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span> /**<a name="line.89"></a>
+<span class="sourceLineNo">090</span> * @see KeyValueScanner#getScannerOrder()<a name="line.90"></a>
+<span class="sourceLineNo">091</span> */<a name="line.91"></a>
+<span class="sourceLineNo">092</span> @Override<a name="line.92"></a>
+<span class="sourceLineNo">093</span> public long getScannerOrder() {<a name="line.93"></a>
+<span class="sourceLineNo">094</span> return 0;<a name="line.94"></a>
+<span class="sourceLineNo">095</span> }<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span> @Override<a name="line.97"></a>
+<span class="sourceLineNo">098</span> public void close() {<a name="line.98"></a>
+<span class="sourceLineNo">099</span> this.segment.decScannerCount();<a name="line.99"></a>
+<span class="sourceLineNo">100</span> }<a name="line.100"></a>
+<span class="sourceLineNo">101</span>}<a name="line.101"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>
[35/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html b/devapidocs/org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html
new file mode 100644
index 0000000..505e685
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html
@@ -0,0 +1,282 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NoServerDispatchException (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="NoServerDispatchException (Apache HBase 3.0.0-SNAPSHOT API)";
+ }
+ }
+ catch(err) {
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/NoServerDispatchException.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html" target="_top">Frames</a></li>
+<li><a href="NoServerDispatchException.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Nested | </li>
+<li>Field | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#methods.inherited.from.class.java.lang.Throwable">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#constructor.detail">Constr</a> | </li>
+<li>Method</li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.procedure2</div>
+<h2 title="Class NoServerDispatchException" class="title">Class NoServerDispatchException</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">java.lang.Throwable</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">java.lang.Exception</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">java.io.IOException</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">org.apache.hadoop.hbase.HBaseIOException</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2.FailedRemoteDispatchException</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.procedure2.NoServerDispatchException</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a></dd>
+</dl>
+<hr>
+<br>
+<pre>@InterfaceAudience.Private
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html#line.29">NoServerDispatchException</a>
+extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">FailedRemoteDispatchException</a></pre>
+<div class="block">Used internally signaling failed queue of a remote procedure operation.
+ In particular, no dispatch Node was found for the passed server name
+ key.</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../serialized-form.html#org.apache.hadoop.hbase.procedure2.NoServerDispatchException">Serialized Form</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html#NoServerDispatchException-java.lang.String-">NoServerDispatchException</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> msg)</code> </td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Throwable">
+<!-- -->
+</a>
+<h3>Methods inherited from class java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#addSuppressed-java.lang.Throwable-" title="class or interface in java.lang">addSuppressed</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#fillInStackTrace--" title="class or interface in java.lang">fillInStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#getCause--" title="class or interface in java.lang">getCause</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#getLocalizedMessage--" title="class or interface in java.lang">getLocalizedMessage</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#getMessage--" title="class or interface in java.lang">getMessage</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#getStackTrace--" title="class or
interface in java.lang">getStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#getSuppressed--" title="class or interface in java.lang">getSuppressed</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#initCause-java.lang.Throwable-" title="class or interface in java.lang">initCause</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace--" title="class or interface in java.lang">printStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace-java.io.PrintStream-" title="class or interface in java.lang">printStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace-java.io.PrintWriter-" title="class or interface in java.lang">printStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/
api/java/lang/Throwable.html?is-external=true#setStackTrace-java.lang.StackTraceElement:A-" title="class or interface in java.lang">setStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="NoServerDispatchException-java.lang.String-">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>NoServerDispatchException</h4>
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html#line.30">NoServerDispatchException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> msg)</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/NoServerDispatchException.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html" target="_top">Frames</a></li>
+<li><a href="NoServerDispatchException.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Nested | </li>
+<li>Field | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#methods.inherited.from.class.java.lang.Throwable">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#constructor.detail">Constr</a> | </li>
+<li>Method</li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html b/devapidocs/org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html
new file mode 100644
index 0000000..3549b3c
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html
@@ -0,0 +1,281 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>NullTargetServerDispatchException (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="NullTargetServerDispatchException (Apache HBase 3.0.0-SNAPSHOT API)";
+ }
+ }
+ catch(err) {
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/NullTargetServerDispatchException.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/OnePhaseProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html" target="_top">Frames</a></li>
+<li><a href="NullTargetServerDispatchException.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Nested | </li>
+<li>Field | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#methods.inherited.from.class.java.lang.Throwable">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#constructor.detail">Constr</a> | </li>
+<li>Method</li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.procedure2</div>
+<h2 title="Class NullTargetServerDispatchException" class="title">Class NullTargetServerDispatchException</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">java.lang.Throwable</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">java.lang.Exception</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">java.io.IOException</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">org.apache.hadoop.hbase.HBaseIOException</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2.FailedRemoteDispatchException</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.procedure2.NullTargetServerDispatchException</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a></dd>
+</dl>
+<hr>
+<br>
+<pre>@InterfaceAudience.Private
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html#line.28">NullTargetServerDispatchException</a>
+extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/FailedRemoteDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">FailedRemoteDispatchException</a></pre>
+<div class="block">Used internally signaling failed queue of a remote procedure operation.
+ The target server passed is null.</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../serialized-form.html#org.apache.hadoop.hbase.procedure2.NullTargetServerDispatchException">Serialized Form</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html#NullTargetServerDispatchException-java.lang.String-">NullTargetServerDispatchException</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> msg)</code> </td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Throwable">
+<!-- -->
+</a>
+<h3>Methods inherited from class java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#addSuppressed-java.lang.Throwable-" title="class or interface in java.lang">addSuppressed</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#fillInStackTrace--" title="class or interface in java.lang">fillInStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#getCause--" title="class or interface in java.lang">getCause</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#getLocalizedMessage--" title="class or interface in java.lang">getLocalizedMessage</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#getMessage--" title="class or interface in java.lang">getMessage</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#getStackTrace--" title="class or
interface in java.lang">getStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#getSuppressed--" title="class or interface in java.lang">getSuppressed</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#initCause-java.lang.Throwable-" title="class or interface in java.lang">initCause</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace--" title="class or interface in java.lang">printStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace-java.io.PrintStream-" title="class or interface in java.lang">printStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace-java.io.PrintWriter-" title="class or interface in java.lang">printStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/
api/java/lang/Throwable.html?is-external=true#setStackTrace-java.lang.StackTraceElement:A-" title="class or interface in java.lang">setStackTrace</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="NullTargetServerDispatchException-java.lang.String-">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>NullTargetServerDispatchException</h4>
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html#line.29">NullTargetServerDispatchException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> msg)</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/NullTargetServerDispatchException.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/OnePhaseProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html" target="_top">Frames</a></li>
+<li><a href="NullTargetServerDispatchException.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Nested | </li>
+<li>Field | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#methods.inherited.from.class.java.lang.Throwable">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li>Field | </li>
+<li><a href="#constructor.detail">Constr</a> | </li>
+<li>Method</li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/procedure2/OnePhaseProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/OnePhaseProcedure.html b/devapidocs/org/apache/hadoop/hbase/procedure2/OnePhaseProcedure.html
index 614679f..a5cbabb 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/OnePhaseProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/OnePhaseProcedure.html
@@ -43,7 +43,7 @@
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Prev Class</span></a></li>
<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
@@ -240,7 +240,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.htm
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Prev Class</span></a></li>
<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.BufferNode.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.BufferNode.html b/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.BufferNode.html
index b3f197e..fad131e 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.BufferNode.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.BufferNode.html
@@ -132,7 +132,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>protected final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#line.342">RemoteProcedureDispatcher.BufferNode</a>
+<pre>protected final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#line.343">RemoteProcedureDispatcher.BufferNode</a>
extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/util/DelayedUtil.DelayedContainerWithTimestamp.html" title="class in org.apache.hadoop.hbase.procedure2.util">DelayedUtil.DelayedContainerWithTimestamp</a><TRemote>
implements <a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteNode</a><TEnv,TRemote></pre>
<div class="block">Node that contains a set of RemoteProcedures</div>
@@ -261,7 +261,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProc
<ul class="blockListLast">
<li class="blockList">
<h4>operations</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.BufferNode.html#line.344">operations</a></pre>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.BufferNode.html#line.345">operations</a></pre>
</li>
</ul>
</li>
@@ -280,7 +280,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProc
<ul class="blockListLast">
<li class="blockList">
<h4>BufferNode</h4>
-<pre>protected <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.BufferNode.html#line.346">BufferNode</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TRemote</a> key)</pre>
+<pre>protected <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.BufferNode.html#line.347">BufferNode</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TRemote</a> key)</pre>
</li>
</ul>
</li>
@@ -297,7 +297,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProc
<ul class="blockList">
<li class="blockList">
<h4>getKey</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TRemote</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.BufferNode.html#line.351">getKey</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TRemote</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.BufferNode.html#line.352">getKey</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html#getKey--">getKey</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteNode</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TEnv</a>,<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TRemote</a> extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TRemote</a>>&
gt;</code></dd>
@@ -310,7 +310,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProc
<ul class="blockList">
<li class="blockList">
<h4>add</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.BufferNode.html#line.356">add</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a> operation)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.BufferNode.html#line.357">add</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a> operation)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html#add-org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure-">add</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteNode</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TEnv</a>,<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TRemote</a> extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html
" title="type parameter in RemoteProcedureDispatcher">TRemote</a>>></code></dd>
@@ -323,7 +323,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProc
<ul class="blockList">
<li class="blockList">
<h4>dispatch</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.BufferNode.html#line.370">dispatch</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.BufferNode.html#line.371">dispatch</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html#dispatch--">dispatch</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteNode</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TEnv</a>,<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TRemote</a> extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TRemote</a>&
gt;></code></dd>
@@ -336,7 +336,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProc
<ul class="blockList">
<li class="blockList">
<h4>abortOperationsInQueue</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.BufferNode.html#line.377">abortOperationsInQueue</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.BufferNode.html#line.378">abortOperationsInQueue</a>()</pre>
</li>
</ul>
<a name="toString--">
@@ -345,7 +345,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProc
<ul class="blockListLast">
<li class="blockList">
<h4>toString</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.BufferNode.html#line.385">toString</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.BufferNode.html#line.386">toString</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/util/DelayedUtil.DelayedContainer.html#toString--">toString</a></code> in class <code><a href="../../../../../org/apache/hadoop/hbase/procedure2/util/DelayedUtil.DelayedContainer.html" title="class in org.apache.hadoop.hbase.procedure2.util">DelayedUtil.DelayedContainer</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TRemote</a> extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TRemote</a>>></code></dd>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.DelayedTask.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.DelayedTask.html b/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.DelayedTask.html
index d3c716b..7341ce9 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.DelayedTask.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.DelayedTask.html
@@ -126,7 +126,7 @@
</dl>
<hr>
<br>
-<pre>private static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#line.394">RemoteProcedureDispatcher.DelayedTask</a>
+<pre>private static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#line.395">RemoteProcedureDispatcher.DelayedTask</a>
extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/util/DelayedUtil.DelayedContainerWithTimestamp.html" title="class in org.apache.hadoop.hbase.procedure2.util">DelayedUtil.DelayedContainerWithTimestamp</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/FutureTask.html?is-external=true" title="class or interface in java.util.concurrent">FutureTask</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>>></pre>
<div class="block">Delayed object that holds a FutureTask.
used to submit something later to the thread-pool.</div>
@@ -209,7 +209,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/util/DelayedU
<ul class="blockListLast">
<li class="blockList">
<h4>DelayedTask</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.DelayedTask.html#line.395">DelayedTask</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/FutureTask.html?is-external=true" title="class or interface in java.util.concurrent">FutureTask</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>> task,
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.DelayedTask.html#line.396">DelayedTask</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/FutureTask.html?is-external=true" title="class or interface in java.util.concurrent">FutureTask</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>> task,
long delay,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a> unit)</pre>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html b/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html
index e646ed1..b7f958d 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#line.259">RemoteProcedureDispatcher.RemoteNode</a><TEnv,TRemote></pre>
+<pre>public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#line.260">RemoteProcedureDispatcher.RemoteNode</a><TEnv,TRemote></pre>
<div class="block">Account of what procedures are running on remote node.</div>
</li>
</ul>
@@ -167,7 +167,7 @@ var activeTableTab = "activeTableTab";
<ul class="blockList">
<li class="blockList">
<h4>getKey</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html" title="type parameter in RemoteProcedureDispatcher.RemoteNode">TRemote</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html#line.260">getKey</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html" title="type parameter in RemoteProcedureDispatcher.RemoteNode">TRemote</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html#line.261">getKey</a>()</pre>
</li>
</ul>
<a name="add-org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure-">
@@ -176,7 +176,7 @@ var activeTableTab = "activeTableTab";
<ul class="blockList">
<li class="blockList">
<h4>add</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html#line.261">add</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html" title="type parameter in RemoteProcedureDispatcher.RemoteNode">TEnv</a>,<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html" title="type parameter in RemoteProcedureDispatcher.RemoteNode">TRemote</a>> operation)</pre>
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html#line.262">add</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html" title="type parameter in RemoteProcedureDispatcher.RemoteNode">TEnv</a>,<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html" title="type parameter in RemoteProcedureDispatcher.RemoteNode">TRemote</a>> operation)</pre>
</li>
</ul>
<a name="dispatch--">
@@ -185,7 +185,7 @@ var activeTableTab = "activeTableTab";
<ul class="blockListLast">
<li class="blockList">
<h4>dispatch</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html#line.262">dispatch</a>()</pre>
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteNode.html#line.263">dispatch</a>()</pre>
</li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html b/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html
index 3726d4c..94f2daa 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public abstract static class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#line.215">RemoteProcedureDispatcher.RemoteOperation</a>
+<pre>public abstract static class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#line.216">RemoteProcedureDispatcher.RemoteOperation</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
<div class="block">Data structure with reference to remote operation.</div>
</li>
@@ -208,7 +208,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>remoteProcedure</h4>
-<pre>private final <a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html#line.216">remoteProcedure</a></pre>
+<pre>private final <a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html#line.217">remoteProcedure</a></pre>
</li>
</ul>
</li>
@@ -225,7 +225,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>RemoteOperation</h4>
-<pre>protected <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html#line.218">RemoteOperation</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a> remoteProcedure)</pre>
+<pre>protected <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html#line.219">RemoteOperation</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a> remoteProcedure)</pre>
</li>
</ul>
</li>
@@ -242,7 +242,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>getRemoteProcedure</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html#line.222">getRemoteProcedure</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html#line.223">getRemoteProcedure</a>()</pre>
</li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html b/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html
index 25b5ec9..09ef96c 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#line.230">RemoteProcedureDispatcher.RemoteProcedure</a><TEnv,TRemote></pre>
+<pre>public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#line.231">RemoteProcedureDispatcher.RemoteProcedure</a><TEnv,TRemote></pre>
<div class="block">Remote procedure reference.</div>
</li>
</ul>
@@ -182,7 +182,7 @@ var activeTableTab = "activeTableTab";
<ul class="blockList">
<li class="blockList">
<h4>remoteCallBuild</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteOperation</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html#line.234">remoteCallBuild</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="type parameter in RemoteProcedureDispatcher.RemoteProcedure">TEnv</a> env,
+<pre><a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteOperation</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html#line.235">remoteCallBuild</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="type parameter in RemoteProcedureDispatcher.RemoteProcedure">TEnv</a> env,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="type parameter in RemoteProcedureDispatcher.RemoteProcedure">TRemote</a> remote)</pre>
<div class="block">For building the remote operation.</div>
</li>
@@ -195,7 +195,7 @@ var activeTableTab = "activeTableTab";
<ul class="blockList">
<li class="blockList">
<h4>remoteCallFailed</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html#line.239">remoteCallFailed</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="type parameter in RemoteProcedureDispatcher.RemoteProcedure">TEnv</a> env,
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html#line.240">remoteCallFailed</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="type parameter in RemoteProcedureDispatcher.RemoteProcedure">TEnv</a> env,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="type parameter in RemoteProcedureDispatcher.RemoteProcedure">TRemote</a> remote,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a> exception)</pre>
<div class="block">Called when the executeProcedure call is failed.</div>
@@ -209,7 +209,7 @@ var activeTableTab = "activeTableTab";
<ul class="blockList">
<li class="blockList">
<h4>remoteOperationCompleted</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html#line.245">remoteOperationCompleted</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="type parameter in RemoteProcedureDispatcher.RemoteProcedure">TEnv</a> env)</pre>
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html#line.246">remoteOperationCompleted</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="type parameter in RemoteProcedureDispatcher.RemoteProcedure">TEnv</a> env)</pre>
<div class="block">Called when RS tells the remote procedure is succeeded through the
<code>reportProcedureDone</code> method.</div>
</li>
@@ -222,7 +222,7 @@ var activeTableTab = "activeTableTab";
<ul class="blockListLast">
<li class="blockList">
<h4>remoteOperationFailed</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html#line.251">remoteOperationFailed</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="type parameter in RemoteProcedureDispatcher.RemoteProcedure">TEnv</a> env,
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html#line.252">remoteOperationFailed</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="type parameter in RemoteProcedureDispatcher.RemoteProcedure">TEnv</a> env,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureException</a> error)</pre>
<div class="block">Called when RS tells the remote procedure is failed through the <code>reportProcedureDone</code>
method.</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.TimeoutExecutorThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.TimeoutExecutorThread.html b/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.TimeoutExecutorThread.html
index 8a62b8f..3ca775e 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.TimeoutExecutorThread.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.TimeoutExecutorThread.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#line.283">RemoteProcedureDispatcher.TimeoutExecutorThread</a>
+<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#line.284">RemoteProcedureDispatcher.TimeoutExecutorThread</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a></pre>
</li>
</ul>
@@ -255,7 +255,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
<ul class="blockListLast">
<li class="blockList">
<h4>queue</h4>
-<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/DelayQueue.html?is-external=true" title="class or interface in java.util.concurrent">DelayQueue</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/util/DelayedUtil.DelayedWithTimeout.html" title="interface in org.apache.hadoop.hbase.procedure2.util">DelayedUtil.DelayedWithTimeout</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.TimeoutExecutorThread.html#line.284">queue</a></pre>
+<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/DelayQueue.html?is-external=true" title="class or interface in java.util.concurrent">DelayQueue</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/util/DelayedUtil.DelayedWithTimeout.html" title="interface in org.apache.hadoop.hbase.procedure2.util">DelayedUtil.DelayedWithTimeout</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.TimeoutExecutorThread.html#line.285">queue</a></pre>
</li>
</ul>
</li>
@@ -272,7 +272,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
<ul class="blockListLast">
<li class="blockList">
<h4>TimeoutExecutorThread</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.TimeoutExecutorThread.html#line.286">TimeoutExecutorThread</a>()</pre>
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.TimeoutExecutorThread.html#line.287">TimeoutExecutorThread</a>()</pre>
</li>
</ul>
</li>
@@ -289,7 +289,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
<ul class="blockList">
<li class="blockList">
<h4>run</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.TimeoutExecutorThread.html#line.291">run</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.TimeoutExecutorThread.html#line.292">run</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true#run--" title="class or interface in java.lang">run</a></code> in interface <code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></code></dd>
@@ -304,7 +304,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
<ul class="blockList">
<li class="blockList">
<h4>add</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.TimeoutExecutorThread.html#line.306">add</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/util/DelayedUtil.DelayedWithTimeout.html" title="interface in org.apache.hadoop.hbase.procedure2.util">DelayedUtil.DelayedWithTimeout</a> delayed)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.TimeoutExecutorThread.html#line.307">add</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/util/DelayedUtil.DelayedWithTimeout.html" title="interface in org.apache.hadoop.hbase.procedure2.util">DelayedUtil.DelayedWithTimeout</a> delayed)</pre>
</li>
</ul>
<a name="remove-org.apache.hadoop.hbase.procedure2.util.DelayedUtil.DelayedWithTimeout-">
@@ -313,7 +313,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
<ul class="blockList">
<li class="blockList">
<h4>remove</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.TimeoutExecutorThread.html#line.310">remove</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/util/DelayedUtil.DelayedWithTimeout.html" title="interface in org.apache.hadoop.hbase.procedure2.util">DelayedUtil.DelayedWithTimeout</a> delayed)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.TimeoutExecutorThread.html#line.311">remove</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/util/DelayedUtil.DelayedWithTimeout.html" title="interface in org.apache.hadoop.hbase.procedure2.util">DelayedUtil.DelayedWithTimeout</a> delayed)</pre>
</li>
</ul>
<a name="sendStopSignal--">
@@ -322,7 +322,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
<ul class="blockList">
<li class="blockList">
<h4>sendStopSignal</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.TimeoutExecutorThread.html#line.314">sendStopSignal</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.TimeoutExecutorThread.html#line.315">sendStopSignal</a>()</pre>
</li>
</ul>
<a name="awaitTermination--">
@@ -331,7 +331,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
<ul class="blockListLast">
<li class="blockList">
<h4>awaitTermination</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.TimeoutExecutorThread.html#line.318">awaitTermination</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.TimeoutExecutorThread.html#line.319">awaitTermination</a>()</pre>
</li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html b/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html
index 0a6a6f1..eb34b2b 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html
@@ -293,7 +293,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
</td>
</tr>
<tr id="i2" class="altColor">
-<td class="colFirst"><code>boolean</code></td>
+<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#addOperationToNode-TRemote-org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure-">addOperationToNode</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TRemote</a> key,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a> rp)</code>
<div class="block">Add a remote rpc.</div>
@@ -604,14 +604,19 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>addOperationToNode</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#line.169">addOperationToNode</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TRemote</a> key,
- <a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a> rp)</pre>
-<div class="block">Add a remote rpc. Be sure to check result for successful add.</div>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#line.168">addOperationToNode</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TRemote</a> key,
+ <a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a> rp)
+ throws <a href="../../../../../org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NullTargetServerDispatchException</a>,
+ <a href="../../../../../org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NoServerDispatchException</a>,
+ <a href="../../../../../org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NoNodeDispatchException</a></pre>
+<div class="block">Add a remote rpc.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>key</code> - the node identifier</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>True if we successfully added the operation.</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/NullTargetServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NullTargetServerDispatchException</a></code></dd>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/NoServerDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NoServerDispatchException</a></code></dd>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/NoNodeDispatchException.html" title="class in org.apache.hadoop.hbase.procedure2">NoNodeDispatchException</a></code></dd>
</dl>
</li>
</ul>
@@ -623,7 +628,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>removeNode</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#line.189">removeNode</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TRemote</a> key)</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#line.190">removeNode</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TRemote</a> key)</pre>
<div class="block">Remove a remote node</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -637,7 +642,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>submitTask</h4>
-<pre>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#line.199">submitTask</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>> task)</pre>
+<pre>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#line.200">submitTask</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>> task)</pre>
</li>
</ul>
<a name="submitTask-java.util.concurrent.Callable-long-java.util.concurrent.TimeUnit-">
@@ -646,7 +651,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>submitTask</h4>
-<pre>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#line.203">submitTask</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>> task,
+<pre>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#line.204">submitTask</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>> task,
long delay,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a> unit)</pre>
</li>
@@ -659,7 +664,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>remoteDispatch</h4>
-<pre>protected abstract void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#line.209">remoteDispatch</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TRemote</a> key,
+<pre>protected abstract void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#line.210">remoteDispatch</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TRemote</a> key,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a>> operations)</pre>
</li>
</ul>
@@ -671,7 +676,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>abortPendingOperations</h4>
-<pre>protected abstract void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#line.210">abortPendingOperations</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TRemote</a> key,
+<pre>protected abstract void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#line.211">abortPendingOperations</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TRemote</a> key,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a>> operations)</pre>
</li>
</ul>
@@ -683,7 +688,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>buildAndGroupRequestByType</h4>
-<pre>protected org.apache.hbase.thirdparty.com.google.common.collect.ArrayListMultimap<<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?>,<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteOperation</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#line.265">buildAndGroupRequestByType</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TEnv</a> env,
+<pre>protected org.apache.hbase.thirdparty.com.google.common.collect.ArrayListMultimap<<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?>,<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteOperation</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#line.266">buildAndGroupRequestByType</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TEnv</a> env,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TRemote</a> remote,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a>> remoteProcedures)</pre>
</li>
@@ -694,7 +699,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>fetchType</h4>
-<pre>protected <T extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteOperation</a>> <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><T> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#line.275">fetchType</a>(org.apache.hbase.thirdparty.com.google.common.collect.ArrayListMultimap<<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?>,<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteOperation</a>> requestByType,
+<pre>protected <T extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteOperation</a>> <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><T> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#line.276">fetchType</a>(org.apache.hbase.thirdparty.com.google.common.collect.ArrayListMultimap<<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><?>,<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteOperation</a>> requestByType,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><T> type)</pre>
</li>
</ul>
[41/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
index 2e64b09..fa29c2b 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
@@ -18,7 +18,7 @@
catch(err) {
}
//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":10,"i64":10,"i65":10,"i66":10,"i67":10,"i68":10,"i69":10,"i70":10,"i71":10,"i72":10,"i73":10,"i74":10,"i75":10,"i76":10,"i77":10,"i78":10,"i79":10,"i80":10,"i81":10,"i82":10,"i83":10,"i84":10,"i85":10,"i86":10,"i87":10,"i88":10,"i89":10,"i90":10,"i91":10,"i92":10,"i93":10,"i94":10,"i95":10,"i96":10,"i97":10,"i98":10,"i99":10,"i100":10,"i101":10,"i102":10,"i103":10,"i104":10,"i105":10,"i106":10,"i107":10,"i108":10,"i
109":10,"i110":10,"i111":10,"i112":10,"i113":10,"i114":10,"i115":10,"i116":10,"i117":10,"i118":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":10,"i64":10,"i65":10,"i66":10,"i67":10,"i68":10,"i69":10,"i70":10,"i71":10,"i72":10,"i73":10,"i74":10,"i75":10,"i76":10,"i77":10,"i78":10,"i79":10,"i80":10,"i81":10,"i82":10,"i83":10,"i84":10,"i85":10,"i86":10,"i87":10,"i88":10,"i89":10,"i90":10,"i91":10,"i92":10,"i93":10,"i94":10,"i95":10,"i96":10,"i97":10,"i98":10,"i99":10,"i100":10,"i101":10,"i102":10,"i103":10,"i104":10,"i105":10,"i106":10,"i107":10,"i108":10,"i
109":10,"i110":10,"i111":10,"i112":10,"i113":10,"i114":10,"i115":10,"i116":10,"i117":10,"i118":10,"i119":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -611,69 +611,75 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</code> </td>
</tr>
<tr id="i55" class="rowColor">
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#isDeadServerProcessed-org.apache.hadoop.hbase.ServerName-">isDeadServerProcessed</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code>
+<div class="block">This is a very particular check.</div>
+</td>
+</tr>
+<tr id="i56" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#isFailoverCleanupDone--">isFailoverCleanupDone</a></span>()</code>
<div class="block">Used by ServerCrashProcedure to make sure AssignmentManager has completed
the failover cleanup before re-assigning regions of dead servers.</div>
</td>
</tr>
-<tr id="i56" class="altColor">
+<tr id="i57" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#isMetaInitialized--">isMetaInitialized</a></span>()</code> </td>
</tr>
-<tr id="i57" class="rowColor">
+<tr id="i58" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#isMetaLoaded--">isMetaLoaded</a></span>()</code> </td>
</tr>
-<tr id="i58" class="altColor">
+<tr id="i59" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#isMetaRegion-byte:A-">isMetaRegion</a></span>(byte[] regionName)</code> </td>
</tr>
-<tr id="i59" class="rowColor">
+<tr id="i60" class="altColor">
<td class="colFirst"><code>private boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#isMetaRegion-org.apache.hadoop.hbase.client.RegionInfo-">isMetaRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</code> </td>
</tr>
-<tr id="i60" class="altColor">
+<tr id="i61" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#isMetaRegionInTransition--">isMetaRegionInTransition</a></span>()</code> </td>
</tr>
-<tr id="i61" class="rowColor">
+<tr id="i62" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#isRunning--">isRunning</a></span>()</code> </td>
</tr>
-<tr id="i62" class="altColor">
+<tr id="i63" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#isTableDisabled-org.apache.hadoop.hbase.TableName-">isTableDisabled</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)</code> </td>
</tr>
-<tr id="i63" class="rowColor">
+<tr id="i64" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#isTableEnabled-org.apache.hadoop.hbase.TableName-">isTableEnabled</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)</code> </td>
</tr>
-<tr id="i64" class="altColor">
+<tr id="i65" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#joinCluster--">joinCluster</a></span>()</code> </td>
</tr>
-<tr id="i65" class="rowColor">
-<td class="colFirst"><code>void</code></td>
+<tr id="i66" class="altColor">
+<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#killRegionServer-org.apache.hadoop.hbase.master.assignment.RegionStates.ServerStateNode-">killRegionServer</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a> serverNode)</code> </td>
</tr>
-<tr id="i66" class="altColor">
-<td class="colFirst"><code>void</code></td>
+<tr id="i67" class="rowColor">
+<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#killRegionServer-org.apache.hadoop.hbase.ServerName-">killRegionServer</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code> </td>
</tr>
-<tr id="i67" class="rowColor">
+<tr id="i68" class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#loadMeta--">loadMeta</a></span>()</code> </td>
</tr>
-<tr id="i68" class="altColor">
+<tr id="i69" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#markRegionAsClosed-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">markRegionAsClosed</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</code> </td>
</tr>
-<tr id="i69" class="rowColor">
+<tr id="i70" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#markRegionAsClosing-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">markRegionAsClosing</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</code> </td>
</tr>
-<tr id="i70" class="altColor">
+<tr id="i71" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#markRegionAsMerged-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-">markRegionAsMerged</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> child,
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
@@ -682,73 +688,73 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<div class="block">When called here, the merge has happened.</div>
</td>
</tr>
-<tr id="i71" class="rowColor">
+<tr id="i72" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#markRegionAsOpened-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">markRegionAsOpened</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</code> </td>
</tr>
-<tr id="i72" class="altColor">
+<tr id="i73" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#markRegionAsOpening-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">markRegionAsOpening</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</code> </td>
</tr>
-<tr id="i73" class="rowColor">
+<tr id="i74" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#markRegionAsSplit-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-">markRegionAsSplit</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> parent,
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> daughterA,
<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> daughterB)</code> </td>
</tr>
-<tr id="i74" class="altColor">
+<tr id="i75" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#move-org.apache.hadoop.hbase.client.RegionInfo-">move</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</code> </td>
</tr>
-<tr id="i75" class="rowColor">
+<tr id="i76" class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a><byte[]></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#moveAsync-org.apache.hadoop.hbase.master.RegionPlan-">moveAsync</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a> regionPlan)</code> </td>
</tr>
-<tr id="i76" class="altColor">
+<tr id="i77" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#offlineRegion-org.apache.hadoop.hbase.client.RegionInfo-">offlineRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</code> </td>
</tr>
-<tr id="i77" class="rowColor">
+<tr id="i78" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#onlineRegion-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-">onlineRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo,
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code> </td>
</tr>
-<tr id="i78" class="altColor">
+<tr id="i79" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#processAssignmentPlans-java.util.HashMap-java.util.HashMap-java.util.List-java.util.List-">processAssignmentPlans</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>> regions,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> retainMap,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> hris,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> servers)</code> </td>
</tr>
-<tr id="i79" class="rowColor">
+<tr id="i80" class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#processAssignQueue--">processAssignQueue</a></span>()</code> </td>
</tr>
-<tr id="i80" class="altColor">
+<tr id="i81" class="rowColor">
<td class="colFirst"><code>private boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#processofflineServersWithOnlineRegions--">processofflineServersWithOnlineRegions</a></span>()</code>
<div class="block">Look at what is in meta and the list of servers that have checked in and make reconciliation.</div>
</td>
</tr>
-<tr id="i81" class="rowColor">
+<tr id="i82" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#queueAssign-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">queueAssign</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</code>
<div class="block">Add the assign operation to the assignment queue.</div>
</td>
</tr>
-<tr id="i82" class="altColor">
+<tr id="i83" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#registerListener-org.apache.hadoop.hbase.master.AssignmentListener-">registerListener</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentListener.html" title="interface in org.apache.hadoop.hbase.master">AssignmentListener</a> listener)</code>
<div class="block">Add the listener to the notification list.</div>
</td>
</tr>
-<tr id="i83" class="rowColor">
+<tr id="i84" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#removeRegionInTransition-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-org.apache.hadoop.hbase.master.assignment.RegionTransitionProcedure-">removeRegionInTransition</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionTransitionProcedure</a> procedure)</code> </td>
</tr>
-<tr id="i84" class="altColor">
+<tr id="i85" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#reportOnlineRegions-org.apache.hadoop.hbase.ServerName-int-java.util.Set-">reportOnlineRegions</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
int versionNumber,
@@ -756,107 +762,107 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<div class="block">the master will call this method when the RS send the regionServerReport().</div>
</td>
</tr>
-<tr id="i85" class="rowColor">
+<tr id="i86" class="altColor">
<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#reportRegionStateTransition-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest-">reportRegionStateTransition</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest req)</code> </td>
</tr>
-<tr id="i86" class="altColor">
+<tr id="i87" class="rowColor">
<td class="colFirst"><code>private boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#reportTransition-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-org.apache.hadoop.hbase.master.assignment.RegionStates.ServerStateNode-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-long-">reportTransition</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a> serverNode,
org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode state,
long seqId)</code> </td>
</tr>
-<tr id="i87" class="rowColor">
+<tr id="i88" class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#sendRegionClosedNotification-org.apache.hadoop.hbase.client.RegionInfo-">sendRegionClosedNotification</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</code> </td>
</tr>
-<tr id="i88" class="altColor">
+<tr id="i89" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#sendRegionOpenedNotification-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-">sendRegionOpenedNotification</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo,
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code> </td>
</tr>
-<tr id="i89" class="rowColor">
+<tr id="i90" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#serverAdded-org.apache.hadoop.hbase.ServerName-">serverAdded</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code>
<div class="block">The server has joined the cluster.</div>
</td>
</tr>
-<tr id="i90" class="altColor">
+<tr id="i91" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#serverRemoved-org.apache.hadoop.hbase.ServerName-">serverRemoved</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</code>
<div class="block">The server was removed from the cluster.</div>
</td>
</tr>
-<tr id="i91" class="rowColor">
+<tr id="i92" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#setFailoverCleanupDone-boolean-">setFailoverCleanupDone</a></span>(boolean b)</code>
<div class="block">Used by ServerCrashProcedure tests verify the ability to suspend the
execution of the ServerCrashProcedure.</div>
</td>
</tr>
-<tr id="i92" class="altColor">
+<tr id="i93" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#setMetaInitialized-org.apache.hadoop.hbase.client.RegionInfo-boolean-">setMetaInitialized</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> metaRegionInfo,
boolean isInitialized)</code> </td>
</tr>
-<tr id="i93" class="rowColor">
+<tr id="i94" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#setRegionNormalizer-org.apache.hadoop.hbase.master.normalizer.RegionNormalizer-">setRegionNormalizer</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizer.html" title="interface in org.apache.hadoop.hbase.master.normalizer">RegionNormalizer</a> normalizer)</code> </td>
</tr>
-<tr id="i94" class="altColor">
+<tr id="i95" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#setRegionStateListener-org.apache.hadoop.hbase.RegionStateListener-">setRegionStateListener</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/RegionStateListener.html" title="interface in org.apache.hadoop.hbase">RegionStateListener</a> listener)</code> </td>
</tr>
-<tr id="i95" class="rowColor">
+<tr id="i96" class="altColor">
<td class="colFirst"><code>private boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#shouldAssignFavoredNodes-org.apache.hadoop.hbase.client.RegionInfo-">shouldAssignFavoredNodes</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> region)</code> </td>
</tr>
-<tr id="i96" class="altColor">
+<tr id="i97" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#start--">start</a></span>()</code> </td>
</tr>
-<tr id="i97" class="rowColor">
+<tr id="i98" class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#startAssignmentThread--">startAssignmentThread</a></span>()</code> </td>
</tr>
-<tr id="i98" class="altColor">
+<tr id="i99" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#stop--">stop</a></span>()</code> </td>
</tr>
-<tr id="i99" class="rowColor">
+<tr id="i100" class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#stopAssignmentThread--">stopAssignmentThread</a></span>()</code> </td>
</tr>
-<tr id="i100" class="altColor">
+<tr id="i101" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#submitServerCrash-org.apache.hadoop.hbase.ServerName-boolean-">submitServerCrash</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
boolean shouldSplitWal)</code> </td>
</tr>
-<tr id="i101" class="rowColor">
+<tr id="i102" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#unassign-org.apache.hadoop.hbase.client.RegionInfo-">unassign</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</code> </td>
</tr>
-<tr id="i102" class="altColor">
+<tr id="i103" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#unassign-org.apache.hadoop.hbase.client.RegionInfo-boolean-">unassign</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo,
boolean forceNewPlan)</code> </td>
</tr>
-<tr id="i103" class="rowColor">
+<tr id="i104" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#undoRegionAsClosing-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">undoRegionAsClosing</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</code> </td>
</tr>
-<tr id="i104" class="altColor">
+<tr id="i105" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#undoRegionAsOpening-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">undoRegionAsOpening</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</code> </td>
</tr>
-<tr id="i105" class="rowColor">
+<tr id="i106" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#unregisterListener-org.apache.hadoop.hbase.master.AssignmentListener-">unregisterListener</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentListener.html" title="interface in org.apache.hadoop.hbase.master">AssignmentListener</a> listener)</code>
<div class="block">Remove the listener from the notification list.</div>
</td>
</tr>
-<tr id="i106" class="altColor">
+<tr id="i107" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#updateRegionMergeTransition-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-">updateRegionMergeTransition</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode state,
@@ -864,11 +870,11 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> hriA,
<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> hriB)</code> </td>
</tr>
-<tr id="i107" class="rowColor">
+<tr id="i108" class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#updateRegionsInTransitionMetrics-org.apache.hadoop.hbase.master.assignment.AssignmentManager.RegionInTransitionStat-">updateRegionsInTransitionMetrics</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager.RegionInTransitionStat</a> ritStat)</code> </td>
</tr>
-<tr id="i108" class="altColor">
+<tr id="i109" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#updateRegionSplitTransition-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-">updateRegionSplitTransition</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode state,
@@ -876,49 +882,49 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> hriA,
<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> hriB)</code> </td>
</tr>
-<tr id="i109" class="rowColor">
+<tr id="i110" class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#updateRegionTransition-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-org.apache.hadoop.hbase.client.RegionInfo-long-">updateRegionTransition</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode state,
<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo,
long seqId)</code> </td>
</tr>
-<tr id="i110" class="altColor">
+<tr id="i111" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#waitForAssignment-org.apache.hadoop.hbase.client.RegionInfo-">waitForAssignment</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</code> </td>
</tr>
-<tr id="i111" class="rowColor">
+<tr id="i112" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#waitForAssignment-org.apache.hadoop.hbase.client.RegionInfo-long-">waitForAssignment</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo,
long timeout)</code> </td>
</tr>
-<tr id="i112" class="altColor">
+<tr id="i113" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#waitMetaInitialized-org.apache.hadoop.hbase.procedure2.Procedure-">waitMetaInitialized</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a> proc)</code> </td>
</tr>
-<tr id="i113" class="rowColor">
+<tr id="i114" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#waitMetaInitialized-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.client.RegionInfo-">waitMetaInitialized</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a> proc,
<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</code> </td>
</tr>
-<tr id="i114" class="altColor">
+<tr id="i115" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#waitMetaLoaded-org.apache.hadoop.hbase.procedure2.Procedure-">waitMetaLoaded</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a> proc)</code> </td>
</tr>
-<tr id="i115" class="rowColor">
+<tr id="i116" class="altColor">
<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#waitOnAssignQueue--">waitOnAssignQueue</a></span>()</code> </td>
</tr>
-<tr id="i116" class="altColor">
+<tr id="i117" class="rowColor">
<td class="colFirst"><code>protected boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#waitServerReportEvent-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.procedure2.Procedure-">waitServerReportEvent</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a> proc)</code> </td>
</tr>
-<tr id="i117" class="rowColor">
+<tr id="i118" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#wakeMetaLoadedEvent--">wakeMetaLoadedEvent</a></span>()</code> </td>
</tr>
-<tr id="i118" class="altColor">
+<tr id="i119" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#wakeServerReportEvent-org.apache.hadoop.hbase.master.assignment.RegionStates.ServerStateNode-">wakeServerReportEvent</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a> serverNode)</code> </td>
</tr>
@@ -1304,7 +1310,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>pendingAssignQueue</h4>
-<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a><<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1629">pendingAssignQueue</a></pre>
+<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a><<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1632">pendingAssignQueue</a></pre>
</li>
</ul>
<a name="assignQueueLock">
@@ -1313,7 +1319,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>assignQueueLock</h4>
-<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReentrantLock</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1630">assignQueueLock</a></pre>
+<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReentrantLock</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1633">assignQueueLock</a></pre>
</li>
</ul>
<a name="assignQueueFullCond">
@@ -1322,7 +1328,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockListLast">
<li class="blockList">
<h4>assignQueueFullCond</h4>
-<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Condition.html?is-external=true" title="class or interface in java.util.concurrent.locks">Condition</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1631">assignQueueFullCond</a></pre>
+<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Condition.html?is-external=true" title="class or interface in java.util.concurrent.locks">Condition</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1634">assignQueueFullCond</a></pre>
</li>
</ul>
</li>
@@ -2172,7 +2178,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>wakeServerReportEvent</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1070">wakeServerReportEvent</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a> serverNode)</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1073">wakeServerReportEvent</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a> serverNode)</pre>
</li>
</ul>
<a name="computeRegionInTransitionStat--">
@@ -2181,7 +2187,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>computeRegionInTransitionStat</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager.RegionInTransitionStat</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1098">computeRegionInTransitionStat</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager.RegionInTransitionStat</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1101">computeRegionInTransitionStat</a>()</pre>
</li>
</ul>
<a name="updateRegionsInTransitionMetrics-org.apache.hadoop.hbase.master.assignment.AssignmentManager.RegionInTransitionStat-">
@@ -2190,7 +2196,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>updateRegionsInTransitionMetrics</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1192">updateRegionsInTransitionMetrics</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager.RegionInTransitionStat</a> ritStat)</pre>
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1195">updateRegionsInTransitionMetrics</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager.RegionInTransitionStat</a> ritStat)</pre>
</li>
</ul>
<a name="handleRegionOverStuckWarningThreshold-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -2199,7 +2205,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>handleRegionOverStuckWarningThreshold</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1198">handleRegionOverStuckWarningThreshold</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1201">handleRegionOverStuckWarningThreshold</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
</li>
</ul>
<a name="joinCluster--">
@@ -2208,7 +2214,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>joinCluster</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1207">joinCluster</a>()
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1210">joinCluster</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -2222,7 +2228,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>loadMeta</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1231">loadMeta</a>()
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1234">loadMeta</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -2236,7 +2242,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>processofflineServersWithOnlineRegions</h4>
-<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1299">processofflineServersWithOnlineRegions</a>()</pre>
+<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1302">processofflineServersWithOnlineRegions</a>()</pre>
<div class="block">Look at what is in meta and the list of servers that have checked in and make reconciliation.
We cannot tell definitively the difference between a clean shutdown and a cluster that has
been crashed down. At this stage of a Master startup, they look the same: they have the
@@ -2266,7 +2272,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>isFailoverCleanupDone</h4>
-<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1353">isFailoverCleanupDone</a>()</pre>
+<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1356">isFailoverCleanupDone</a>()</pre>
<div class="block">Used by ServerCrashProcedure to make sure AssignmentManager has completed
the failover cleanup before re-assigning regions of dead servers. So that
when re-assignment happens, AssignmentManager has proper region states.</div>
@@ -2278,7 +2284,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>setFailoverCleanupDone</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1362">setFailoverCleanupDone</a>(boolean b)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1365">setFailoverCleanupDone</a>(boolean b)</pre>
<div class="block">Used by ServerCrashProcedure tests verify the ability to suspend the
execution of the ServerCrashProcedure.</div>
</li>
@@ -2289,7 +2295,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>getFailoverCleanupEvent</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureEvent.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureEvent</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1367">getFailoverCleanupEvent</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureEvent.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureEvent</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1370">getFailoverCleanupEvent</a>()</pre>
</li>
</ul>
<a name="checkFailoverCleanupCompleted-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -2298,7 +2304,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>checkFailoverCleanupCompleted</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1377">checkFailoverCleanupCompleted</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> hri)
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1380">checkFailoverCleanupCompleted</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> hri)
throws <a href="../../../../../../org/apache/hadoop/hbase/PleaseHoldException.html" title="class in org.apache.hadoop.hbase">PleaseHoldException</a></pre>
<div class="block">Used to check if the failover cleanup is done.
if not we throw PleaseHoldException since we are rebuilding the RegionStates</div>
@@ -2316,7 +2322,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>getNumRegionsOpened</h4>
-<pre>public int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1395">getNumRegionsOpened</a>()</pre>
+<pre>public int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1398">getNumRegionsOpened</a>()</pre>
</li>
</ul>
<a name="submitServerCrash-org.apache.hadoop.hbase.ServerName-boolean-">
@@ -2325,7 +2331,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>submitServerCrash</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1400">submitServerCrash</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1403">submitServerCrash</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
boolean shouldSplitWal)</pre>
</li>
</ul>
@@ -2335,7 +2341,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>offlineRegion</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1409">offlineRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1412">offlineRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
</li>
</ul>
<a name="onlineRegion-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-">
@@ -2344,7 +2350,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>onlineRegion</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1415">onlineRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo,
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1418">onlineRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo,
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
</li>
</ul>
@@ -2354,7 +2360,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>getSnapShotOfAssignment</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1419">getSnapShotOfAssignment</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">R
egionInfo</a>> regions)</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1422">getSnapShotOfAssignment</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">R
egionInfo</a>> regions)</pre>
</li>
</ul>
<a name="getReopenStatus-org.apache.hadoop.hbase.TableName-">
@@ -2363,7 +2369,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>getReopenStatus</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1434">getReopenStatus</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1437">getReopenStatus</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)</pre>
<div class="block">Used by the client (via master) to identify if all regions have the schema updates</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -2381,7 +2387,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>addRegionInTransition</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1448">addRegionInTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode,
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1451">addRegionInTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionTransitionProcedure</a> procedure)</pre>
</li>
</ul>
@@ -2391,7 +2397,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>removeRegionInTransition</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1453">removeRegionInTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode,
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1456">removeRegionInTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionTransitionProcedure</a> procedure)</pre>
</li>
</ul>
@@ -2401,7 +2407,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>hasRegionsInTransition</h4>
-<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1458">hasRegionsInTransition</a>()</pre>
+<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1461">hasRegionsInTransition</a>()</pre>
</li>
</ul>
<a name="getRegionsInTransition--">
@@ -2410,7 +2416,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>getRegionsInTransition</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1462">getRegionsInTransition</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1465">getRegionsInTransition</a>()</pre>
</li>
</ul>
<a name="getAssignedRegions--">
@@ -2419,7 +2425,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>getAssignedRegions</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1466">getAssignedRegions</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1469">getAssignedRegions</a>()</pre>
</li>
</ul>
<a name="getRegionInfo-byte:A-">
@@ -2428,7 +2434,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>getRegionInfo</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1470">getRegionInfo</a>(byte[] regionName)</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1473">getRegionInfo</a>(byte[] regionName)</pre>
</li>
</ul>
<a name="sendRegionOpenedNotification-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-">
@@ -2437,7 +2443,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>sendRegionOpenedNotification</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1478">sendRegionOpenedNotification</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo,
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1481">sendRegionOpenedNotification</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo,
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
</li>
</ul>
@@ -2447,7 +2453,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>sendRegionClosedNotification</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1488">sendRegionClosedNotification</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1491">sendRegionClosedNotification</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> regionInfo)</pre>
</li>
</ul>
<a name="markRegionAsOpening-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">
@@ -2456,7 +2462,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>markRegionAsOpening</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1497">markRegionAsOpening</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1500">markRegionAsOpening</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -2470,7 +2476,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>undoRegionAsOpening</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1508">undoRegionAsOpening</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1511">undoRegionAsOpening</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</pre>
</li>
</ul>
<a name="markRegionAsOpened-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">
@@ -2479,7 +2485,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>markRegionAsOpened</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1522">markRegionAsOpened</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1525">markRegionAsOpened</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -2493,7 +2499,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>markRegionAsClosing</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1541">markRegionAsClosing</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1544">markRegionAsClosing</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -2507,7 +2513,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>undoRegionAsClosing</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1557">undoRegionAsClosing</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1560">undoRegionAsClosing</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</pre>
</li>
</ul>
<a name="markRegionAsClosed-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">
@@ -2516,7 +2522,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>markRegionAsClosed</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1562">markRegionAsClosed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1565">markRegionAsClosed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -2530,7 +2536,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>markRegionAsSplit</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1574">markRegionAsSplit</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> parent,
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1577">markRegionAsSplit</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> parent,
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> daughterA,
<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> daughterB)
@@ -2547,7 +2553,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>markRegionAsMerged</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1604">markRegionAsMerged</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> child,
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1607">markRegionAsMerged</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> child,
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> mother,
<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> father)
@@ -2570,7 +2576,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>shouldAssignFavoredNodes</h4>
-<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1621">shouldAssignFavoredNodes</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> region)</pre>
+<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1624">shouldAssignFavoredNodes</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> region)</pre>
</li>
</ul>
<a name="queueAssign-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">
@@ -2579,7 +2585,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>queueAssign</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1638">queueAssign</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1641">queueAssign</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> regionNode)</pre>
<div class="block">Add the assign operation to the assignment queue.
The pending assignment operation will be processed,
and each region will be assigned by a server using the balancer.</div>
@@ -2591,7 +2597,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>startAssignmentThread</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1655">startAssignmentThread</a>()</pre>
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1658">startAssignmentThread</a>()</pre>
</li>
</ul>
<a name="stopAssignmentThread--">
@@ -2600,7 +2606,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>stopAssignmentThread</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1673">stopAssignmentThread</a>()</pre>
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1676">stopAssignmentThread</a>()</pre>
</li>
</ul>
<a name="assignQueueSignal--">
@@ -2609,7 +2615,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>assignQueueSignal</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1686">assignQueueSignal</a>()</pre>
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1689">assignQueueSignal</a>()</pre>
</li>
</ul>
<a name="waitOnAssignQueue--">
@@ -2618,7 +2624,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>waitOnAssignQueue</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1696">waitOnAssignQueue</a>()</pre>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a><<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1699">waitOnAssignQueue</a>()</pre>
</li>
</ul>
<a name="processAssignQueue--">
@@ -2627,7 +2633,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>processAssignQueue</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1721">processAssignQueue</a>()</pre>
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1724">processAssignQueue</a>()</pre>
</li>
</ul>
<a name="processAssignmentPlans-java.util.HashMap-java.util.HashMap-java.util.List-java.util.List-">
@@ -2636,7 +2642,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
<ul class="blockList">
<li class="blockList">
<h4>processAssignmentPlans</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1783">processAssignmentPlans</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" t
<TRUNCATED>
[24/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/master/ServerManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/ServerManager.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/ServerManager.html
index a88ff57..6458b43 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/ServerManager.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/ServerManager.html
@@ -565,502 +565,508 @@
<span class="sourceLineNo">557</span> /*<a name="line.557"></a>
<span class="sourceLineNo">558</span> * Expire the passed server. Add it to list of dead servers and queue a<a name="line.558"></a>
<span class="sourceLineNo">559</span> * shutdown processing.<a name="line.559"></a>
-<span class="sourceLineNo">560</span> */<a name="line.560"></a>
-<span class="sourceLineNo">561</span> public synchronized void expireServer(final ServerName serverName) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span> if (serverName.equals(master.getServerName())) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span> if (!(master.isAborted() || master.isStopped())) {<a name="line.563"></a>
-<span class="sourceLineNo">564</span> master.stop("We lost our znode?");<a name="line.564"></a>
-<span class="sourceLineNo">565</span> }<a name="line.565"></a>
-<span class="sourceLineNo">566</span> return;<a name="line.566"></a>
-<span class="sourceLineNo">567</span> }<a name="line.567"></a>
-<span class="sourceLineNo">568</span> if (!master.isServerCrashProcessingEnabled()) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span> LOG.info("Master doesn't enable ServerShutdownHandler during initialization, "<a name="line.569"></a>
-<span class="sourceLineNo">570</span> + "delay expiring server " + serverName);<a name="line.570"></a>
-<span class="sourceLineNo">571</span> // Even we delay expire this server, we still need to handle Meta's RIT<a name="line.571"></a>
-<span class="sourceLineNo">572</span> // that are against the crashed server; since when we do RecoverMetaProcedure,<a name="line.572"></a>
-<span class="sourceLineNo">573</span> // the SCP is not enable yet and Meta's RIT may be suspend forever. See HBase-19287<a name="line.573"></a>
-<span class="sourceLineNo">574</span> master.getAssignmentManager().handleMetaRITOnCrashedServer(serverName);<a name="line.574"></a>
-<span class="sourceLineNo">575</span> this.queuedDeadServers.add(serverName);<a name="line.575"></a>
-<span class="sourceLineNo">576</span> return;<a name="line.576"></a>
-<span class="sourceLineNo">577</span> }<a name="line.577"></a>
-<span class="sourceLineNo">578</span> if (this.deadservers.isDeadServer(serverName)) {<a name="line.578"></a>
-<span class="sourceLineNo">579</span> // TODO: Can this happen? It shouldn't be online in this case?<a name="line.579"></a>
-<span class="sourceLineNo">580</span> LOG.warn("Expiration of " + serverName +<a name="line.580"></a>
-<span class="sourceLineNo">581</span> " but server shutdown already in progress");<a name="line.581"></a>
-<span class="sourceLineNo">582</span> return;<a name="line.582"></a>
-<span class="sourceLineNo">583</span> }<a name="line.583"></a>
-<span class="sourceLineNo">584</span> moveFromOnlineToDeadServers(serverName);<a name="line.584"></a>
-<span class="sourceLineNo">585</span><a name="line.585"></a>
-<span class="sourceLineNo">586</span> // If cluster is going down, yes, servers are going to be expiring; don't<a name="line.586"></a>
-<span class="sourceLineNo">587</span> // process as a dead server<a name="line.587"></a>
-<span class="sourceLineNo">588</span> if (isClusterShutdown()) {<a name="line.588"></a>
-<span class="sourceLineNo">589</span> LOG.info("Cluster shutdown set; " + serverName +<a name="line.589"></a>
-<span class="sourceLineNo">590</span> " expired; onlineServers=" + this.onlineServers.size());<a name="line.590"></a>
-<span class="sourceLineNo">591</span> if (this.onlineServers.isEmpty()) {<a name="line.591"></a>
-<span class="sourceLineNo">592</span> master.stop("Cluster shutdown set; onlineServer=0");<a name="line.592"></a>
-<span class="sourceLineNo">593</span> }<a name="line.593"></a>
-<span class="sourceLineNo">594</span> return;<a name="line.594"></a>
-<span class="sourceLineNo">595</span> }<a name="line.595"></a>
-<span class="sourceLineNo">596</span> LOG.info("Processing expiration of " + serverName + " on " + this.master.getServerName());<a name="line.596"></a>
-<span class="sourceLineNo">597</span> master.getAssignmentManager().submitServerCrash(serverName, true);<a name="line.597"></a>
-<span class="sourceLineNo">598</span><a name="line.598"></a>
-<span class="sourceLineNo">599</span> // Tell our listeners that a server was removed<a name="line.599"></a>
-<span class="sourceLineNo">600</span> if (!this.listeners.isEmpty()) {<a name="line.600"></a>
-<span class="sourceLineNo">601</span> for (ServerListener listener : this.listeners) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span> listener.serverRemoved(serverName);<a name="line.602"></a>
-<span class="sourceLineNo">603</span> }<a name="line.603"></a>
-<span class="sourceLineNo">604</span> }<a name="line.604"></a>
-<span class="sourceLineNo">605</span> }<a name="line.605"></a>
-<span class="sourceLineNo">606</span><a name="line.606"></a>
-<span class="sourceLineNo">607</span> @VisibleForTesting<a name="line.607"></a>
-<span class="sourceLineNo">608</span> public void moveFromOnlineToDeadServers(final ServerName sn) {<a name="line.608"></a>
-<span class="sourceLineNo">609</span> synchronized (onlineServers) {<a name="line.609"></a>
-<span class="sourceLineNo">610</span> if (!this.onlineServers.containsKey(sn)) {<a name="line.610"></a>
-<span class="sourceLineNo">611</span> LOG.warn("Expiration of " + sn + " but server not online");<a name="line.611"></a>
-<span class="sourceLineNo">612</span> }<a name="line.612"></a>
-<span class="sourceLineNo">613</span> // Remove the server from the known servers lists and update load info BUT<a name="line.613"></a>
-<span class="sourceLineNo">614</span> // add to deadservers first; do this so it'll show in dead servers list if<a name="line.614"></a>
-<span class="sourceLineNo">615</span> // not in online servers list.<a name="line.615"></a>
-<span class="sourceLineNo">616</span> this.deadservers.add(sn);<a name="line.616"></a>
-<span class="sourceLineNo">617</span> this.onlineServers.remove(sn);<a name="line.617"></a>
-<span class="sourceLineNo">618</span> onlineServers.notifyAll();<a name="line.618"></a>
-<span class="sourceLineNo">619</span> }<a name="line.619"></a>
-<span class="sourceLineNo">620</span> this.rsAdmins.remove(sn);<a name="line.620"></a>
-<span class="sourceLineNo">621</span> }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span> public synchronized void processDeadServer(final ServerName serverName, boolean shouldSplitWal) {<a name="line.623"></a>
-<span class="sourceLineNo">624</span> // When assignment manager is cleaning up the zookeeper nodes and rebuilding the<a name="line.624"></a>
-<span class="sourceLineNo">625</span> // in-memory region states, region servers could be down. Meta table can and<a name="line.625"></a>
-<span class="sourceLineNo">626</span> // should be re-assigned, log splitting can be done too. However, it is better to<a name="line.626"></a>
-<span class="sourceLineNo">627</span> // wait till the cleanup is done before re-assigning user regions.<a name="line.627"></a>
-<span class="sourceLineNo">628</span> //<a name="line.628"></a>
-<span class="sourceLineNo">629</span> // We should not wait in the server shutdown handler thread since it can clog<a name="line.629"></a>
-<span class="sourceLineNo">630</span> // the handler threads and meta table could not be re-assigned in case<a name="line.630"></a>
-<span class="sourceLineNo">631</span> // the corresponding server is down. So we queue them up here instead.<a name="line.631"></a>
-<span class="sourceLineNo">632</span> if (!master.getAssignmentManager().isFailoverCleanupDone()) {<a name="line.632"></a>
-<span class="sourceLineNo">633</span> requeuedDeadServers.put(serverName, shouldSplitWal);<a name="line.633"></a>
-<span class="sourceLineNo">634</span> return;<a name="line.634"></a>
-<span class="sourceLineNo">635</span> }<a name="line.635"></a>
-<span class="sourceLineNo">636</span><a name="line.636"></a>
-<span class="sourceLineNo">637</span> this.deadservers.add(serverName);<a name="line.637"></a>
-<span class="sourceLineNo">638</span> master.getAssignmentManager().submitServerCrash(serverName, shouldSplitWal);<a name="line.638"></a>
-<span class="sourceLineNo">639</span> }<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span> /**<a name="line.641"></a>
-<span class="sourceLineNo">642</span> * Process the servers which died during master's initialization. It will be<a name="line.642"></a>
-<span class="sourceLineNo">643</span> * called after HMaster#assignMeta and AssignmentManager#joinCluster.<a name="line.643"></a>
-<span class="sourceLineNo">644</span> * */<a name="line.644"></a>
-<span class="sourceLineNo">645</span> synchronized void processQueuedDeadServers() {<a name="line.645"></a>
-<span class="sourceLineNo">646</span> if (!master.isServerCrashProcessingEnabled()) {<a name="line.646"></a>
-<span class="sourceLineNo">647</span> LOG.info("Master hasn't enabled ServerShutdownHandler");<a name="line.647"></a>
-<span class="sourceLineNo">648</span> }<a name="line.648"></a>
-<span class="sourceLineNo">649</span> Iterator<ServerName> serverIterator = queuedDeadServers.iterator();<a name="line.649"></a>
-<span class="sourceLineNo">650</span> while (serverIterator.hasNext()) {<a name="line.650"></a>
-<span class="sourceLineNo">651</span> ServerName tmpServerName = serverIterator.next();<a name="line.651"></a>
-<span class="sourceLineNo">652</span> expireServer(tmpServerName);<a name="line.652"></a>
-<span class="sourceLineNo">653</span> serverIterator.remove();<a name="line.653"></a>
-<span class="sourceLineNo">654</span> requeuedDeadServers.remove(tmpServerName);<a name="line.654"></a>
-<span class="sourceLineNo">655</span> }<a name="line.655"></a>
-<span class="sourceLineNo">656</span><a name="line.656"></a>
-<span class="sourceLineNo">657</span> if (!master.getAssignmentManager().isFailoverCleanupDone()) {<a name="line.657"></a>
-<span class="sourceLineNo">658</span> if (LOG.isTraceEnabled()) {<a name="line.658"></a>
-<span class="sourceLineNo">659</span> LOG.trace("AssignmentManager failover cleanup not done.");<a name="line.659"></a>
-<span class="sourceLineNo">660</span> }<a name="line.660"></a>
+<span class="sourceLineNo">560</span> * @return True if we queued a ServerCrashProcedure else false if we did not (could happen<a name="line.560"></a>
+<span class="sourceLineNo">561</span> * for many reasons including the fact that its this server that is going down or we already<a name="line.561"></a>
+<span class="sourceLineNo">562</span> * have queued an SCP for this server or SCP processing is currently disabled because we are<a name="line.562"></a>
+<span class="sourceLineNo">563</span> * in startup phase).<a name="line.563"></a>
+<span class="sourceLineNo">564</span> */<a name="line.564"></a>
+<span class="sourceLineNo">565</span> public synchronized boolean expireServer(final ServerName serverName) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span> // THIS server is going down... can't handle our own expiration.<a name="line.566"></a>
+<span class="sourceLineNo">567</span> if (serverName.equals(master.getServerName())) {<a name="line.567"></a>
+<span class="sourceLineNo">568</span> if (!(master.isAborted() || master.isStopped())) {<a name="line.568"></a>
+<span class="sourceLineNo">569</span> master.stop("We lost our znode?");<a name="line.569"></a>
+<span class="sourceLineNo">570</span> }<a name="line.570"></a>
+<span class="sourceLineNo">571</span> return false;<a name="line.571"></a>
+<span class="sourceLineNo">572</span> }<a name="line.572"></a>
+<span class="sourceLineNo">573</span> // No SCP handling during startup.<a name="line.573"></a>
+<span class="sourceLineNo">574</span> if (!master.isServerCrashProcessingEnabled()) {<a name="line.574"></a>
+<span class="sourceLineNo">575</span> LOG.info("Master doesn't enable ServerShutdownHandler during initialization, "<a name="line.575"></a>
+<span class="sourceLineNo">576</span> + "delay expiring server " + serverName);<a name="line.576"></a>
+<span class="sourceLineNo">577</span> // Even though we delay expire of this server, we still need to handle Meta's RIT<a name="line.577"></a>
+<span class="sourceLineNo">578</span> // that are against the crashed server; since when we do RecoverMetaProcedure,<a name="line.578"></a>
+<span class="sourceLineNo">579</span> // the SCP is not enabled yet and Meta's RIT may be suspend forever. See HBase-19287<a name="line.579"></a>
+<span class="sourceLineNo">580</span> master.getAssignmentManager().handleMetaRITOnCrashedServer(serverName);<a name="line.580"></a>
+<span class="sourceLineNo">581</span> this.queuedDeadServers.add(serverName);<a name="line.581"></a>
+<span class="sourceLineNo">582</span> // Return true because though on SCP queued, there will be one queued later.<a name="line.582"></a>
+<span class="sourceLineNo">583</span> return true;<a name="line.583"></a>
+<span class="sourceLineNo">584</span> }<a name="line.584"></a>
+<span class="sourceLineNo">585</span> if (this.deadservers.isDeadServer(serverName)) {<a name="line.585"></a>
+<span class="sourceLineNo">586</span> LOG.warn("Expiration called on {} but crash processing already in progress", serverName);<a name="line.586"></a>
+<span class="sourceLineNo">587</span> return false;<a name="line.587"></a>
+<span class="sourceLineNo">588</span> }<a name="line.588"></a>
+<span class="sourceLineNo">589</span> moveFromOnlineToDeadServers(serverName);<a name="line.589"></a>
+<span class="sourceLineNo">590</span><a name="line.590"></a>
+<span class="sourceLineNo">591</span> // If cluster is going down, yes, servers are going to be expiring; don't<a name="line.591"></a>
+<span class="sourceLineNo">592</span> // process as a dead server<a name="line.592"></a>
+<span class="sourceLineNo">593</span> if (isClusterShutdown()) {<a name="line.593"></a>
+<span class="sourceLineNo">594</span> LOG.info("Cluster shutdown set; " + serverName +<a name="line.594"></a>
+<span class="sourceLineNo">595</span> " expired; onlineServers=" + this.onlineServers.size());<a name="line.595"></a>
+<span class="sourceLineNo">596</span> if (this.onlineServers.isEmpty()) {<a name="line.596"></a>
+<span class="sourceLineNo">597</span> master.stop("Cluster shutdown set; onlineServer=0");<a name="line.597"></a>
+<span class="sourceLineNo">598</span> }<a name="line.598"></a>
+<span class="sourceLineNo">599</span> return false;<a name="line.599"></a>
+<span class="sourceLineNo">600</span> }<a name="line.600"></a>
+<span class="sourceLineNo">601</span> LOG.info("Processing expiration of " + serverName + " on " + this.master.getServerName());<a name="line.601"></a>
+<span class="sourceLineNo">602</span> master.getAssignmentManager().submitServerCrash(serverName, true);<a name="line.602"></a>
+<span class="sourceLineNo">603</span><a name="line.603"></a>
+<span class="sourceLineNo">604</span> // Tell our listeners that a server was removed<a name="line.604"></a>
+<span class="sourceLineNo">605</span> if (!this.listeners.isEmpty()) {<a name="line.605"></a>
+<span class="sourceLineNo">606</span> for (ServerListener listener : this.listeners) {<a name="line.606"></a>
+<span class="sourceLineNo">607</span> listener.serverRemoved(serverName);<a name="line.607"></a>
+<span class="sourceLineNo">608</span> }<a name="line.608"></a>
+<span class="sourceLineNo">609</span> }<a name="line.609"></a>
+<span class="sourceLineNo">610</span> return true;<a name="line.610"></a>
+<span class="sourceLineNo">611</span> }<a name="line.611"></a>
+<span class="sourceLineNo">612</span><a name="line.612"></a>
+<span class="sourceLineNo">613</span> @VisibleForTesting<a name="line.613"></a>
+<span class="sourceLineNo">614</span> public void moveFromOnlineToDeadServers(final ServerName sn) {<a name="line.614"></a>
+<span class="sourceLineNo">615</span> synchronized (onlineServers) {<a name="line.615"></a>
+<span class="sourceLineNo">616</span> if (!this.onlineServers.containsKey(sn)) {<a name="line.616"></a>
+<span class="sourceLineNo">617</span> LOG.warn("Expiration of " + sn + " but server not online");<a name="line.617"></a>
+<span class="sourceLineNo">618</span> }<a name="line.618"></a>
+<span class="sourceLineNo">619</span> // Remove the server from the known servers lists and update load info BUT<a name="line.619"></a>
+<span class="sourceLineNo">620</span> // add to deadservers first; do this so it'll show in dead servers list if<a name="line.620"></a>
+<span class="sourceLineNo">621</span> // not in online servers list.<a name="line.621"></a>
+<span class="sourceLineNo">622</span> this.deadservers.add(sn);<a name="line.622"></a>
+<span class="sourceLineNo">623</span> this.onlineServers.remove(sn);<a name="line.623"></a>
+<span class="sourceLineNo">624</span> onlineServers.notifyAll();<a name="line.624"></a>
+<span class="sourceLineNo">625</span> }<a name="line.625"></a>
+<span class="sourceLineNo">626</span> this.rsAdmins.remove(sn);<a name="line.626"></a>
+<span class="sourceLineNo">627</span> }<a name="line.627"></a>
+<span class="sourceLineNo">628</span><a name="line.628"></a>
+<span class="sourceLineNo">629</span> public synchronized void processDeadServer(final ServerName serverName, boolean shouldSplitWal) {<a name="line.629"></a>
+<span class="sourceLineNo">630</span> // When assignment manager is cleaning up the zookeeper nodes and rebuilding the<a name="line.630"></a>
+<span class="sourceLineNo">631</span> // in-memory region states, region servers could be down. Meta table can and<a name="line.631"></a>
+<span class="sourceLineNo">632</span> // should be re-assigned, log splitting can be done too. However, it is better to<a name="line.632"></a>
+<span class="sourceLineNo">633</span> // wait till the cleanup is done before re-assigning user regions.<a name="line.633"></a>
+<span class="sourceLineNo">634</span> //<a name="line.634"></a>
+<span class="sourceLineNo">635</span> // We should not wait in the server shutdown handler thread since it can clog<a name="line.635"></a>
+<span class="sourceLineNo">636</span> // the handler threads and meta table could not be re-assigned in case<a name="line.636"></a>
+<span class="sourceLineNo">637</span> // the corresponding server is down. So we queue them up here instead.<a name="line.637"></a>
+<span class="sourceLineNo">638</span> if (!master.getAssignmentManager().isFailoverCleanupDone()) {<a name="line.638"></a>
+<span class="sourceLineNo">639</span> requeuedDeadServers.put(serverName, shouldSplitWal);<a name="line.639"></a>
+<span class="sourceLineNo">640</span> return;<a name="line.640"></a>
+<span class="sourceLineNo">641</span> }<a name="line.641"></a>
+<span class="sourceLineNo">642</span><a name="line.642"></a>
+<span class="sourceLineNo">643</span> this.deadservers.add(serverName);<a name="line.643"></a>
+<span class="sourceLineNo">644</span> master.getAssignmentManager().submitServerCrash(serverName, shouldSplitWal);<a name="line.644"></a>
+<span class="sourceLineNo">645</span> }<a name="line.645"></a>
+<span class="sourceLineNo">646</span><a name="line.646"></a>
+<span class="sourceLineNo">647</span> /**<a name="line.647"></a>
+<span class="sourceLineNo">648</span> * Process the servers which died during master's initialization. It will be<a name="line.648"></a>
+<span class="sourceLineNo">649</span> * called after HMaster#assignMeta and AssignmentManager#joinCluster.<a name="line.649"></a>
+<span class="sourceLineNo">650</span> * */<a name="line.650"></a>
+<span class="sourceLineNo">651</span> synchronized void processQueuedDeadServers() {<a name="line.651"></a>
+<span class="sourceLineNo">652</span> if (!master.isServerCrashProcessingEnabled()) {<a name="line.652"></a>
+<span class="sourceLineNo">653</span> LOG.info("Master hasn't enabled ServerShutdownHandler");<a name="line.653"></a>
+<span class="sourceLineNo">654</span> }<a name="line.654"></a>
+<span class="sourceLineNo">655</span> Iterator<ServerName> serverIterator = queuedDeadServers.iterator();<a name="line.655"></a>
+<span class="sourceLineNo">656</span> while (serverIterator.hasNext()) {<a name="line.656"></a>
+<span class="sourceLineNo">657</span> ServerName tmpServerName = serverIterator.next();<a name="line.657"></a>
+<span class="sourceLineNo">658</span> expireServer(tmpServerName);<a name="line.658"></a>
+<span class="sourceLineNo">659</span> serverIterator.remove();<a name="line.659"></a>
+<span class="sourceLineNo">660</span> requeuedDeadServers.remove(tmpServerName);<a name="line.660"></a>
<span class="sourceLineNo">661</span> }<a name="line.661"></a>
<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span> for (Map.Entry<ServerName, Boolean> entry : requeuedDeadServers.entrySet()) {<a name="line.663"></a>
-<span class="sourceLineNo">664</span> processDeadServer(entry.getKey(), entry.getValue());<a name="line.664"></a>
-<span class="sourceLineNo">665</span> }<a name="line.665"></a>
-<span class="sourceLineNo">666</span> requeuedDeadServers.clear();<a name="line.666"></a>
-<span class="sourceLineNo">667</span> }<a name="line.667"></a>
+<span class="sourceLineNo">663</span> if (!master.getAssignmentManager().isFailoverCleanupDone()) {<a name="line.663"></a>
+<span class="sourceLineNo">664</span> if (LOG.isTraceEnabled()) {<a name="line.664"></a>
+<span class="sourceLineNo">665</span> LOG.trace("AssignmentManager failover cleanup not done.");<a name="line.665"></a>
+<span class="sourceLineNo">666</span> }<a name="line.666"></a>
+<span class="sourceLineNo">667</span> }<a name="line.667"></a>
<span class="sourceLineNo">668</span><a name="line.668"></a>
-<span class="sourceLineNo">669</span> /*<a name="line.669"></a>
-<span class="sourceLineNo">670</span> * Remove the server from the drain list.<a name="line.670"></a>
-<span class="sourceLineNo">671</span> */<a name="line.671"></a>
-<span class="sourceLineNo">672</span> public synchronized boolean removeServerFromDrainList(final ServerName sn) {<a name="line.672"></a>
-<span class="sourceLineNo">673</span> // Warn if the server (sn) is not online. ServerName is of the form:<a name="line.673"></a>
-<span class="sourceLineNo">674</span> // <hostname> , <port> , <startcode><a name="line.674"></a>
-<span class="sourceLineNo">675</span><a name="line.675"></a>
-<span class="sourceLineNo">676</span> if (!this.isServerOnline(sn)) {<a name="line.676"></a>
-<span class="sourceLineNo">677</span> LOG.warn("Server " + sn + " is not currently online. " +<a name="line.677"></a>
-<span class="sourceLineNo">678</span> "Removing from draining list anyway, as requested.");<a name="line.678"></a>
-<span class="sourceLineNo">679</span> }<a name="line.679"></a>
-<span class="sourceLineNo">680</span> // Remove the server from the draining servers lists.<a name="line.680"></a>
-<span class="sourceLineNo">681</span> return this.drainingServers.remove(sn);<a name="line.681"></a>
-<span class="sourceLineNo">682</span> }<a name="line.682"></a>
-<span class="sourceLineNo">683</span><a name="line.683"></a>
-<span class="sourceLineNo">684</span> /**<a name="line.684"></a>
-<span class="sourceLineNo">685</span> * Add the server to the drain list.<a name="line.685"></a>
-<span class="sourceLineNo">686</span> * @param sn<a name="line.686"></a>
-<span class="sourceLineNo">687</span> * @return True if the server is added or the server is already on the drain list.<a name="line.687"></a>
-<span class="sourceLineNo">688</span> */<a name="line.688"></a>
-<span class="sourceLineNo">689</span> public synchronized boolean addServerToDrainList(final ServerName sn) {<a name="line.689"></a>
-<span class="sourceLineNo">690</span> // Warn if the server (sn) is not online. ServerName is of the form:<a name="line.690"></a>
-<span class="sourceLineNo">691</span> // <hostname> , <port> , <startcode><a name="line.691"></a>
-<span class="sourceLineNo">692</span><a name="line.692"></a>
-<span class="sourceLineNo">693</span> if (!this.isServerOnline(sn)) {<a name="line.693"></a>
-<span class="sourceLineNo">694</span> LOG.warn("Server " + sn + " is not currently online. " +<a name="line.694"></a>
-<span class="sourceLineNo">695</span> "Ignoring request to add it to draining list.");<a name="line.695"></a>
-<span class="sourceLineNo">696</span> return false;<a name="line.696"></a>
-<span class="sourceLineNo">697</span> }<a name="line.697"></a>
-<span class="sourceLineNo">698</span> // Add the server to the draining servers lists, if it's not already in<a name="line.698"></a>
-<span class="sourceLineNo">699</span> // it.<a name="line.699"></a>
-<span class="sourceLineNo">700</span> if (this.drainingServers.contains(sn)) {<a name="line.700"></a>
-<span class="sourceLineNo">701</span> LOG.warn("Server " + sn + " is already in the draining server list." +<a name="line.701"></a>
-<span class="sourceLineNo">702</span> "Ignoring request to add it again.");<a name="line.702"></a>
-<span class="sourceLineNo">703</span> return true;<a name="line.703"></a>
-<span class="sourceLineNo">704</span> }<a name="line.704"></a>
-<span class="sourceLineNo">705</span> LOG.info("Server " + sn + " added to draining server list.");<a name="line.705"></a>
-<span class="sourceLineNo">706</span> return this.drainingServers.add(sn);<a name="line.706"></a>
-<span class="sourceLineNo">707</span> }<a name="line.707"></a>
-<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span> // RPC methods to region servers<a name="line.709"></a>
-<span class="sourceLineNo">710</span><a name="line.710"></a>
-<span class="sourceLineNo">711</span> private HBaseRpcController newRpcController() {<a name="line.711"></a>
-<span class="sourceLineNo">712</span> return rpcControllerFactory == null ? null : rpcControllerFactory.newController();<a name="line.712"></a>
+<span class="sourceLineNo">669</span> for (Map.Entry<ServerName, Boolean> entry : requeuedDeadServers.entrySet()) {<a name="line.669"></a>
+<span class="sourceLineNo">670</span> processDeadServer(entry.getKey(), entry.getValue());<a name="line.670"></a>
+<span class="sourceLineNo">671</span> }<a name="line.671"></a>
+<span class="sourceLineNo">672</span> requeuedDeadServers.clear();<a name="line.672"></a>
+<span class="sourceLineNo">673</span> }<a name="line.673"></a>
+<span class="sourceLineNo">674</span><a name="line.674"></a>
+<span class="sourceLineNo">675</span> /*<a name="line.675"></a>
+<span class="sourceLineNo">676</span> * Remove the server from the drain list.<a name="line.676"></a>
+<span class="sourceLineNo">677</span> */<a name="line.677"></a>
+<span class="sourceLineNo">678</span> public synchronized boolean removeServerFromDrainList(final ServerName sn) {<a name="line.678"></a>
+<span class="sourceLineNo">679</span> // Warn if the server (sn) is not online. ServerName is of the form:<a name="line.679"></a>
+<span class="sourceLineNo">680</span> // <hostname> , <port> , <startcode><a name="line.680"></a>
+<span class="sourceLineNo">681</span><a name="line.681"></a>
+<span class="sourceLineNo">682</span> if (!this.isServerOnline(sn)) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span> LOG.warn("Server " + sn + " is not currently online. " +<a name="line.683"></a>
+<span class="sourceLineNo">684</span> "Removing from draining list anyway, as requested.");<a name="line.684"></a>
+<span class="sourceLineNo">685</span> }<a name="line.685"></a>
+<span class="sourceLineNo">686</span> // Remove the server from the draining servers lists.<a name="line.686"></a>
+<span class="sourceLineNo">687</span> return this.drainingServers.remove(sn);<a name="line.687"></a>
+<span class="sourceLineNo">688</span> }<a name="line.688"></a>
+<span class="sourceLineNo">689</span><a name="line.689"></a>
+<span class="sourceLineNo">690</span> /**<a name="line.690"></a>
+<span class="sourceLineNo">691</span> * Add the server to the drain list.<a name="line.691"></a>
+<span class="sourceLineNo">692</span> * @param sn<a name="line.692"></a>
+<span class="sourceLineNo">693</span> * @return True if the server is added or the server is already on the drain list.<a name="line.693"></a>
+<span class="sourceLineNo">694</span> */<a name="line.694"></a>
+<span class="sourceLineNo">695</span> public synchronized boolean addServerToDrainList(final ServerName sn) {<a name="line.695"></a>
+<span class="sourceLineNo">696</span> // Warn if the server (sn) is not online. ServerName is of the form:<a name="line.696"></a>
+<span class="sourceLineNo">697</span> // <hostname> , <port> , <startcode><a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span> if (!this.isServerOnline(sn)) {<a name="line.699"></a>
+<span class="sourceLineNo">700</span> LOG.warn("Server " + sn + " is not currently online. " +<a name="line.700"></a>
+<span class="sourceLineNo">701</span> "Ignoring request to add it to draining list.");<a name="line.701"></a>
+<span class="sourceLineNo">702</span> return false;<a name="line.702"></a>
+<span class="sourceLineNo">703</span> }<a name="line.703"></a>
+<span class="sourceLineNo">704</span> // Add the server to the draining servers lists, if it's not already in<a name="line.704"></a>
+<span class="sourceLineNo">705</span> // it.<a name="line.705"></a>
+<span class="sourceLineNo">706</span> if (this.drainingServers.contains(sn)) {<a name="line.706"></a>
+<span class="sourceLineNo">707</span> LOG.warn("Server " + sn + " is already in the draining server list." +<a name="line.707"></a>
+<span class="sourceLineNo">708</span> "Ignoring request to add it again.");<a name="line.708"></a>
+<span class="sourceLineNo">709</span> return true;<a name="line.709"></a>
+<span class="sourceLineNo">710</span> }<a name="line.710"></a>
+<span class="sourceLineNo">711</span> LOG.info("Server " + sn + " added to draining server list.");<a name="line.711"></a>
+<span class="sourceLineNo">712</span> return this.drainingServers.add(sn);<a name="line.712"></a>
<span class="sourceLineNo">713</span> }<a name="line.713"></a>
<span class="sourceLineNo">714</span><a name="line.714"></a>
-<span class="sourceLineNo">715</span> /**<a name="line.715"></a>
-<span class="sourceLineNo">716</span> * Sends a WARMUP RPC to the specified server to warmup the specified region.<a name="line.716"></a>
-<span class="sourceLineNo">717</span> * <p><a name="line.717"></a>
-<span class="sourceLineNo">718</span> * A region server could reject the close request because it either does not<a name="line.718"></a>
-<span class="sourceLineNo">719</span> * have the specified region or the region is being split.<a name="line.719"></a>
-<span class="sourceLineNo">720</span> * @param server server to warmup a region<a name="line.720"></a>
-<span class="sourceLineNo">721</span> * @param region region to warmup<a name="line.721"></a>
-<span class="sourceLineNo">722</span> */<a name="line.722"></a>
-<span class="sourceLineNo">723</span> public void sendRegionWarmup(ServerName server,<a name="line.723"></a>
-<span class="sourceLineNo">724</span> RegionInfo region) {<a name="line.724"></a>
-<span class="sourceLineNo">725</span> if (server == null) return;<a name="line.725"></a>
-<span class="sourceLineNo">726</span> try {<a name="line.726"></a>
-<span class="sourceLineNo">727</span> AdminService.BlockingInterface admin = getRsAdmin(server);<a name="line.727"></a>
-<span class="sourceLineNo">728</span> HBaseRpcController controller = newRpcController();<a name="line.728"></a>
-<span class="sourceLineNo">729</span> ProtobufUtil.warmupRegion(controller, admin, region);<a name="line.729"></a>
-<span class="sourceLineNo">730</span> } catch (IOException e) {<a name="line.730"></a>
-<span class="sourceLineNo">731</span> LOG.error("Received exception in RPC for warmup server:" +<a name="line.731"></a>
-<span class="sourceLineNo">732</span> server + "region: " + region +<a name="line.732"></a>
-<span class="sourceLineNo">733</span> "exception: " + e);<a name="line.733"></a>
-<span class="sourceLineNo">734</span> }<a name="line.734"></a>
-<span class="sourceLineNo">735</span> }<a name="line.735"></a>
-<span class="sourceLineNo">736</span><a name="line.736"></a>
-<span class="sourceLineNo">737</span> /**<a name="line.737"></a>
-<span class="sourceLineNo">738</span> * Contacts a region server and waits up to timeout ms<a name="line.738"></a>
-<span class="sourceLineNo">739</span> * to close the region. This bypasses the active hmaster.<a name="line.739"></a>
-<span class="sourceLineNo">740</span> */<a name="line.740"></a>
-<span class="sourceLineNo">741</span> public static void closeRegionSilentlyAndWait(ClusterConnection connection,<a name="line.741"></a>
-<span class="sourceLineNo">742</span> ServerName server, RegionInfo region, long timeout) throws IOException, InterruptedException {<a name="line.742"></a>
-<span class="sourceLineNo">743</span> AdminService.BlockingInterface rs = connection.getAdmin(server);<a name="line.743"></a>
-<span class="sourceLineNo">744</span> HBaseRpcController controller = connection.getRpcControllerFactory().newController();<a name="line.744"></a>
-<span class="sourceLineNo">745</span> try {<a name="line.745"></a>
-<span class="sourceLineNo">746</span> ProtobufUtil.closeRegion(controller, rs, server, region.getRegionName());<a name="line.746"></a>
-<span class="sourceLineNo">747</span> } catch (IOException e) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span> LOG.warn("Exception when closing region: " + region.getRegionNameAsString(), e);<a name="line.748"></a>
-<span class="sourceLineNo">749</span> }<a name="line.749"></a>
-<span class="sourceLineNo">750</span> long expiration = timeout + System.currentTimeMillis();<a name="line.750"></a>
-<span class="sourceLineNo">751</span> while (System.currentTimeMillis() < expiration) {<a name="line.751"></a>
-<span class="sourceLineNo">752</span> controller.reset();<a name="line.752"></a>
-<span class="sourceLineNo">753</span> try {<a name="line.753"></a>
-<span class="sourceLineNo">754</span> RegionInfo rsRegion =<a name="line.754"></a>
-<span class="sourceLineNo">755</span> ProtobufUtil.getRegionInfo(controller, rs, region.getRegionName());<a name="line.755"></a>
-<span class="sourceLineNo">756</span> if (rsRegion == null) return;<a name="line.756"></a>
-<span class="sourceLineNo">757</span> } catch (IOException ioe) {<a name="line.757"></a>
-<span class="sourceLineNo">758</span> if (ioe instanceof NotServingRegionException) // no need to retry again<a name="line.758"></a>
-<span class="sourceLineNo">759</span> return;<a name="line.759"></a>
-<span class="sourceLineNo">760</span> LOG.warn("Exception when retrieving regioninfo from: "<a name="line.760"></a>
-<span class="sourceLineNo">761</span> + region.getRegionNameAsString(), ioe);<a name="line.761"></a>
-<span class="sourceLineNo">762</span> }<a name="line.762"></a>
-<span class="sourceLineNo">763</span> Thread.sleep(1000);<a name="line.763"></a>
-<span class="sourceLineNo">764</span> }<a name="line.764"></a>
-<span class="sourceLineNo">765</span> throw new IOException("Region " + region + " failed to close within"<a name="line.765"></a>
-<span class="sourceLineNo">766</span> + " timeout " + timeout);<a name="line.766"></a>
-<span class="sourceLineNo">767</span> }<a name="line.767"></a>
-<span class="sourceLineNo">768</span><a name="line.768"></a>
-<span class="sourceLineNo">769</span> /**<a name="line.769"></a>
-<span class="sourceLineNo">770</span> * @param sn<a name="line.770"></a>
-<span class="sourceLineNo">771</span> * @return Admin interface for the remote regionserver named <code>sn</code><a name="line.771"></a>
-<span class="sourceLineNo">772</span> * @throws IOException<a name="line.772"></a>
-<span class="sourceLineNo">773</span> * @throws RetriesExhaustedException wrapping a ConnectException if failed<a name="line.773"></a>
-<span class="sourceLineNo">774</span> */<a name="line.774"></a>
-<span class="sourceLineNo">775</span> public AdminService.BlockingInterface getRsAdmin(final ServerName sn)<a name="line.775"></a>
-<span class="sourceLineNo">776</span> throws IOException {<a name="line.776"></a>
-<span class="sourceLineNo">777</span> AdminService.BlockingInterface admin = this.rsAdmins.get(sn);<a name="line.777"></a>
-<span class="sourceLineNo">778</span> if (admin == null) {<a name="line.778"></a>
-<span class="sourceLineNo">779</span> LOG.debug("New admin connection to " + sn.toString());<a name="line.779"></a>
-<span class="sourceLineNo">780</span> if (sn.equals(master.getServerName()) && master instanceof HRegionServer) {<a name="line.780"></a>
-<span class="sourceLineNo">781</span> // A master is also a region server now, see HBASE-10569 for details<a name="line.781"></a>
-<span class="sourceLineNo">782</span> admin = ((HRegionServer)master).getRSRpcServices();<a name="line.782"></a>
-<span class="sourceLineNo">783</span> } else {<a name="line.783"></a>
-<span class="sourceLineNo">784</span> admin = this.connection.getAdmin(sn);<a name="line.784"></a>
-<span class="sourceLineNo">785</span> }<a name="line.785"></a>
-<span class="sourceLineNo">786</span> this.rsAdmins.put(sn, admin);<a name="line.786"></a>
-<span class="sourceLineNo">787</span> }<a name="line.787"></a>
-<span class="sourceLineNo">788</span> return admin;<a name="line.788"></a>
-<span class="sourceLineNo">789</span> }<a name="line.789"></a>
-<span class="sourceLineNo">790</span><a name="line.790"></a>
-<span class="sourceLineNo">791</span> /**<a name="line.791"></a>
-<span class="sourceLineNo">792</span> * Calculate min necessary to start. This is not an absolute. It is just<a name="line.792"></a>
-<span class="sourceLineNo">793</span> * a friction that will cause us hang around a bit longer waiting on<a name="line.793"></a>
-<span class="sourceLineNo">794</span> * RegionServers to check-in.<a name="line.794"></a>
-<span class="sourceLineNo">795</span> */<a name="line.795"></a>
-<span class="sourceLineNo">796</span> private int getMinToStart() {<a name="line.796"></a>
-<span class="sourceLineNo">797</span> // One server should be enough to get us off the ground.<a name="line.797"></a>
-<span class="sourceLineNo">798</span> int requiredMinToStart = 1;<a name="line.798"></a>
-<span class="sourceLineNo">799</span> if (LoadBalancer.isTablesOnMaster(master.getConfiguration())) {<a name="line.799"></a>
-<span class="sourceLineNo">800</span> if (LoadBalancer.isSystemTablesOnlyOnMaster(master.getConfiguration())) {<a name="line.800"></a>
-<span class="sourceLineNo">801</span> // If Master is carrying regions but NOT user-space regions, it<a name="line.801"></a>
-<span class="sourceLineNo">802</span> // still shows as a 'server'. We need at least one more server to check<a name="line.802"></a>
-<span class="sourceLineNo">803</span> // in before we can start up so set defaultMinToStart to 2.<a name="line.803"></a>
-<span class="sourceLineNo">804</span> requiredMinToStart = requiredMinToStart + 1;<a name="line.804"></a>
-<span class="sourceLineNo">805</span> }<a name="line.805"></a>
-<span class="sourceLineNo">806</span> }<a name="line.806"></a>
-<span class="sourceLineNo">807</span> int minToStart = this.master.getConfiguration().getInt(WAIT_ON_REGIONSERVERS_MINTOSTART, -1);<a name="line.807"></a>
-<span class="sourceLineNo">808</span> // Ensure we are never less than requiredMinToStart else stuff won't work.<a name="line.808"></a>
-<span class="sourceLineNo">809</span> return minToStart == -1 || minToStart < requiredMinToStart? requiredMinToStart: minToStart;<a name="line.809"></a>
-<span class="sourceLineNo">810</span> }<a name="line.810"></a>
-<span class="sourceLineNo">811</span><a name="line.811"></a>
-<span class="sourceLineNo">812</span> /**<a name="line.812"></a>
-<span class="sourceLineNo">813</span> * Wait for the region servers to report in.<a name="line.813"></a>
-<span class="sourceLineNo">814</span> * We will wait until one of this condition is met:<a name="line.814"></a>
-<span class="sourceLineNo">815</span> * - the master is stopped<a name="line.815"></a>
-<span class="sourceLineNo">816</span> * - the 'hbase.master.wait.on.regionservers.maxtostart' number of<a name="line.816"></a>
-<span class="sourceLineNo">817</span> * region servers is reached<a name="line.817"></a>
-<span class="sourceLineNo">818</span> * - the 'hbase.master.wait.on.regionservers.mintostart' is reached AND<a name="line.818"></a>
-<span class="sourceLineNo">819</span> * there have been no new region server in for<a name="line.819"></a>
-<span class="sourceLineNo">820</span> * 'hbase.master.wait.on.regionservers.interval' time AND<a name="line.820"></a>
-<span class="sourceLineNo">821</span> * the 'hbase.master.wait.on.regionservers.timeout' is reached<a name="line.821"></a>
-<span class="sourceLineNo">822</span> *<a name="line.822"></a>
-<span class="sourceLineNo">823</span> * @throws InterruptedException<a name="line.823"></a>
-<span class="sourceLineNo">824</span> */<a name="line.824"></a>
-<span class="sourceLineNo">825</span> public void waitForRegionServers(MonitoredTask status) throws InterruptedException {<a name="line.825"></a>
-<span class="sourceLineNo">826</span> final long interval = this.master.getConfiguration().<a name="line.826"></a>
-<span class="sourceLineNo">827</span> getLong(WAIT_ON_REGIONSERVERS_INTERVAL, 1500);<a name="line.827"></a>
-<span class="sourceLineNo">828</span> final long timeout = this.master.getConfiguration().<a name="line.828"></a>
-<span class="sourceLineNo">829</span> getLong(WAIT_ON_REGIONSERVERS_TIMEOUT, 4500);<a name="line.829"></a>
-<span class="sourceLineNo">830</span> // Min is not an absolute; just a friction making us wait longer on server checkin.<a name="line.830"></a>
-<span class="sourceLineNo">831</span> int minToStart = getMinToStart();<a name="line.831"></a>
-<span class="sourceLineNo">832</span> int maxToStart = this.master.getConfiguration().<a name="line.832"></a>
-<span class="sourceLineNo">833</span> getInt(WAIT_ON_REGIONSERVERS_MAXTOSTART, Integer.MAX_VALUE);<a name="line.833"></a>
-<span class="sourceLineNo">834</span> if (maxToStart < minToStart) {<a name="line.834"></a>
-<span class="sourceLineNo">835</span> LOG.warn(String.format("The value of '%s' (%d) is set less than '%s' (%d), ignoring.",<a name="line.835"></a>
-<span class="sourceLineNo">836</span> WAIT_ON_REGIONSERVERS_MAXTOSTART, maxToStart,<a name="line.836"></a>
-<span class="sourceLineNo">837</span> WAIT_ON_REGIONSERVERS_MINTOSTART, minToStart));<a name="line.837"></a>
-<span class="sourceLineNo">838</span> maxToStart = Integer.MAX_VALUE;<a name="line.838"></a>
-<span class="sourceLineNo">839</span> }<a name="line.839"></a>
-<span class="sourceLineNo">840</span><a name="line.840"></a>
-<span class="sourceLineNo">841</span> long now = System.currentTimeMillis();<a name="line.841"></a>
-<span class="sourceLineNo">842</span> final long startTime = now;<a name="line.842"></a>
-<span class="sourceLineNo">843</span> long slept = 0;<a name="line.843"></a>
-<span class="sourceLineNo">844</span> long lastLogTime = 0;<a name="line.844"></a>
-<span class="sourceLineNo">845</span> long lastCountChange = startTime;<a name="line.845"></a>
-<span class="sourceLineNo">846</span> int count = countOfRegionServers();<a name="line.846"></a>
-<span class="sourceLineNo">847</span> int oldCount = 0;<a name="line.847"></a>
-<span class="sourceLineNo">848</span> // This while test is a little hard to read. We try to comment it in below but in essence:<a name="line.848"></a>
-<span class="sourceLineNo">849</span> // Wait if Master is not stopped and the number of regionservers that have checked-in is<a name="line.849"></a>
-<span class="sourceLineNo">850</span> // less than the maxToStart. Both of these conditions will be true near universally.<a name="line.850"></a>
-<span class="sourceLineNo">851</span> // Next, we will keep cycling if ANY of the following three conditions are true:<a name="line.851"></a>
-<span class="sourceLineNo">852</span> // 1. The time since a regionserver registered is < interval (means servers are actively checking in).<a name="line.852"></a>
-<span class="sourceLineNo">853</span> // 2. We are under the total timeout.<a name="line.853"></a>
-<span class="sourceLineNo">854</span> // 3. The count of servers is < minimum.<a name="line.854"></a>
-<span class="sourceLineNo">855</span> for (ServerListener listener: this.listeners) {<a name="line.855"></a>
-<span class="sourceLineNo">856</span> listener.waiting();<a name="line.856"></a>
-<span class="sourceLineNo">857</span> }<a name="line.857"></a>
-<span class="sourceLineNo">858</span> while (!this.master.isStopped() && !isClusterShutdown() && count < maxToStart &&<a name="line.858"></a>
-<span class="sourceLineNo">859</span> ((lastCountChange + interval) > now || timeout > slept || count < minToStart)) {<a name="line.859"></a>
-<span class="sourceLineNo">860</span> // Log some info at every interval time or if there is a change<a name="line.860"></a>
-<span class="sourceLineNo">861</span> if (oldCount != count || lastLogTime + interval < now) {<a name="line.861"></a>
-<span class="sourceLineNo">862</span> lastLogTime = now;<a name="line.862"></a>
-<span class="sourceLineNo">863</span> String msg =<a name="line.863"></a>
-<span class="sourceLineNo">864</span> "Waiting on regionserver count=" + count + "; waited="+<a name="line.864"></a>
-<span class="sourceLineNo">865</span> slept + "ms, expecting min=" + minToStart + " server(s), max="+ getStrForMax(maxToStart) +<a name="line.865"></a>
-<span class="sourceLineNo">866</span> " server(s), " + "timeout=" + timeout + "ms, lastChange=" + (lastCountChange - now) + "ms";<a name="line.866"></a>
-<span class="sourceLineNo">867</span> LOG.info(msg);<a name="line.867"></a>
-<span class="sourceLineNo">868</span> status.setStatus(msg);<a name="line.868"></a>
-<span class="sourceLineNo">869</span> }<a name="line.869"></a>
-<span class="sourceLineNo">870</span><a name="line.870"></a>
-<span class="sourceLineNo">871</span> // We sleep for some time<a name="line.871"></a>
-<span class="sourceLineNo">872</span> final long sleepTime = 50;<a name="line.872"></a>
-<span class="sourceLineNo">873</span> Thread.sleep(sleepTime);<a name="line.873"></a>
-<span class="sourceLineNo">874</span> now = System.currentTimeMillis();<a name="line.874"></a>
-<span class="sourceLineNo">875</span> slept = now - startTime;<a name="line.875"></a>
+<span class="sourceLineNo">715</span> // RPC methods to region servers<a name="line.715"></a>
+<span class="sourceLineNo">716</span><a name="line.716"></a>
+<span class="sourceLineNo">717</span> private HBaseRpcController newRpcController() {<a name="line.717"></a>
+<span class="sourceLineNo">718</span> return rpcControllerFactory == null ? null : rpcControllerFactory.newController();<a name="line.718"></a>
+<span class="sourceLineNo">719</span> }<a name="line.719"></a>
+<span class="sourceLineNo">720</span><a name="line.720"></a>
+<span class="sourceLineNo">721</span> /**<a name="line.721"></a>
+<span class="sourceLineNo">722</span> * Sends a WARMUP RPC to the specified server to warmup the specified region.<a name="line.722"></a>
+<span class="sourceLineNo">723</span> * <p><a name="line.723"></a>
+<span class="sourceLineNo">724</span> * A region server could reject the close request because it either does not<a name="line.724"></a>
+<span class="sourceLineNo">725</span> * have the specified region or the region is being split.<a name="line.725"></a>
+<span class="sourceLineNo">726</span> * @param server server to warmup a region<a name="line.726"></a>
+<span class="sourceLineNo">727</span> * @param region region to warmup<a name="line.727"></a>
+<span class="sourceLineNo">728</span> */<a name="line.728"></a>
+<span class="sourceLineNo">729</span> public void sendRegionWarmup(ServerName server,<a name="line.729"></a>
+<span class="sourceLineNo">730</span> RegionInfo region) {<a name="line.730"></a>
+<span class="sourceLineNo">731</span> if (server == null) return;<a name="line.731"></a>
+<span class="sourceLineNo">732</span> try {<a name="line.732"></a>
+<span class="sourceLineNo">733</span> AdminService.BlockingInterface admin = getRsAdmin(server);<a name="line.733"></a>
+<span class="sourceLineNo">734</span> HBaseRpcController controller = newRpcController();<a name="line.734"></a>
+<span class="sourceLineNo">735</span> ProtobufUtil.warmupRegion(controller, admin, region);<a name="line.735"></a>
+<span class="sourceLineNo">736</span> } catch (IOException e) {<a name="line.736"></a>
+<span class="sourceLineNo">737</span> LOG.error("Received exception in RPC for warmup server:" +<a name="line.737"></a>
+<span class="sourceLineNo">738</span> server + "region: " + region +<a name="line.738"></a>
+<span class="sourceLineNo">739</span> "exception: " + e);<a name="line.739"></a>
+<span class="sourceLineNo">740</span> }<a name="line.740"></a>
+<span class="sourceLineNo">741</span> }<a name="line.741"></a>
+<span class="sourceLineNo">742</span><a name="line.742"></a>
+<span class="sourceLineNo">743</span> /**<a name="line.743"></a>
+<span class="sourceLineNo">744</span> * Contacts a region server and waits up to timeout ms<a name="line.744"></a>
+<span class="sourceLineNo">745</span> * to close the region. This bypasses the active hmaster.<a name="line.745"></a>
+<span class="sourceLineNo">746</span> */<a name="line.746"></a>
+<span class="sourceLineNo">747</span> public static void closeRegionSilentlyAndWait(ClusterConnection connection,<a name="line.747"></a>
+<span class="sourceLineNo">748</span> ServerName server, RegionInfo region, long timeout) throws IOException, InterruptedException {<a name="line.748"></a>
+<span class="sourceLineNo">749</span> AdminService.BlockingInterface rs = connection.getAdmin(server);<a name="line.749"></a>
+<span class="sourceLineNo">750</span> HBaseRpcController controller = connection.getRpcControllerFactory().newController();<a name="line.750"></a>
+<span class="sourceLineNo">751</span> try {<a name="line.751"></a>
+<span class="sourceLineNo">752</span> ProtobufUtil.closeRegion(controller, rs, server, region.getRegionName());<a name="line.752"></a>
+<span class="sourceLineNo">753</span> } catch (IOException e) {<a name="line.753"></a>
+<span class="sourceLineNo">754</span> LOG.warn("Exception when closing region: " + region.getRegionNameAsString(), e);<a name="line.754"></a>
+<span class="sourceLineNo">755</span> }<a name="line.755"></a>
+<span class="sourceLineNo">756</span> long expiration = timeout + System.currentTimeMillis();<a name="line.756"></a>
+<span class="sourceLineNo">757</span> while (System.currentTimeMillis() < expiration) {<a name="line.757"></a>
+<span class="sourceLineNo">758</span> controller.reset();<a name="line.758"></a>
+<span class="sourceLineNo">759</span> try {<a name="line.759"></a>
+<span class="sourceLineNo">760</span> RegionInfo rsRegion =<a name="line.760"></a>
+<span class="sourceLineNo">761</span> ProtobufUtil.getRegionInfo(controller, rs, region.getRegionName());<a name="line.761"></a>
+<span class="sourceLineNo">762</span> if (rsRegion == null) return;<a name="line.762"></a>
+<span class="sourceLineNo">763</span> } catch (IOException ioe) {<a name="line.763"></a>
+<span class="sourceLineNo">764</span> if (ioe instanceof NotServingRegionException) // no need to retry again<a name="line.764"></a>
+<span class="sourceLineNo">765</span> return;<a name="line.765"></a>
+<span class="sourceLineNo">766</span> LOG.warn("Exception when retrieving regioninfo from: "<a name="line.766"></a>
+<span class="sourceLineNo">767</span> + region.getRegionNameAsString(), ioe);<a name="line.767"></a>
+<span class="sourceLineNo">768</span> }<a name="line.768"></a>
+<span class="sourceLineNo">769</span> Thread.sleep(1000);<a name="line.769"></a>
+<span class="sourceLineNo">770</span> }<a name="line.770"></a>
+<span class="sourceLineNo">771</span> throw new IOException("Region " + region + " failed to close within"<a name="line.771"></a>
+<span class="sourceLineNo">772</span> + " timeout " + timeout);<a name="line.772"></a>
+<span class="sourceLineNo">773</span> }<a name="line.773"></a>
+<span class="sourceLineNo">774</span><a name="line.774"></a>
+<span class="sourceLineNo">775</span> /**<a name="line.775"></a>
+<span class="sourceLineNo">776</span> * @param sn<a name="line.776"></a>
+<span class="sourceLineNo">777</span> * @return Admin interface for the remote regionserver named <code>sn</code><a name="line.777"></a>
+<span class="sourceLineNo">778</span> * @throws IOException<a name="line.778"></a>
+<span class="sourceLineNo">779</span> * @throws RetriesExhaustedException wrapping a ConnectException if failed<a name="line.779"></a>
+<span class="sourceLineNo">780</span> */<a name="line.780"></a>
+<span class="sourceLineNo">781</span> public AdminService.BlockingInterface getRsAdmin(final ServerName sn)<a name="line.781"></a>
+<span class="sourceLineNo">782</span> throws IOException {<a name="line.782"></a>
+<span class="sourceLineNo">783</span> AdminService.BlockingInterface admin = this.rsAdmins.get(sn);<a name="line.783"></a>
+<span class="sourceLineNo">784</span> if (admin == null) {<a name="line.784"></a>
+<span class="sourceLineNo">785</span> LOG.debug("New admin connection to " + sn.toString());<a name="line.785"></a>
+<span class="sourceLineNo">786</span> if (sn.equals(master.getServerName()) && master instanceof HRegionServer) {<a name="line.786"></a>
+<span class="sourceLineNo">787</span> // A master is also a region server now, see HBASE-10569 for details<a name="line.787"></a>
+<span class="sourceLineNo">788</span> admin = ((HRegionServer)master).getRSRpcServices();<a name="line.788"></a>
+<span class="sourceLineNo">789</span> } else {<a name="line.789"></a>
+<span class="sourceLineNo">790</span> admin = this.connection.getAdmin(sn);<a name="line.790"></a>
+<span class="sourceLineNo">791</span> }<a name="line.791"></a>
+<span class="sourceLineNo">792</span> this.rsAdmins.put(sn, admin);<a name="line.792"></a>
+<span class="sourceLineNo">793</span> }<a name="line.793"></a>
+<span class="sourceLineNo">794</span> return admin;<a name="line.794"></a>
+<span class="sourceLineNo">795</span> }<a name="line.795"></a>
+<span class="sourceLineNo">796</span><a name="line.796"></a>
+<span class="sourceLineNo">797</span> /**<a name="line.797"></a>
+<span class="sourceLineNo">798</span> * Calculate min necessary to start. This is not an absolute. It is just<a name="line.798"></a>
+<span class="sourceLineNo">799</span> * a friction that will cause us hang around a bit longer waiting on<a name="line.799"></a>
+<span class="sourceLineNo">800</span> * RegionServers to check-in.<a name="line.800"></a>
+<span class="sourceLineNo">801</span> */<a name="line.801"></a>
+<span class="sourceLineNo">802</span> private int getMinToStart() {<a name="line.802"></a>
+<span class="sourceLineNo">803</span> // One server should be enough to get us off the ground.<a name="line.803"></a>
+<span class="sourceLineNo">804</span> int requiredMinToStart = 1;<a name="line.804"></a>
+<span class="sourceLineNo">805</span> if (LoadBalancer.isTablesOnMaster(master.getConfiguration())) {<a name="line.805"></a>
+<span class="sourceLineNo">806</span> if (LoadBalancer.isSystemTablesOnlyOnMaster(master.getConfiguration())) {<a name="line.806"></a>
+<span class="sourceLineNo">807</span> // If Master is carrying regions but NOT user-space regions, it<a name="line.807"></a>
+<span class="sourceLineNo">808</span> // still shows as a 'server'. We need at least one more server to check<a name="line.808"></a>
+<span class="sourceLineNo">809</span> // in before we can start up so set defaultMinToStart to 2.<a name="line.809"></a>
+<span class="sourceLineNo">810</span> requiredMinToStart = requiredMinToStart + 1;<a name="line.810"></a>
+<span class="sourceLineNo">811</span> }<a name="line.811"></a>
+<span class="sourceLineNo">812</span> }<a name="line.812"></a>
+<span class="sourceLineNo">813</span> int minToStart = this.master.getConfiguration().getInt(WAIT_ON_REGIONSERVERS_MINTOSTART, -1);<a name="line.813"></a>
+<span class="sourceLineNo">814</span> // Ensure we are never less than requiredMinToStart else stuff won't work.<a name="line.814"></a>
+<span class="sourceLineNo">815</span> return minToStart == -1 || minToStart < requiredMinToStart? requiredMinToStart: minToStart;<a name="line.815"></a>
+<span class="sourceLineNo">816</span> }<a name="line.816"></a>
+<span class="sourceLineNo">817</span><a name="line.817"></a>
+<span class="sourceLineNo">818</span> /**<a name="line.818"></a>
+<span class="sourceLineNo">819</span> * Wait for the region servers to report in.<a name="line.819"></a>
+<span class="sourceLineNo">820</span> * We will wait until one of this condition is met:<a name="line.820"></a>
+<span class="sourceLineNo">821</span> * - the master is stopped<a name="line.821"></a>
+<span class="sourceLineNo">822</span> * - the 'hbase.master.wait.on.regionservers.maxtostart' number of<a name="line.822"></a>
+<span class="sourceLineNo">823</span> * region servers is reached<a name="line.823"></a>
+<span class="sourceLineNo">824</span> * - the 'hbase.master.wait.on.regionservers.mintostart' is reached AND<a name="line.824"></a>
+<span class="sourceLineNo">825</span> * there have been no new region server in for<a name="line.825"></a>
+<span class="sourceLineNo">826</span> * 'hbase.master.wait.on.regionservers.interval' time AND<a name="line.826"></a>
+<span class="sourceLineNo">827</span> * the 'hbase.master.wait.on.regionservers.timeout' is reached<a name="line.827"></a>
+<span class="sourceLineNo">828</span> *<a name="line.828"></a>
+<span class="sourceLineNo">829</span> * @throws InterruptedException<a name="line.829"></a>
+<span class="sourceLineNo">830</span> */<a name="line.830"></a>
+<span class="sourceLineNo">831</span> public void waitForRegionServers(MonitoredTask status) throws InterruptedException {<a name="line.831"></a>
+<span class="sourceLineNo">832</span> final long interval = this.master.getConfiguration().<a name="line.832"></a>
+<span class="sourceLineNo">833</span> getLong(WAIT_ON_REGIONSERVERS_INTERVAL, 1500);<a name="line.833"></a>
+<span class="sourceLineNo">834</span> final long timeout = this.master.getConfiguration().<a name="line.834"></a>
+<span class="sourceLineNo">835</span> getLong(WAIT_ON_REGIONSERVERS_TIMEOUT, 4500);<a name="line.835"></a>
+<span class="sourceLineNo">836</span> // Min is not an absolute; just a friction making us wait longer on server checkin.<a name="line.836"></a>
+<span class="sourceLineNo">837</span> int minToStart = getMinToStart();<a name="line.837"></a>
+<span class="sourceLineNo">838</span> int maxToStart = this.master.getConfiguration().<a name="line.838"></a>
+<span class="sourceLineNo">839</span> getInt(WAIT_ON_REGIONSERVERS_MAXTOSTART, Integer.MAX_VALUE);<a name="line.839"></a>
+<span class="sourceLineNo">840</span> if (maxToStart < minToStart) {<a name="line.840"></a>
+<span class="sourceLineNo">841</span> LOG.warn(String.format("The value of '%s' (%d) is set less than '%s' (%d), ignoring.",<a name="line.841"></a>
+<span class="sourceLineNo">842</span> WAIT_ON_REGIONSERVERS_MAXTOSTART, maxToStart,<a name="line.842"></a>
+<span class="sourceLineNo">843</span> WAIT_ON_REGIONSERVERS_MINTOSTART, minToStart));<a name="line.843"></a>
+<span class="sourceLineNo">844</span> maxToStart = Integer.MAX_VALUE;<a name="line.844"></a>
+<span class="sourceLineNo">845</span> }<a name="line.845"></a>
+<span class="sourceLineNo">846</span><a name="line.846"></a>
+<span class="sourceLineNo">847</span> long now = System.currentTimeMillis();<a name="line.847"></a>
+<span class="sourceLineNo">848</span> final long startTime = now;<a name="line.848"></a>
+<span class="sourceLineNo">849</span> long slept = 0;<a name="line.849"></a>
+<span class="sourceLineNo">850</span> long lastLogTime = 0;<a name="line.850"></a>
+<span class="sourceLineNo">851</span> long lastCountChange = startTime;<a name="line.851"></a>
+<span class="sourceLineNo">852</span> int count = countOfRegionServers();<a name="line.852"></a>
+<span class="sourceLineNo">853</span> int oldCount = 0;<a name="line.853"></a>
+<span class="sourceLineNo">854</span> // This while test is a little hard to read. We try to comment it in below but in essence:<a name="line.854"></a>
+<span class="sourceLineNo">855</span> // Wait if Master is not stopped and the number of regionservers that have checked-in is<a name="line.855"></a>
+<span class="sourceLineNo">856</span> // less than the maxToStart. Both of these conditions will be true near universally.<a name="line.856"></a>
+<span class="sourceLineNo">857</span> // Next, we will keep cycling if ANY of the following three conditions are true:<a name="line.857"></a>
+<span class="sourceLineNo">858</span> // 1. The time since a regionserver registered is < interval (means servers are actively checking in).<a name="line.858"></a>
+<span class="sourceLineNo">859</span> // 2. We are under the total timeout.<a name="line.859"></a>
+<span class="sourceLineNo">860</span> // 3. The count of servers is < minimum.<a name="line.860"></a>
+<span class="sourceLineNo">861</span> for (ServerListener listener: this.listeners) {<a name="line.861"></a>
+<span class="sourceLineNo">862</span> listener.waiting();<a name="line.862"></a>
+<span class="sourceLineNo">863</span> }<a name="line.863"></a>
+<span class="sourceLineNo">864</span> while (!this.master.isStopped() && !isClusterShutdown() && count < maxToStart &&<a name="line.864"></a>
+<span class="sourceLineNo">865</span> ((lastCountChange + interval) > now || timeout > slept || count < minToStart)) {<a name="line.865"></a>
+<span class="sourceLineNo">866</span> // Log some info at every interval time or if there is a change<a name="line.866"></a>
+<span class="sourceLineNo">867</span> if (oldCount != count || lastLogTime + interval < now) {<a name="line.867"></a>
+<span class="sourceLineNo">868</span> lastLogTime = now;<a name="line.868"></a>
+<span class="sourceLineNo">869</span> String msg =<a name="line.869"></a>
+<span class="sourceLineNo">870</span> "Waiting on regionserver count=" + count + "; waited="+<a name="line.870"></a>
+<span class="sourceLineNo">871</span> slept + "ms, expecting min=" + minToStart + " server(s), max="+ getStrForMax(maxToStart) +<a name="line.871"></a>
+<span class="sourceLineNo">872</span> " server(s), " + "timeout=" + timeout + "ms, lastChange=" + (lastCountChange - now) + "ms";<a name="line.872"></a>
+<span class="sourceLineNo">873</span> LOG.info(msg);<a name="line.873"></a>
+<span class="sourceLineNo">874</span> status.setStatus(msg);<a name="line.874"></a>
+<span class="sourceLineNo">875</span> }<a name="line.875"></a>
<span class="sourceLineNo">876</span><a name="line.876"></a>
-<span class="sourceLineNo">877</span> oldCount = count;<a name="line.877"></a>
-<span class="sourceLineNo">878</span> count = countOfRegionServers();<a name="line.878"></a>
-<span class="sourceLineNo">879</span> if (count != oldCount) {<a name="line.879"></a>
-<span class="sourceLineNo">880</span> lastCountChange = now;<a name="line.880"></a>
-<span class="sourceLineNo">881</span> }<a name="line.881"></a>
-<span class="sourceLineNo">882</span> }<a name="line.882"></a>
-<span class="sourceLineNo">883</span> // Did we exit the loop because cluster is going down?<a name="line.883"></a>
-<span class="sourceLineNo">884</span> if (isClusterShutdown()) {<a name="line.884"></a>
-<span class="sourceLineNo">885</span> this.master.stop("Cluster shutdown");<a name="line.885"></a>
-<span class="sourceLineNo">886</span> }<a name="line.886"></a>
-<span class="sourceLineNo">887</span> LOG.info("Finished waiting on RegionServer count=" + count + "; waited=" + slept + "ms," +<a name="line.887"></a>
-<span class="sourceLineNo">888</span> " expected min=" + minToStart + " server(s), max=" + getStrForMax(maxToStart) + " server(s),"+<a name="line.888"></a>
-<span class="sourceLineNo">889</span> " master is "+ (this.master.isStopped() ? "stopped.": "running"));<a name="line.889"></a>
-<span class="sourceLineNo">890</span> }<a name="line.890"></a>
-<span class="sourceLineNo">891</span><a name="line.891"></a>
-<span class="sourceLineNo">892</span> private String getStrForMax(final int max) {<a name="line.892"></a>
-<span class="sourceLineNo">893</span> return max == Integer.MAX_VALUE? "NO_LIMIT": Integer.toString(max);<a name="line.893"></a>
-<span class="sourceLineNo">894</span> }<a name="line.894"></a>
-<span class="sourceLineNo">895</span><a name="line.895"></a>
-<span class="sourceLineNo">896</span> /**<a name="line.896"></a>
-<span class="sourceLineNo">897</span> * @return A copy of the internal list of online servers.<a name="line.897"></a>
-<span class="sourceLineNo">898</span> */<a name="line.898"></a>
-<span class="sourceLineNo">899</span> public List<ServerName> getOnlineServersList() {<a name="line.899"></a>
-<span class="sourceLineNo">900</span> // TODO: optimize the load balancer call so we don't need to make a new list<a name="line.900"></a>
-<span class="sourceLineNo">901</span> // TODO: FIX. THIS IS POPULAR CALL.<a name="line.901"></a>
-<span class="sourceLineNo">902</span> return new ArrayList<>(this.onlineServers.keySet());<a name="line.902"></a>
-<span class="sourceLineNo">903</span> }<a name="line.903"></a>
-<span class="sourceLineNo">904</span><a name="line.904"></a>
-<span class="sourceLineNo">905</span> /**<a name="line.905"></a>
-<span class="sourceLineNo">906</span> * @param keys The target server name<a name="line.906"></a>
-<span class="sourceLineNo">907</span> * @param idleServerPredicator Evaluates the server on the given load<a name="line.907"></a>
-<span class="sourceLineNo">908</span> * @return A copy of the internal list of online servers matched by the predicator<a name="line.908"></a>
-<span class="sourceLineNo">909</span> */<a name="line.909"></a>
-<span class="sourceLineNo">910</span> public List<ServerName> getOnlineServersListWithPredicator(List<ServerName> keys,<a name="line.910"></a>
-<span class="sourceLineNo">911</span> Predicate<ServerMetrics> idleServerPredicator) {<a name="line.911"></a>
-<span class="sourceLineNo">912</span> List<ServerName> names = new ArrayList<>();<a name="line.912"></a>
-<span class="sourceLineNo">913</span> if (keys != null && idleServerPredicator != null) {<a name="line.913"></a>
-<span class="sourceLineNo">914</span> keys.forEach(name -> {<a name="line.914"></a>
-<span class="sourceLineNo">915</span> ServerMetrics load = onlineServers.get(name);<a name="line.915"></a>
-<span class="sourceLineNo">916</span> if (load != null) {<a name="line.916"></a>
-<span class="sourceLineNo">917</span> if (idleServerPredicator.test(load)) {<a name="line.917"></a>
-<span class="sourceLineNo">918</span> names.add(name);<a name="line.918"></a>
-<span class="sourceLineNo">919</span> }<a name="line.919"></a>
-<span class="sourceLineNo">920</span> }<a name="line.920"></a>
-<span class="sourceLineNo">921</span> });<a name="line.921"></a>
-<span class="sourceLineNo">922</span> }<a name="line.922"></a>
-<span class="sourceLineNo">923</span> return names;<a name="line.923"></a>
-<span class="sourceLineNo">924</span> }<a name="line.924"></a>
-<span class="sourceLineNo">925</span><a name="line.925"></a>
-<span class="sourceLineNo">926</span> /**<a name="line.926"></a>
-<span class="sourceLineNo">927</span> * @return A copy of the internal list of draining servers.<a name="line.927"></a>
-<span class="sourceLineNo">928</span> */<a name="line.928"></a>
-<span class="sourceLineNo">929</span> public List<ServerName> getDrainingServersList() {<a name="line.929"></a>
-<span class="sourceLineNo">930</span> return new ArrayList<>(this.drainingServers);<a name="line.930"></a>
-<span class="sourceLineNo">931</span> }<a name="line.931"></a>
-<span class="sourceLineNo">932</span><a name="line.932"></a>
-<span class="sourceLineNo">933</span> /**<a name="line.933"></a>
-<span class="sourceLineNo">934</span> * @return A copy of the internal set of deadNotExpired servers.<a name="line.934"></a>
-<span class="sourceLineNo">935</span> */<a name="line.935"></a>
-<span class="sourceLineNo">936</span> Set<ServerName> getDeadNotExpiredServers() {<a name="line.936"></a>
-<span class="sourceLineNo">937</span> return new HashSet<>(this.queuedDeadServers);<a name="line.937"></a>
-<span class="sourceLineNo">938</span> }<a name="line.938"></a>
-<span class="sourceLineNo">939</span><a name="line.939"></a>
-<span class="sourceLineNo">940</span> public boolean isServerOnline(ServerName serverName) {<a name="line.940"></a>
-<span class="sourceLineNo">941</span> return serverName != null && onlineServers.containsKey(serverName);<a name="line.941"></a>
-<span class="sourceLineNo">942</span> }<a name="line.942"></a>
-<span class="sourceLineNo">943</span><a name="line.943"></a>
-<span class="sourceLineNo">944</span> /**<a name="line.944"></a>
-<span class="sourceLineNo">945</span> * Check if a server is known to be dead. A server can be online,<a name="line.945"></a>
-<span class="sourceLineNo">946</span> * or known to be dead, or unknown to this manager (i.e, not online,<a name="line.946"></a>
-<span class="sourceLineNo">947</span> * not known to be dead either. it is simply not tracked by the<a name="line.947"></a>
-<span class="sourceLineNo">948</span> * master any more, for example, a very old previous instance).<a name="line.948"></a>
-<span class="sourceLineNo">949</span> */<a name="line.949"></a>
-<span class="sourceLineNo">950</span> public synchronized boolean isServerDead(ServerName serverName) {<a name="line.950"></a>
-<span class="sourceLineNo">951</span> return serverName == null || deadservers.isDeadServer(serverName)<a name="line.951"></a>
-<span class="sourceLineNo">952</span> || queuedDeadServers.contains(serverName)<a name="line.952"></a>
-<span class="sourceLineNo">953</span> || requeuedDeadServers.containsKey(serverName);<a name="line.953"></a>
-<span class="sourceLineNo">954</span> }<a name="line.954"></a>
-<span class="sourceLineNo">955</span><a name="line.955"></a>
-<span class="sourceLineNo">956</span> public void shutdownCluster() {<a name="line.956"></a>
-<span class="sourceLineNo">957</span> String statusStr = "Cluster shutdown requested of master=" + this.master.getServerName();<a name="line.957"></a>
-<span class="sourceLineNo">958</span> LOG.info(statusStr);<a name="line.958"></a>
-<span class="sourceLineNo">959</span> this.clusterShutdown.set(true);<a name="line.959"></a>
-<span class="sourceLineNo">960</span> if (onlineServers.isEmpty()) {<a name="line.960"></a>
-<span class="sourceLineNo">961</span> // we do not synchronize here so this may cause a double stop, but not a big deal<a name="line.961"></a>
-<span class="sourceLineNo">962</span> master.stop("OnlineServer=0 right after cluster shutdown set");<a name="line.962"></a>
-<span class="sourceLineNo">963</span> }<a name="line.963"></a>
-<span class="sourceLineNo">964</span> }<a name="line.964"></a>
-<span class="sourceLineNo">965</span><a name="line.965"></a>
-<span class="sourceLineNo">966</span> boolean isClusterShutdown() {<a name="line.966"></a>
-<span class="sourceLineNo">967</span> return this.clusterShutdown.get();<a name="line.967"></a>
-<span class="sourceLineNo">968</span> }<a name="line.968"></a>
-<span class="sourceLineNo">969</span><a name="line.969"></a>
-<span class="sourceLineNo">970</span> /**<a name="line.970"></a>
-<span class="sourceLineNo">971</span> * Stop the ServerManager.<a name="line.971"></a>
-<span class="sourceLineNo">972</span> */<a name="line.972"></a>
-<span class="sourceLineNo">973</span> public void stop() {<a name="line.973"></a>
-<span class="sourceLineNo">974</span> // Nothing to do.<a name="line.974"></a>
-<span class="sourceLineNo">975</span> }<a name="line.975"></a>
-<span class="sourceLineNo">976</span><a name="line.976"></a>
-<span class="sourceLineNo">977</span> /**<a name="line.977"></a>
-<span class="sourceLineNo">978</span> * Creates a list of possible destinations for a region. It contains the online servers, but not<a name="line.978"></a>
-<span class="sourceLineNo">979</span> * the draining or dying servers.<a name="line.979"></a>
-<span class="sourceLineNo">980</span> * @param serversToExclude can be null if there is no server to exclude<a name="line.980"></a>
-<span class="sourceLineNo">981</span> */<a name="line.981"></a>
-<span class="sourceLineNo">982</span> public List<ServerName> createDestinationServersList(final List<ServerName> serversToExclude){<a name="line.982"></a>
-<span class="sourceLineNo">983</span> final List<ServerName> destServers = getOnlineServersList();<a name="line.983"></a>
-<span class="sourceLineNo">984</span><a name="line.984"></a>
-<span class="sourceLineNo">985</span> if (serversToExclude != null) {<a name="line.985"></a>
-<span class="sourceLineNo">986</span> destServers.removeAll(serversToExclude);<a name="line.986"></a>
-<span class="sourceLineNo">987</span> }<a name="line.987"></a>
-<span class="sourceLineNo">988</span><a name="line.988"></a>
-<span class="sourceLineNo">989</span> // Loop through the draining server list and remove them from the server list<a name="line.989"></a>
-<span class="sourceLineNo">990</span> final List<ServerName> drainingServersCopy = getDrainingServersList();<a name="line.990"></a>
-<span class="sourceLineNo">991</span> destServers.removeAll(drainingServersCopy);<a name="line.991"></a>
-<span class="sourceLineNo">992</span><a name="line.992"></a>
-<span class="sourceLineNo">993</span> // Remove the deadNotExpired servers from the server list.<a name="line.993"></a>
-<span class="sourceLineNo">994</span> removeDeadNotExpiredServers(destServers);<a name="line.994"></a>
-<span class="sourceLineNo">995</span> return destServers;<a name="line.995"></a>
-<span class="sourceLineNo">996</span> }<a name="line.996"></a>
-<span class="sourceLineNo">997</span><a name="line.997"></a>
-<span class="sourceLineNo">998</span> /**<a name="line.998"></a>
-<span class="sourceLineNo">999</span> * Calls {@link #createDestinationServersList} without server to exclude.<a name="line.999"></a>
-<span class="sourceLineNo">1000</span> */<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span> public List<ServerName> createDestinationServersList(){<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span> return createDestinationServersList(null);<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span> }<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span><a name="line.1004"></a>
-<span class="sourceLineNo">1005</span> /**<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span> * Loop through the deadNotExpired server list and remove them from the<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span> * servers.<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span> * This function should be used carefully outside of this class. You should use a high level<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span> * method such as {@link #createDestinationServersList()} instead of managing you own list.<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span> */<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span> void removeDeadNotExpiredServers(List<ServerName> servers) {<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span> Set<ServerName> deadNotExpiredServersCopy = this.getDeadNotExpiredServers();<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span> if (!deadNotExpiredServersCopy.isEmpty()) {<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span> for (ServerName server : deadNotExpiredServersCopy) {<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span> LOG.debug("Removing dead but not expired server: " + server<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span> + " from eligible server pool.");<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span> servers.remove(server);<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span> }<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span> }<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span> }<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span><a name="line.1021"></a>
-<span class="sourceLineNo">1022</span> /**<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span> * To clear any dead server with same host name and port of any online server<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span> */<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span> void clearDeadServersWithSameHostNameAndPortOfOnlineServer() {<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span> for (ServerName serverName : getOnlineServersList()) {<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span> deadservers.cleanAllPreviousInstances(serverName);<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span> }<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span> }<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span><a name="line.1030"></a>
-<span class="sourceLineNo">1031</span> /**<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span> * Called by delete table and similar to notify the ServerManager that a region was removed.<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span> */<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span> public void removeRegion(final RegionInfo regionInfo) {<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span> final byte[] encodedName = regionInfo.getEncodedNameAsBytes();<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span> storeFlushedSequenceIdsByRegion.remove(encodedName);<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span> flushedSequenceIdByRegion.remove(encodedName);<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span> }<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span><a name="line.1039"></a>
-<span class="sourceLineNo">1040</span> @VisibleForTesting<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span> public boolean isRegionInServerManagerStates(final RegionInfo hri) {<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span> final byte[] encodedName = hri.getEncodedNameAsBytes();<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span> return (storeFlushedSequenceIdsByRegion.containsKey(encodedName)<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span> || flushedSequenceIdByRegion.containsKey(encodedName));<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span> }<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span><a name="line.1046"></a>
-<span class="sourceLineNo">1047</span> /**<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span> * Called by delete table and similar to notify the ServerManager that a region was removed.<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span> */<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span> public void removeRegions(final List<RegionInfo> regions) {<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span> for (RegionInfo hri: regions) {<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span> removeRegion(hri);<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span> }<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span> }<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>}<a name="line.1055"></a>
+<span class="sourceLineNo">877</span> // We sleep for some time<a name="line.877"></a>
+<span class="sourceLineNo">878</span> final long sleepTime = 50;<a name="line.878"></a>
+<span class="sourceLineNo">879</span> Thread.sleep(sleepTime);<a name="line.879"></a>
+<span class="sourceLineNo">880</span> now = System.currentTimeMillis();<a name="line.880"></a>
+<span class="sourceLineNo">881</span> slept = now - startTime;<a name="line.881"></a>
+<span class="sourceLineNo">882</span><a name="line.882"></a>
+<span class="sourceLineNo">883</span> oldCount = count;<a name="line.883"></a>
+<span class="sourceLineNo">884</span> count = countOfRegionServers();<a name="line.884"></a>
+<span class="sourceLineNo">885</span> if (count != oldCount) {<a name="line.885"></a>
+<span class="sourceLineNo">886</span> lastCountChange = now;<a name="line.886"></a>
+<span class="sourceLineNo">887</span> }<a name="line.887"></a>
+<span class="sourceLineNo">888</span> }<a name="line.888"></a>
+<span class="sourceLineNo">889</span> // Did we exit the loop because cluster is going down?<a name="line.889"></a>
+<span class="sourceLineNo">890</span> if (isClusterShutdown()) {<a name="line.890"></a>
+<span class="sourceLineNo">891</span> this.master.stop("Cluster shutdown");<a name="line.891"></a>
+<span class="sourceLineNo">892</span> }<a name="line.892"></a>
+<span class="sourceLineNo">893</span> LOG.info("Finished waiting on RegionServer count=" + count + "; waited=" + slept + "ms," +<a name="line.893"></a>
+<span class="sourceLineNo">894</span> " expected min=" + minToStart + " server(s), max=" + getStrForMax(maxToStart) + " server(s),"+<a name="line.894"></a>
+<span class="sourceLineNo">895</span> " master is "+ (this.master.isStopped() ? "stopped.": "running"));<a name="line.895"></a>
+<span class="sourceLineNo">896</span> }<a name="line.896"></a>
+<span class="sourceLineNo">897</span><a name="line.897"></a>
+<span class="sourceLineNo">898</span> private String getStrForMax(final int max) {<a name="line.898"></a>
+<span class="sourceLineNo">899</span> return max == Integer.MAX_VALUE? "NO_LIMIT": Integer.toString(max);<a name="line.899"></a>
+<span class="sourceLineNo">900</span> }<a name="line.900"></a>
+<span class="sourceLineNo">901</span><a name="line.901"></a>
+<span class="sourceLineNo">902</span> /**<a name="line.902"></a>
+<span class="sourceLineNo">903</span> * @return A copy of the internal list of online servers.<a name="line.903"></a>
+<span class="sourceLineNo">904</span> */<a name="line.904"></a>
+<span class="sourceLineNo">905</span> public List<ServerName> getOnlineServersList() {<a name="line.905"></a>
+<span class="sourceLineNo">906</span> // TODO: optimize the load balancer call so we don't need to make a new list<a name="line.906"></a>
+<span class="sourceLineNo">907</span> // TODO: FIX. THIS IS POPULAR CALL.<a name="line.907"></a>
+<span class="sourceLineNo">908</span> return new ArrayList<>(this.onlineServers.keySet());<a name="line.908"></a>
+<span class="sourceLineNo">909</span> }<a name="line.909"></a>
+<span class="sourceLineNo">910</span><a name="line.910"></a>
+<span class="sourceLineNo">911</span> /**<a name="line.911"></a>
+<span class="sourceLineNo">912</span> * @param keys The target server name<a name="line.912"></a>
+<span class="sourceLineNo">913</span> * @param idleServerPredicator Evaluates the server on the given load<a name="line.913"></a>
+<span class="sourceLineNo">914</span> * @return A copy of the internal list of online servers matched by the predicator<a name="line.914"></a>
+<span class="sourceLineNo">915</span> */<a name="line.915"></a>
+<span class="sourceLineNo">916</span> public List<ServerName> getOnlineServersListWithPredicator(List<ServerName> keys,<a name="line.916"></a>
+<span class="sourceLineNo">917</span> Predicate<ServerMetrics> idleServerPredicator) {<a name="line.917"></a>
+<span class="sourceLineNo">918</span> List<ServerName> names = new ArrayList<>();<a name="line.918"></a>
+<span class="sourceLineNo">919</span> if (keys != null && idleServerPredicator != null) {<a name="line.919"></a>
+<span class="sourceLineNo">920</span> keys.forEach(name -> {<a name="line.920"></a>
+<span class="sourceLineNo">921</span> ServerMetrics load = onlineServers.get(name);<a name="line.921"></a>
+<span class="sourceLineNo">922</span> if (load != null) {<a name="line.922"></a>
+<span class="sourceLineNo">923</span> if (idleServerPredicator.test(load)) {<a name="line.923"></a>
+<span class="sourceLineNo">924</span> names.add(name);<a name="line.924"></a>
+<span class="sourceLineNo">925</span> }<a name="line.925"></a>
+<span class="sourceLineNo">926</span> }<a name="line.926"></a>
+<span class="sourceLineNo">927</span> });<a name="line.927"></a>
+<span class="sourceLineNo">928</span> }<a name="line.928"></a>
+<span class="sourceLineNo">929</span> return names;<a name="line.929"></a>
+<span class="sourceLineNo">930</span> }<a name="line.930"></a>
+<span class="sourceLineNo">931</span><a name="line.931"></a>
+<span class="sourceLineNo">932</span> /**<a name="line.932"></a>
+<span class="sourceLineNo">933</span> * @return A copy of the internal list of draining servers.<a name="line.933"></a>
+<span class="sourceLineNo">934</span> */<a name="line.934"></a>
+<span class="sourceLineNo">935</span> public List<ServerName> getDrainingServersList() {<a name="line.935"></a>
+<span class="sourceLineNo">936</span> return new ArrayList<>(this.drainingServers);<a name="line.936"></a>
+<span class="sourceLineNo">937</span> }<a name="line.937"></a>
+<span class="sourceLineNo">938</span><a name="line.938"></a>
+<span class="sourceLineNo">939</span> /**<a name="line.939"></a>
+<span class="sourceLineNo">940</span> * @return A copy of the internal set of deadNotExpired servers.<a name="line.940"></a>
+<span c
<TRUNCATED>
[14/51] [partial] hbase-site git commit: Published site at
7d3750bd9fc9747623549c242cc4171e224b3eaf.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/3469cbc0/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html
index 5420d82..6ea3672 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html
@@ -316,687 +316,728 @@
<span class="sourceLineNo">308</span> }<a name="line.308"></a>
<span class="sourceLineNo">309</span> }<a name="line.309"></a>
<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span> public enum ServerState { ONLINE, SPLITTING, OFFLINE }<a name="line.311"></a>
-<span class="sourceLineNo">312</span> public static class ServerStateNode implements Comparable<ServerStateNode> {<a name="line.312"></a>
-<span class="sourceLineNo">313</span> private final ServerReportEvent reportEvent;<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> private final Set<RegionStateNode> regions;<a name="line.315"></a>
-<span class="sourceLineNo">316</span> private final ServerName serverName;<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span> private volatile ServerState state = ServerState.ONLINE;<a name="line.318"></a>
-<span class="sourceLineNo">319</span> private volatile int versionNumber = 0;<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span> public ServerStateNode(final ServerName serverName) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span> this.serverName = serverName;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> this.regions = ConcurrentHashMap.newKeySet();<a name="line.323"></a>
-<span class="sourceLineNo">324</span> this.reportEvent = new ServerReportEvent(serverName);<a name="line.324"></a>
-<span class="sourceLineNo">325</span> }<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> public ServerName getServerName() {<a name="line.327"></a>
-<span class="sourceLineNo">328</span> return serverName;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> }<a name="line.329"></a>
+<span class="sourceLineNo">311</span> /**<a name="line.311"></a>
+<span class="sourceLineNo">312</span> * Server State.<a name="line.312"></a>
+<span class="sourceLineNo">313</span> */<a name="line.313"></a>
+<span class="sourceLineNo">314</span> public enum ServerState {<a name="line.314"></a>
+<span class="sourceLineNo">315</span> /**<a name="line.315"></a>
+<span class="sourceLineNo">316</span> * Initial state. Available.<a name="line.316"></a>
+<span class="sourceLineNo">317</span> */<a name="line.317"></a>
+<span class="sourceLineNo">318</span> ONLINE,<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span> /**<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * Server expired/crashed. Currently undergoing WAL splitting.<a name="line.321"></a>
+<span class="sourceLineNo">322</span> */<a name="line.322"></a>
+<span class="sourceLineNo">323</span> SPLITTING,<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span> /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * WAL splitting done.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> */<a name="line.327"></a>
+<span class="sourceLineNo">328</span> OFFLINE<a name="line.328"></a>
+<span class="sourceLineNo">329</span> }<a name="line.329"></a>
<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> public ServerState getState() {<a name="line.331"></a>
-<span class="sourceLineNo">332</span> return state;<a name="line.332"></a>
-<span class="sourceLineNo">333</span> }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> public int getVersionNumber() {<a name="line.335"></a>
-<span class="sourceLineNo">336</span> return versionNumber;<a name="line.336"></a>
-<span class="sourceLineNo">337</span> }<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span> public ProcedureEvent<?> getReportEvent() {<a name="line.339"></a>
-<span class="sourceLineNo">340</span> return reportEvent;<a name="line.340"></a>
-<span class="sourceLineNo">341</span> }<a name="line.341"></a>
+<span class="sourceLineNo">331</span> /**<a name="line.331"></a>
+<span class="sourceLineNo">332</span> * State of Server; list of hosted regions, etc.<a name="line.332"></a>
+<span class="sourceLineNo">333</span> */<a name="line.333"></a>
+<span class="sourceLineNo">334</span> public static class ServerStateNode implements Comparable<ServerStateNode> {<a name="line.334"></a>
+<span class="sourceLineNo">335</span> private final ServerReportEvent reportEvent;<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> private final Set<RegionStateNode> regions;<a name="line.337"></a>
+<span class="sourceLineNo">338</span> private final ServerName serverName;<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span> private volatile ServerState state = ServerState.ONLINE;<a name="line.340"></a>
+<span class="sourceLineNo">341</span> private volatile int versionNumber = 0;<a name="line.341"></a>
<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span> public boolean isInState(final ServerState... expected) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span> boolean expectedState = false;<a name="line.344"></a>
-<span class="sourceLineNo">345</span> if (expected != null) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span> for (int i = 0; i < expected.length; ++i) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> expectedState |= (state == expected[i]);<a name="line.347"></a>
-<span class="sourceLineNo">348</span> }<a name="line.348"></a>
-<span class="sourceLineNo">349</span> }<a name="line.349"></a>
-<span class="sourceLineNo">350</span> return expectedState;<a name="line.350"></a>
+<span class="sourceLineNo">343</span> public ServerStateNode(final ServerName serverName) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span> this.serverName = serverName;<a name="line.344"></a>
+<span class="sourceLineNo">345</span> this.regions = ConcurrentHashMap.newKeySet();<a name="line.345"></a>
+<span class="sourceLineNo">346</span> this.reportEvent = new ServerReportEvent(serverName);<a name="line.346"></a>
+<span class="sourceLineNo">347</span> }<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span> public ServerName getServerName() {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> return serverName;<a name="line.350"></a>
<span class="sourceLineNo">351</span> }<a name="line.351"></a>
<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span> public void setState(final ServerState state) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span> this.state = state;<a name="line.354"></a>
+<span class="sourceLineNo">353</span> public ServerState getState() {<a name="line.353"></a>
+<span class="sourceLineNo">354</span> return state;<a name="line.354"></a>
<span class="sourceLineNo">355</span> }<a name="line.355"></a>
<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span> public void setVersionNumber(final int versionNumber) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> this.versionNumber = versionNumber;<a name="line.358"></a>
+<span class="sourceLineNo">357</span> public int getVersionNumber() {<a name="line.357"></a>
+<span class="sourceLineNo">358</span> return versionNumber;<a name="line.358"></a>
<span class="sourceLineNo">359</span> }<a name="line.359"></a>
<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span> public Set<RegionStateNode> getRegions() {<a name="line.361"></a>
-<span class="sourceLineNo">362</span> return regions;<a name="line.362"></a>
+<span class="sourceLineNo">361</span> public ProcedureEvent<?> getReportEvent() {<a name="line.361"></a>
+<span class="sourceLineNo">362</span> return reportEvent;<a name="line.362"></a>
<span class="sourceLineNo">363</span> }<a name="line.363"></a>
<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span> public int getRegionCount() {<a name="line.365"></a>
-<span class="sourceLineNo">366</span> return regions.size();<a name="line.366"></a>
+<span class="sourceLineNo">365</span> public boolean isOffline() {<a name="line.365"></a>
+<span class="sourceLineNo">366</span> return this.state.equals(ServerState.OFFLINE);<a name="line.366"></a>
<span class="sourceLineNo">367</span> }<a name="line.367"></a>
<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span> public ArrayList<RegionInfo> getRegionInfoList() {<a name="line.369"></a>
-<span class="sourceLineNo">370</span> ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(regions.size());<a name="line.370"></a>
-<span class="sourceLineNo">371</span> for (RegionStateNode region: regions) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span> hris.add(region.getRegionInfo());<a name="line.372"></a>
-<span class="sourceLineNo">373</span> }<a name="line.373"></a>
-<span class="sourceLineNo">374</span> return hris;<a name="line.374"></a>
-<span class="sourceLineNo">375</span> }<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span> public void addRegion(final RegionStateNode regionNode) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span> this.regions.add(regionNode);<a name="line.378"></a>
-<span class="sourceLineNo">379</span> }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span> public void removeRegion(final RegionStateNode regionNode) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span> this.regions.remove(regionNode);<a name="line.382"></a>
-<span class="sourceLineNo">383</span> }<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public int compareTo(final ServerStateNode other) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> return getServerName().compareTo(other.getServerName());<a name="line.387"></a>
-<span class="sourceLineNo">388</span> }<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span> @Override<a name="line.390"></a>
-<span class="sourceLineNo">391</span> public int hashCode() {<a name="line.391"></a>
-<span class="sourceLineNo">392</span> return getServerName().hashCode();<a name="line.392"></a>
+<span class="sourceLineNo">369</span> public boolean isInState(final ServerState... expected) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span> boolean expectedState = false;<a name="line.370"></a>
+<span class="sourceLineNo">371</span> if (expected != null) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span> for (int i = 0; i < expected.length; ++i) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> expectedState |= (state == expected[i]);<a name="line.373"></a>
+<span class="sourceLineNo">374</span> }<a name="line.374"></a>
+<span class="sourceLineNo">375</span> }<a name="line.375"></a>
+<span class="sourceLineNo">376</span> return expectedState;<a name="line.376"></a>
+<span class="sourceLineNo">377</span> }<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span> public void setState(final ServerState state) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span> this.state = state;<a name="line.380"></a>
+<span class="sourceLineNo">381</span> }<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span> public void setVersionNumber(final int versionNumber) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span> this.versionNumber = versionNumber;<a name="line.384"></a>
+<span class="sourceLineNo">385</span> }<a name="line.385"></a>
+<span class="sourceLineNo">386</span><a name="line.386"></a>
+<span class="sourceLineNo">387</span> public Set<RegionStateNode> getRegions() {<a name="line.387"></a>
+<span class="sourceLineNo">388</span> return regions;<a name="line.388"></a>
+<span class="sourceLineNo">389</span> }<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span> public int getRegionCount() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span> return regions.size();<a name="line.392"></a>
<span class="sourceLineNo">393</span> }<a name="line.393"></a>
<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
-<span class="sourceLineNo">396</span> public boolean equals(final Object other) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span> if (this == other) return true;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> if (!(other instanceof ServerStateNode)) return false;<a name="line.398"></a>
-<span class="sourceLineNo">399</span> return compareTo((ServerStateNode)other) == 0;<a name="line.399"></a>
-<span class="sourceLineNo">400</span> }<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span> @Override<a name="line.402"></a>
-<span class="sourceLineNo">403</span> public String toString() {<a name="line.403"></a>
-<span class="sourceLineNo">404</span> return String.format("ServerStateNode(%s)", getServerName());<a name="line.404"></a>
+<span class="sourceLineNo">395</span> public ArrayList<RegionInfo> getRegionInfoList() {<a name="line.395"></a>
+<span class="sourceLineNo">396</span> ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(regions.size());<a name="line.396"></a>
+<span class="sourceLineNo">397</span> for (RegionStateNode region: regions) {<a name="line.397"></a>
+<span class="sourceLineNo">398</span> hris.add(region.getRegionInfo());<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span> return hris;<a name="line.400"></a>
+<span class="sourceLineNo">401</span> }<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span> public void addRegion(final RegionStateNode regionNode) {<a name="line.403"></a>
+<span class="sourceLineNo">404</span> this.regions.add(regionNode);<a name="line.404"></a>
<span class="sourceLineNo">405</span> }<a name="line.405"></a>
-<span class="sourceLineNo">406</span> }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span> public final static RegionStateStampComparator REGION_STATE_STAMP_COMPARATOR =<a name="line.408"></a>
-<span class="sourceLineNo">409</span> new RegionStateStampComparator();<a name="line.409"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span> public void removeRegion(final RegionStateNode regionNode) {<a name="line.407"></a>
+<span class="sourceLineNo">408</span> this.regions.remove(regionNode);<a name="line.408"></a>
+<span class="sourceLineNo">409</span> }<a name="line.409"></a>
<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span> // TODO: Replace the ConcurrentSkipListMaps<a name="line.411"></a>
-<span class="sourceLineNo">412</span> /**<a name="line.412"></a>
-<span class="sourceLineNo">413</span> * RegionName -- i.e. RegionInfo.getRegionName() -- as bytes to {@link RegionStateNode}<a name="line.413"></a>
-<span class="sourceLineNo">414</span> */<a name="line.414"></a>
-<span class="sourceLineNo">415</span> private final ConcurrentSkipListMap<byte[], RegionStateNode> regionsMap =<a name="line.415"></a>
-<span class="sourceLineNo">416</span> new ConcurrentSkipListMap<byte[], RegionStateNode>(Bytes.BYTES_COMPARATOR);<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionInTransition =<a name="line.418"></a>
-<span class="sourceLineNo">419</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>(RegionInfo.COMPARATOR);<a name="line.419"></a>
+<span class="sourceLineNo">411</span> @Override<a name="line.411"></a>
+<span class="sourceLineNo">412</span> public int compareTo(final ServerStateNode other) {<a name="line.412"></a>
+<span class="sourceLineNo">413</span> return getServerName().compareTo(other.getServerName());<a name="line.413"></a>
+<span class="sourceLineNo">414</span> }<a name="line.414"></a>
+<span class="sourceLineNo">415</span><a name="line.415"></a>
+<span class="sourceLineNo">416</span> @Override<a name="line.416"></a>
+<span class="sourceLineNo">417</span> public int hashCode() {<a name="line.417"></a>
+<span class="sourceLineNo">418</span> return getServerName().hashCode();<a name="line.418"></a>
+<span class="sourceLineNo">419</span> }<a name="line.419"></a>
<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span> /**<a name="line.421"></a>
-<span class="sourceLineNo">422</span> * Regions marked as offline on a read of hbase:meta. Unused or at least, once<a name="line.422"></a>
-<span class="sourceLineNo">423</span> * offlined, regions have no means of coming on line again. TODO.<a name="line.423"></a>
-<span class="sourceLineNo">424</span> */<a name="line.424"></a>
-<span class="sourceLineNo">425</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionOffline =<a name="line.425"></a>
-<span class="sourceLineNo">426</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>();<a name="line.426"></a>
+<span class="sourceLineNo">421</span> @Override<a name="line.421"></a>
+<span class="sourceLineNo">422</span> public boolean equals(final Object other) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span> if (this == other) return true;<a name="line.423"></a>
+<span class="sourceLineNo">424</span> if (!(other instanceof ServerStateNode)) return false;<a name="line.424"></a>
+<span class="sourceLineNo">425</span> return compareTo((ServerStateNode)other) == 0;<a name="line.425"></a>
+<span class="sourceLineNo">426</span> }<a name="line.426"></a>
<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span> private final ConcurrentSkipListMap<byte[], RegionFailedOpen> regionFailedOpen =<a name="line.428"></a>
-<span class="sourceLineNo">429</span> new ConcurrentSkipListMap<byte[], RegionFailedOpen>(Bytes.BYTES_COMPARATOR);<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span> private final ConcurrentHashMap<ServerName, ServerStateNode> serverMap =<a name="line.431"></a>
-<span class="sourceLineNo">432</span> new ConcurrentHashMap<ServerName, ServerStateNode>();<a name="line.432"></a>
+<span class="sourceLineNo">428</span> @Override<a name="line.428"></a>
+<span class="sourceLineNo">429</span> public String toString() {<a name="line.429"></a>
+<span class="sourceLineNo">430</span> return String.format("ServerStateNode(%s)", getServerName());<a name="line.430"></a>
+<span class="sourceLineNo">431</span> }<a name="line.431"></a>
+<span class="sourceLineNo">432</span> }<a name="line.432"></a>
<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span> public RegionStates() { }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> public void clear() {<a name="line.436"></a>
-<span class="sourceLineNo">437</span> regionsMap.clear();<a name="line.437"></a>
-<span class="sourceLineNo">438</span> regionInTransition.clear();<a name="line.438"></a>
-<span class="sourceLineNo">439</span> regionOffline.clear();<a name="line.439"></a>
-<span class="sourceLineNo">440</span> serverMap.clear();<a name="line.440"></a>
-<span class="sourceLineNo">441</span> }<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span> @VisibleForTesting<a name="line.443"></a>
-<span class="sourceLineNo">444</span> public boolean isRegionInRegionStates(final RegionInfo hri) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span> return (regionsMap.containsKey(hri.getRegionName()) || regionInTransition.containsKey(hri)<a name="line.445"></a>
-<span class="sourceLineNo">446</span> || regionOffline.containsKey(hri));<a name="line.446"></a>
-<span class="sourceLineNo">447</span> }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span> // ==========================================================================<a name="line.449"></a>
-<span class="sourceLineNo">450</span> // RegionStateNode helpers<a name="line.450"></a>
-<span class="sourceLineNo">451</span> // ==========================================================================<a name="line.451"></a>
-<span class="sourceLineNo">452</span> protected RegionStateNode createRegionStateNode(final RegionInfo regionInfo) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> RegionStateNode newNode = new RegionStateNode(regionInfo);<a name="line.453"></a>
-<span class="sourceLineNo">454</span> RegionStateNode oldNode = regionsMap.putIfAbsent(regionInfo.getRegionName(), newNode);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> return oldNode != null ? oldNode : newNode;<a name="line.455"></a>
-<span class="sourceLineNo">456</span> }<a name="line.456"></a>
-<span class="sourceLineNo">457</span><a name="line.457"></a>
-<span class="sourceLineNo">458</span> protected RegionStateNode getOrCreateRegionStateNode(final RegionInfo regionInfo) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> RegionStateNode node = regionsMap.get(regionInfo.getRegionName());<a name="line.459"></a>
-<span class="sourceLineNo">460</span> return node != null ? node : createRegionStateNode(regionInfo);<a name="line.460"></a>
-<span class="sourceLineNo">461</span> }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span> RegionStateNode getRegionStateNodeFromName(final byte[] regionName) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span> return regionsMap.get(regionName);<a name="line.464"></a>
-<span class="sourceLineNo">465</span> }<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span> protected RegionStateNode getRegionStateNode(final RegionInfo regionInfo) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span> return getRegionStateNodeFromName(regionInfo.getRegionName());<a name="line.468"></a>
-<span class="sourceLineNo">469</span> }<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span> public void deleteRegion(final RegionInfo regionInfo) {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> regionsMap.remove(regionInfo.getRegionName());<a name="line.472"></a>
-<span class="sourceLineNo">473</span> // Remove from the offline regions map too if there.<a name="line.473"></a>
-<span class="sourceLineNo">474</span> if (this.regionOffline.containsKey(regionInfo)) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span> if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> this.regionOffline.remove(regionInfo);<a name="line.476"></a>
-<span class="sourceLineNo">477</span> }<a name="line.477"></a>
-<span class="sourceLineNo">478</span> }<a name="line.478"></a>
-<span class="sourceLineNo">479</span><a name="line.479"></a>
-<span class="sourceLineNo">480</span> ArrayList<RegionStateNode> getTableRegionStateNodes(final TableName tableName) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span> final ArrayList<RegionStateNode> regions = new ArrayList<RegionStateNode>();<a name="line.481"></a>
-<span class="sourceLineNo">482</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span> if (!node.getTable().equals(tableName)) break;<a name="line.483"></a>
-<span class="sourceLineNo">484</span> regions.add(node);<a name="line.484"></a>
-<span class="sourceLineNo">485</span> }<a name="line.485"></a>
-<span class="sourceLineNo">486</span> return regions;<a name="line.486"></a>
+<span class="sourceLineNo">434</span> public final static RegionStateStampComparator REGION_STATE_STAMP_COMPARATOR =<a name="line.434"></a>
+<span class="sourceLineNo">435</span> new RegionStateStampComparator();<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span> // TODO: Replace the ConcurrentSkipListMaps<a name="line.437"></a>
+<span class="sourceLineNo">438</span> /**<a name="line.438"></a>
+<span class="sourceLineNo">439</span> * RegionName -- i.e. RegionInfo.getRegionName() -- as bytes to {@link RegionStateNode}<a name="line.439"></a>
+<span class="sourceLineNo">440</span> */<a name="line.440"></a>
+<span class="sourceLineNo">441</span> private final ConcurrentSkipListMap<byte[], RegionStateNode> regionsMap =<a name="line.441"></a>
+<span class="sourceLineNo">442</span> new ConcurrentSkipListMap<byte[], RegionStateNode>(Bytes.BYTES_COMPARATOR);<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionInTransition =<a name="line.444"></a>
+<span class="sourceLineNo">445</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>(RegionInfo.COMPARATOR);<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span> /**<a name="line.447"></a>
+<span class="sourceLineNo">448</span> * Regions marked as offline on a read of hbase:meta. Unused or at least, once<a name="line.448"></a>
+<span class="sourceLineNo">449</span> * offlined, regions have no means of coming on line again. TODO.<a name="line.449"></a>
+<span class="sourceLineNo">450</span> */<a name="line.450"></a>
+<span class="sourceLineNo">451</span> private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionOffline =<a name="line.451"></a>
+<span class="sourceLineNo">452</span> new ConcurrentSkipListMap<RegionInfo, RegionStateNode>();<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span> private final ConcurrentSkipListMap<byte[], RegionFailedOpen> regionFailedOpen =<a name="line.454"></a>
+<span class="sourceLineNo">455</span> new ConcurrentSkipListMap<byte[], RegionFailedOpen>(Bytes.BYTES_COMPARATOR);<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span> private final ConcurrentHashMap<ServerName, ServerStateNode> serverMap =<a name="line.457"></a>
+<span class="sourceLineNo">458</span> new ConcurrentHashMap<ServerName, ServerStateNode>();<a name="line.458"></a>
+<span class="sourceLineNo">459</span><a name="line.459"></a>
+<span class="sourceLineNo">460</span> public RegionStates() { }<a name="line.460"></a>
+<span class="sourceLineNo">461</span><a name="line.461"></a>
+<span class="sourceLineNo">462</span> public void clear() {<a name="line.462"></a>
+<span class="sourceLineNo">463</span> regionsMap.clear();<a name="line.463"></a>
+<span class="sourceLineNo">464</span> regionInTransition.clear();<a name="line.464"></a>
+<span class="sourceLineNo">465</span> regionOffline.clear();<a name="line.465"></a>
+<span class="sourceLineNo">466</span> serverMap.clear();<a name="line.466"></a>
+<span class="sourceLineNo">467</span> }<a name="line.467"></a>
+<span class="sourceLineNo">468</span><a name="line.468"></a>
+<span class="sourceLineNo">469</span> @VisibleForTesting<a name="line.469"></a>
+<span class="sourceLineNo">470</span> public boolean isRegionInRegionStates(final RegionInfo hri) {<a name="line.470"></a>
+<span class="sourceLineNo">471</span> return (regionsMap.containsKey(hri.getRegionName()) || regionInTransition.containsKey(hri)<a name="line.471"></a>
+<span class="sourceLineNo">472</span> || regionOffline.containsKey(hri));<a name="line.472"></a>
+<span class="sourceLineNo">473</span> }<a name="line.473"></a>
+<span class="sourceLineNo">474</span><a name="line.474"></a>
+<span class="sourceLineNo">475</span> // ==========================================================================<a name="line.475"></a>
+<span class="sourceLineNo">476</span> // RegionStateNode helpers<a name="line.476"></a>
+<span class="sourceLineNo">477</span> // ==========================================================================<a name="line.477"></a>
+<span class="sourceLineNo">478</span> protected RegionStateNode createRegionStateNode(final RegionInfo regionInfo) {<a name="line.478"></a>
+<span class="sourceLineNo">479</span> RegionStateNode newNode = new RegionStateNode(regionInfo);<a name="line.479"></a>
+<span class="sourceLineNo">480</span> RegionStateNode oldNode = regionsMap.putIfAbsent(regionInfo.getRegionName(), newNode);<a name="line.480"></a>
+<span class="sourceLineNo">481</span> return oldNode != null ? oldNode : newNode;<a name="line.481"></a>
+<span class="sourceLineNo">482</span> }<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span> protected RegionStateNode getOrCreateRegionStateNode(final RegionInfo regionInfo) {<a name="line.484"></a>
+<span class="sourceLineNo">485</span> RegionStateNode node = regionsMap.get(regionInfo.getRegionName());<a name="line.485"></a>
+<span class="sourceLineNo">486</span> return node != null ? node : createRegionStateNode(regionInfo);<a name="line.486"></a>
<span class="sourceLineNo">487</span> }<a name="line.487"></a>
<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span> ArrayList<RegionState> getTableRegionStates(final TableName tableName) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>();<a name="line.490"></a>
-<span class="sourceLineNo">491</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span> if (!node.getTable().equals(tableName)) break;<a name="line.492"></a>
-<span class="sourceLineNo">493</span> regions.add(node.toRegionState());<a name="line.493"></a>
-<span class="sourceLineNo">494</span> }<a name="line.494"></a>
-<span class="sourceLineNo">495</span> return regions;<a name="line.495"></a>
-<span class="sourceLineNo">496</span> }<a name="line.496"></a>
-<span class="sourceLineNo">497</span><a name="line.497"></a>
-<span class="sourceLineNo">498</span> ArrayList<RegionInfo> getTableRegionsInfo(final TableName tableName) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span> final ArrayList<RegionInfo> regions = new ArrayList<RegionInfo>();<a name="line.499"></a>
-<span class="sourceLineNo">500</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span> if (!node.getTable().equals(tableName)) break;<a name="line.501"></a>
-<span class="sourceLineNo">502</span> regions.add(node.getRegionInfo());<a name="line.502"></a>
+<span class="sourceLineNo">489</span> RegionStateNode getRegionStateNodeFromName(final byte[] regionName) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span> return regionsMap.get(regionName);<a name="line.490"></a>
+<span class="sourceLineNo">491</span> }<a name="line.491"></a>
+<span class="sourceLineNo">492</span><a name="line.492"></a>
+<span class="sourceLineNo">493</span> protected RegionStateNode getRegionStateNode(final RegionInfo regionInfo) {<a name="line.493"></a>
+<span class="sourceLineNo">494</span> return getRegionStateNodeFromName(regionInfo.getRegionName());<a name="line.494"></a>
+<span class="sourceLineNo">495</span> }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span> public void deleteRegion(final RegionInfo regionInfo) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span> regionsMap.remove(regionInfo.getRegionName());<a name="line.498"></a>
+<span class="sourceLineNo">499</span> // Remove from the offline regions map too if there.<a name="line.499"></a>
+<span class="sourceLineNo">500</span> if (this.regionOffline.containsKey(regionInfo)) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span> if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.501"></a>
+<span class="sourceLineNo">502</span> this.regionOffline.remove(regionInfo);<a name="line.502"></a>
<span class="sourceLineNo">503</span> }<a name="line.503"></a>
-<span class="sourceLineNo">504</span> return regions;<a name="line.504"></a>
-<span class="sourceLineNo">505</span> }<a name="line.505"></a>
-<span class="sourceLineNo">506</span><a name="line.506"></a>
-<span class="sourceLineNo">507</span> Collection<RegionStateNode> getRegionStateNodes() {<a name="line.507"></a>
-<span class="sourceLineNo">508</span> return regionsMap.values();<a name="line.508"></a>
-<span class="sourceLineNo">509</span> }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span> public ArrayList<RegionState> getRegionStates() {<a name="line.511"></a>
-<span class="sourceLineNo">512</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>(regionsMap.size());<a name="line.512"></a>
-<span class="sourceLineNo">513</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span> regions.add(node.toRegionState());<a name="line.514"></a>
-<span class="sourceLineNo">515</span> }<a name="line.515"></a>
-<span class="sourceLineNo">516</span> return regions;<a name="line.516"></a>
-<span class="sourceLineNo">517</span> }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span> // ==========================================================================<a name="line.519"></a>
-<span class="sourceLineNo">520</span> // RegionState helpers<a name="line.520"></a>
-<span class="sourceLineNo">521</span> // ==========================================================================<a name="line.521"></a>
-<span class="sourceLineNo">522</span> public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span> RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.523"></a>
-<span class="sourceLineNo">524</span> return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.524"></a>
-<span class="sourceLineNo">525</span> }<a name="line.525"></a>
-<span class="sourceLineNo">526</span><a name="line.526"></a>
-<span class="sourceLineNo">527</span> public RegionState getRegionState(final String encodedRegionName) {<a name="line.527"></a>
-<span class="sourceLineNo">528</span> // TODO: Need a map <encodedName, ...> but it is just dispatch merge...<a name="line.528"></a>
-<span class="sourceLineNo">529</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.529"></a>
-<span class="sourceLineNo">530</span> if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span> return node.toRegionState();<a name="line.531"></a>
-<span class="sourceLineNo">532</span> }<a name="line.532"></a>
-<span class="sourceLineNo">533</span> }<a name="line.533"></a>
-<span class="sourceLineNo">534</span> return null;<a name="line.534"></a>
+<span class="sourceLineNo">504</span> }<a name="line.504"></a>
+<span class="sourceLineNo">505</span><a name="line.505"></a>
+<span class="sourceLineNo">506</span> ArrayList<RegionStateNode> getTableRegionStateNodes(final TableName tableName) {<a name="line.506"></a>
+<span class="sourceLineNo">507</span> final ArrayList<RegionStateNode> regions = new ArrayList<RegionStateNode>();<a name="line.507"></a>
+<span class="sourceLineNo">508</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.508"></a>
+<span class="sourceLineNo">509</span> if (!node.getTable().equals(tableName)) break;<a name="line.509"></a>
+<span class="sourceLineNo">510</span> regions.add(node);<a name="line.510"></a>
+<span class="sourceLineNo">511</span> }<a name="line.511"></a>
+<span class="sourceLineNo">512</span> return regions;<a name="line.512"></a>
+<span class="sourceLineNo">513</span> }<a name="line.513"></a>
+<span class="sourceLineNo">514</span><a name="line.514"></a>
+<span class="sourceLineNo">515</span> ArrayList<RegionState> getTableRegionStates(final TableName tableName) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>();<a name="line.516"></a>
+<span class="sourceLineNo">517</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.517"></a>
+<span class="sourceLineNo">518</span> if (!node.getTable().equals(tableName)) break;<a name="line.518"></a>
+<span class="sourceLineNo">519</span> regions.add(node.toRegionState());<a name="line.519"></a>
+<span class="sourceLineNo">520</span> }<a name="line.520"></a>
+<span class="sourceLineNo">521</span> return regions;<a name="line.521"></a>
+<span class="sourceLineNo">522</span> }<a name="line.522"></a>
+<span class="sourceLineNo">523</span><a name="line.523"></a>
+<span class="sourceLineNo">524</span> ArrayList<RegionInfo> getTableRegionsInfo(final TableName tableName) {<a name="line.524"></a>
+<span class="sourceLineNo">525</span> final ArrayList<RegionInfo> regions = new ArrayList<RegionInfo>();<a name="line.525"></a>
+<span class="sourceLineNo">526</span> for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span> if (!node.getTable().equals(tableName)) break;<a name="line.527"></a>
+<span class="sourceLineNo">528</span> regions.add(node.getRegionInfo());<a name="line.528"></a>
+<span class="sourceLineNo">529</span> }<a name="line.529"></a>
+<span class="sourceLineNo">530</span> return regions;<a name="line.530"></a>
+<span class="sourceLineNo">531</span> }<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span> Collection<RegionStateNode> getRegionStateNodes() {<a name="line.533"></a>
+<span class="sourceLineNo">534</span> return regionsMap.values();<a name="line.534"></a>
<span class="sourceLineNo">535</span> }<a name="line.535"></a>
<span class="sourceLineNo">536</span><a name="line.536"></a>
-<span class="sourceLineNo">537</span> // ============================================================================================<a name="line.537"></a>
-<span class="sourceLineNo">538</span> // TODO: helpers<a name="line.538"></a>
-<span class="sourceLineNo">539</span> // ============================================================================================<a name="line.539"></a>
-<span class="sourceLineNo">540</span> public boolean hasTableRegionStates(final TableName tableName) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span> // TODO<a name="line.541"></a>
-<span class="sourceLineNo">542</span> return !getTableRegionStates(tableName).isEmpty();<a name="line.542"></a>
+<span class="sourceLineNo">537</span> public ArrayList<RegionState> getRegionStates() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span> final ArrayList<RegionState> regions = new ArrayList<RegionState>(regionsMap.size());<a name="line.538"></a>
+<span class="sourceLineNo">539</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span> regions.add(node.toRegionState());<a name="line.540"></a>
+<span class="sourceLineNo">541</span> }<a name="line.541"></a>
+<span class="sourceLineNo">542</span> return regions;<a name="line.542"></a>
<span class="sourceLineNo">543</span> }<a name="line.543"></a>
<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span> /**<a name="line.545"></a>
-<span class="sourceLineNo">546</span> * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.546"></a>
-<span class="sourceLineNo">547</span> */<a name="line.547"></a>
-<span class="sourceLineNo">548</span> public List<RegionInfo> getRegionsOfTable(final TableName table) {<a name="line.548"></a>
-<span class="sourceLineNo">549</span> return getRegionsOfTable(table, false);<a name="line.549"></a>
-<span class="sourceLineNo">550</span> }<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span> /**<a name="line.552"></a>
-<span class="sourceLineNo">553</span> * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.553"></a>
-<span class="sourceLineNo">554</span> * <code>offline</code> to true. Does not include regions that are in the<a name="line.554"></a>
-<span class="sourceLineNo">555</span> * {@link State#SPLIT} state.<a name="line.555"></a>
-<span class="sourceLineNo">556</span> */<a name="line.556"></a>
-<span class="sourceLineNo">557</span> public List<RegionInfo> getRegionsOfTable(final TableName table, final boolean offline) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span> final ArrayList<RegionStateNode> nodes = getTableRegionStateNodes(table);<a name="line.558"></a>
-<span class="sourceLineNo">559</span> final ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(nodes.size());<a name="line.559"></a>
-<span class="sourceLineNo">560</span> for (RegionStateNode node: nodes) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span> if (include(node, offline)) hris.add(node.getRegionInfo());<a name="line.561"></a>
-<span class="sourceLineNo">562</span> }<a name="line.562"></a>
-<span class="sourceLineNo">563</span> return hris;<a name="line.563"></a>
-<span class="sourceLineNo">564</span> }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span> /**<a name="line.566"></a>
-<span class="sourceLineNo">567</span> * Utility. Whether to include region in list of regions. Default is to<a name="line.567"></a>
-<span class="sourceLineNo">568</span> * weed out split and offline regions.<a name="line.568"></a>
-<span class="sourceLineNo">569</span> * @return True if we should include the <code>node</code> (do not include<a name="line.569"></a>
-<span class="sourceLineNo">570</span> * if split or offline unless <code>offline</code> is set to true.<a name="line.570"></a>
-<span class="sourceLineNo">571</span> */<a name="line.571"></a>
-<span class="sourceLineNo">572</span> boolean include(final RegionStateNode node, final boolean offline) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span> if (LOG.isTraceEnabled()) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span> LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.574"></a>
-<span class="sourceLineNo">575</span> }<a name="line.575"></a>
-<span class="sourceLineNo">576</span> if (node.isInState(State.SPLIT)) return false;<a name="line.576"></a>
-<span class="sourceLineNo">577</span> if (node.isInState(State.OFFLINE) && !offline) return false;<a name="line.577"></a>
-<span class="sourceLineNo">578</span> final RegionInfo hri = node.getRegionInfo();<a name="line.578"></a>
-<span class="sourceLineNo">579</span> return (!hri.isOffline() && !hri.isSplit()) ||<a name="line.579"></a>
-<span class="sourceLineNo">580</span> ((hri.isOffline() || hri.isSplit()) && offline);<a name="line.580"></a>
-<span class="sourceLineNo">581</span> }<a name="line.581"></a>
-<span class="sourceLineNo">582</span><a name="line.582"></a>
-<span class="sourceLineNo">583</span> /**<a name="line.583"></a>
-<span class="sourceLineNo">584</span> * Returns the set of regions hosted by the specified server<a name="line.584"></a>
-<span class="sourceLineNo">585</span> * @param serverName the server we are interested in<a name="line.585"></a>
-<span class="sourceLineNo">586</span> * @return set of RegionInfo hosted by the specified server<a name="line.586"></a>
-<span class="sourceLineNo">587</span> */<a name="line.587"></a>
-<span class="sourceLineNo">588</span> public List<RegionInfo> getServerRegionInfoSet(final ServerName serverName) {<a name="line.588"></a>
-<span class="sourceLineNo">589</span> final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.589"></a>
-<span class="sourceLineNo">590</span> if (serverInfo == null) return Collections.emptyList();<a name="line.590"></a>
+<span class="sourceLineNo">545</span> // ==========================================================================<a name="line.545"></a>
+<span class="sourceLineNo">546</span> // RegionState helpers<a name="line.546"></a>
+<span class="sourceLineNo">547</span> // ==========================================================================<a name="line.547"></a>
+<span class="sourceLineNo">548</span> public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.548"></a>
+<span class="sourceLineNo">549</span> RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.549"></a>
+<span class="sourceLineNo">550</span> return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.550"></a>
+<span class="sourceLineNo">551</span> }<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span> public RegionState getRegionState(final String encodedRegionName) {<a name="line.553"></a>
+<span class="sourceLineNo">554</span> // TODO: Need a map <encodedName, ...> but it is just dispatch merge...<a name="line.554"></a>
+<span class="sourceLineNo">555</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.555"></a>
+<span class="sourceLineNo">556</span> if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span> return node.toRegionState();<a name="line.557"></a>
+<span class="sourceLineNo">558</span> }<a name="line.558"></a>
+<span class="sourceLineNo">559</span> }<a name="line.559"></a>
+<span class="sourceLineNo">560</span> return null;<a name="line.560"></a>
+<span class="sourceLineNo">561</span> }<a name="line.561"></a>
+<span class="sourceLineNo">562</span><a name="line.562"></a>
+<span class="sourceLineNo">563</span> // ============================================================================================<a name="line.563"></a>
+<span class="sourceLineNo">564</span> // TODO: helpers<a name="line.564"></a>
+<span class="sourceLineNo">565</span> // ============================================================================================<a name="line.565"></a>
+<span class="sourceLineNo">566</span> public boolean hasTableRegionStates(final TableName tableName) {<a name="line.566"></a>
+<span class="sourceLineNo">567</span> // TODO<a name="line.567"></a>
+<span class="sourceLineNo">568</span> return !getTableRegionStates(tableName).isEmpty();<a name="line.568"></a>
+<span class="sourceLineNo">569</span> }<a name="line.569"></a>
+<span class="sourceLineNo">570</span><a name="line.570"></a>
+<span class="sourceLineNo">571</span> /**<a name="line.571"></a>
+<span class="sourceLineNo">572</span> * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.572"></a>
+<span class="sourceLineNo">573</span> */<a name="line.573"></a>
+<span class="sourceLineNo">574</span> public List<RegionInfo> getRegionsOfTable(final TableName table) {<a name="line.574"></a>
+<span class="sourceLineNo">575</span> return getRegionsOfTable(table, false);<a name="line.575"></a>
+<span class="sourceLineNo">576</span> }<a name="line.576"></a>
+<span class="sourceLineNo">577</span><a name="line.577"></a>
+<span class="sourceLineNo">578</span> /**<a name="line.578"></a>
+<span class="sourceLineNo">579</span> * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.579"></a>
+<span class="sourceLineNo">580</span> * <code>offline</code> to true. Does not include regions that are in the<a name="line.580"></a>
+<span class="sourceLineNo">581</span> * {@link State#SPLIT} state.<a name="line.581"></a>
+<span class="sourceLineNo">582</span> */<a name="line.582"></a>
+<span class="sourceLineNo">583</span> public List<RegionInfo> getRegionsOfTable(final TableName table, final boolean offline) {<a name="line.583"></a>
+<span class="sourceLineNo">584</span> final ArrayList<RegionStateNode> nodes = getTableRegionStateNodes(table);<a name="line.584"></a>
+<span class="sourceLineNo">585</span> final ArrayList<RegionInfo> hris = new ArrayList<RegionInfo>(nodes.size());<a name="line.585"></a>
+<span class="sourceLineNo">586</span> for (RegionStateNode node: nodes) {<a name="line.586"></a>
+<span class="sourceLineNo">587</span> if (include(node, offline)) hris.add(node.getRegionInfo());<a name="line.587"></a>
+<span class="sourceLineNo">588</span> }<a name="line.588"></a>
+<span class="sourceLineNo">589</span> return hris;<a name="line.589"></a>
+<span class="sourceLineNo">590</span> }<a name="line.590"></a>
<span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span> synchronized (serverInfo) {<a name="line.592"></a>
-<span class="sourceLineNo">593</span> return serverInfo.getRegionInfoList();<a name="line.593"></a>
-<span class="sourceLineNo">594</span> }<a name="line.594"></a>
-<span class="sourceLineNo">595</span> }<a name="line.595"></a>
-<span class="sourceLineNo">596</span><a name="line.596"></a>
-<span class="sourceLineNo">597</span> // ============================================================================================<a name="line.597"></a>
-<span class="sourceLineNo">598</span> // TODO: split helpers<a name="line.598"></a>
-<span class="sourceLineNo">599</span> // ============================================================================================<a name="line.599"></a>
-<span class="sourceLineNo">600</span> public void logSplit(final ServerName serverName) {<a name="line.600"></a>
-<span class="sourceLineNo">601</span> final ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.601"></a>
-<span class="sourceLineNo">602</span> synchronized (serverNode) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span> serverNode.setState(ServerState.SPLITTING);<a name="line.603"></a>
-<span class="sourceLineNo">604</span> /* THIS HAS TO BE WRONG. THIS IS SPLITTING OF REGION, NOT SPLITTING WALs.<a name="line.604"></a>
-<span class="sourceLineNo">605</span> for (RegionStateNode regionNode: serverNode.getRegions()) {<a name="line.605"></a>
-<span class="sourceLineNo">606</span> synchronized (regionNode) {<a name="line.606"></a>
-<span class="sourceLineNo">607</span> // TODO: Abort procedure if present<a name="line.607"></a>
-<span class="sourceLineNo">608</span> regionNode.setState(State.SPLITTING);<a name="line.608"></a>
-<span class="sourceLineNo">609</span> }<a name="line.609"></a>
-<span class="sourceLineNo">610</span> }*/<a name="line.610"></a>
-<span class="sourceLineNo">611</span> }<a name="line.611"></a>
-<span class="sourceLineNo">612</span> }<a name="line.612"></a>
-<span class="sourceLineNo">613</span><a name="line.613"></a>
-<span class="sourceLineNo">614</span> public void logSplit(final RegionInfo regionInfo) {<a name="line.614"></a>
-<span class="sourceLineNo">615</span> final RegionStateNode regionNode = getRegionStateNode(regionInfo);<a name="line.615"></a>
-<span class="sourceLineNo">616</span> synchronized (regionNode) {<a name="line.616"></a>
-<span class="sourceLineNo">617</span> regionNode.setState(State.SPLIT);<a name="line.617"></a>
-<span class="sourceLineNo">618</span> }<a name="line.618"></a>
-<span class="sourceLineNo">619</span> }<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span> @VisibleForTesting<a name="line.621"></a>
-<span class="sourceLineNo">622</span> public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span> final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.623"></a>
-<span class="sourceLineNo">624</span> synchronized (regionNode) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span> regionNode.setState(state);<a name="line.625"></a>
-<span class="sourceLineNo">626</span> }<a name="line.626"></a>
-<span class="sourceLineNo">627</span> }<a name="line.627"></a>
-<span class="sourceLineNo">628</span><a name="line.628"></a>
-<span class="sourceLineNo">629</span> // ============================================================================================<a name="line.629"></a>
-<span class="sourceLineNo">630</span> // TODO:<a name="line.630"></a>
-<span class="sourceLineNo">631</span> // ============================================================================================<a name="line.631"></a>
-<span class="sourceLineNo">632</span> public List<RegionInfo> getAssignedRegions() {<a name="line.632"></a>
-<span class="sourceLineNo">633</span> final List<RegionInfo> result = new ArrayList<RegionInfo>();<a name="line.633"></a>
-<span class="sourceLineNo">634</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span> if (!node.isInTransition()) {<a name="line.635"></a>
-<span class="sourceLineNo">636</span> result.add(node.getRegionInfo());<a name="line.636"></a>
-<span class="sourceLineNo">637</span> }<a name="line.637"></a>
-<span class="sourceLineNo">638</span> }<a name="line.638"></a>
-<span class="sourceLineNo">639</span> return result;<a name="line.639"></a>
-<span class="sourceLineNo">640</span> }<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span> public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.643"></a>
-<span class="sourceLineNo">644</span> if (region != null) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span> synchronized (region) {<a name="line.645"></a>
-<span class="sourceLineNo">646</span> return region.isInState(state);<a name="line.646"></a>
-<span class="sourceLineNo">647</span> }<a name="line.647"></a>
-<span class="sourceLineNo">648</span> }<a name="line.648"></a>
-<span class="sourceLineNo">649</span> return false;<a name="line.649"></a>
-<span class="sourceLineNo">650</span> }<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span> public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span> return isRegionInState(regionInfo, State.OPEN);<a name="line.653"></a>
+<span class="sourceLineNo">592</span> /**<a name="line.592"></a>
+<span class="sourceLineNo">593</span> * Utility. Whether to include region in list of regions. Default is to<a name="line.593"></a>
+<span class="sourceLineNo">594</span> * weed out split and offline regions.<a name="line.594"></a>
+<span class="sourceLineNo">595</span> * @return True if we should include the <code>node</code> (do not include<a name="line.595"></a>
+<span class="sourceLineNo">596</span> * if split or offline unless <code>offline</code> is set to true.<a name="line.596"></a>
+<span class="sourceLineNo">597</span> */<a name="line.597"></a>
+<span class="sourceLineNo">598</span> boolean include(final RegionStateNode node, final boolean offline) {<a name="line.598"></a>
+<span class="sourceLineNo">599</span> if (LOG.isTraceEnabled()) {<a name="line.599"></a>
+<span class="sourceLineNo">600</span> LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.600"></a>
+<span class="sourceLineNo">601</span> }<a name="line.601"></a>
+<span class="sourceLineNo">602</span> if (node.isInState(State.SPLIT)) return false;<a name="line.602"></a>
+<span class="sourceLineNo">603</span> if (node.isInState(State.OFFLINE) && !offline) return false;<a name="line.603"></a>
+<span class="sourceLineNo">604</span> final RegionInfo hri = node.getRegionInfo();<a name="line.604"></a>
+<span class="sourceLineNo">605</span> return (!hri.isOffline() && !hri.isSplit()) ||<a name="line.605"></a>
+<span class="sourceLineNo">606</span> ((hri.isOffline() || hri.isSplit()) && offline);<a name="line.606"></a>
+<span class="sourceLineNo">607</span> }<a name="line.607"></a>
+<span class="sourceLineNo">608</span><a name="line.608"></a>
+<span class="sourceLineNo">609</span> /**<a name="line.609"></a>
+<span class="sourceLineNo">610</span> * Returns the set of regions hosted by the specified server<a name="line.610"></a>
+<span class="sourceLineNo">611</span> * @param serverName the server we are interested in<a name="line.611"></a>
+<span class="sourceLineNo">612</span> * @return set of RegionInfo hosted by the specified server<a name="line.612"></a>
+<span class="sourceLineNo">613</span> */<a name="line.613"></a>
+<span class="sourceLineNo">614</span> public List<RegionInfo> getServerRegionInfoSet(final ServerName serverName) {<a name="line.614"></a>
+<span class="sourceLineNo">615</span> final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.615"></a>
+<span class="sourceLineNo">616</span> if (serverInfo == null) return Collections.emptyList();<a name="line.616"></a>
+<span class="sourceLineNo">617</span><a name="line.617"></a>
+<span class="sourceLineNo">618</span> synchronized (serverInfo) {<a name="line.618"></a>
+<span class="sourceLineNo">619</span> return serverInfo.getRegionInfoList();<a name="line.619"></a>
+<span class="sourceLineNo">620</span> }<a name="line.620"></a>
+<span class="sourceLineNo">621</span> }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span> // ============================================================================================<a name="line.623"></a>
+<span class="sourceLineNo">624</span> // TODO: split helpers<a name="line.624"></a>
+<span class="sourceLineNo">625</span> // ============================================================================================<a name="line.625"></a>
+<span class="sourceLineNo">626</span><a name="line.626"></a>
+<span class="sourceLineNo">627</span> /**<a name="line.627"></a>
+<span class="sourceLineNo">628</span> * Call this when we start log splitting a crashed Server.<a name="line.628"></a>
+<span class="sourceLineNo">629</span> * @see #logSplit(ServerName)<a name="line.629"></a>
+<span class="sourceLineNo">630</span> */<a name="line.630"></a>
+<span class="sourceLineNo">631</span> public void logSplitting(final ServerName serverName) {<a name="line.631"></a>
+<span class="sourceLineNo">632</span> final ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.632"></a>
+<span class="sourceLineNo">633</span> synchronized (serverNode) {<a name="line.633"></a>
+<span class="sourceLineNo">634</span> serverNode.setState(ServerState.SPLITTING);<a name="line.634"></a>
+<span class="sourceLineNo">635</span> }<a name="line.635"></a>
+<span class="sourceLineNo">636</span> }<a name="line.636"></a>
+<span class="sourceLineNo">637</span><a name="line.637"></a>
+<span class="sourceLineNo">638</span> /**<a name="line.638"></a>
+<span class="sourceLineNo">639</span> * Called after we've split all logs on a crashed Server.<a name="line.639"></a>
+<span class="sourceLineNo">640</span> * @see #logSplitting(ServerName)<a name="line.640"></a>
+<span class="sourceLineNo">641</span> */<a name="line.641"></a>
+<span class="sourceLineNo">642</span> public void logSplit(final ServerName serverName) {<a name="line.642"></a>
+<span class="sourceLineNo">643</span> final ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.643"></a>
+<span class="sourceLineNo">644</span> synchronized (serverNode) {<a name="line.644"></a>
+<span class="sourceLineNo">645</span> serverNode.setState(ServerState.OFFLINE);<a name="line.645"></a>
+<span class="sourceLineNo">646</span> }<a name="line.646"></a>
+<span class="sourceLineNo">647</span> }<a name="line.647"></a>
+<span class="sourceLineNo">648</span><a name="line.648"></a>
+<span class="sourceLineNo">649</span> public void logSplit(final RegionInfo regionInfo) {<a name="line.649"></a>
+<span class="sourceLineNo">650</span> final RegionStateNode regionNode = getRegionStateNode(regionInfo);<a name="line.650"></a>
+<span class="sourceLineNo">651</span> synchronized (regionNode) {<a name="line.651"></a>
+<span class="sourceLineNo">652</span> regionNode.setState(State.SPLIT);<a name="line.652"></a>
+<span class="sourceLineNo">653</span> }<a name="line.653"></a>
<span class="sourceLineNo">654</span> }<a name="line.654"></a>
<span class="sourceLineNo">655</span><a name="line.655"></a>
-<span class="sourceLineNo">656</span> /**<a name="line.656"></a>
-<span class="sourceLineNo">657</span> * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.657"></a>
-<span class="sourceLineNo">658</span> */<a name="line.658"></a>
-<span class="sourceLineNo">659</span> public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.659"></a>
-<span class="sourceLineNo">660</span> return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.660"></a>
-<span class="sourceLineNo">661</span> }<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span> public Map<ServerName, List<RegionInfo>> getSnapShotOfAssignment(<a name="line.663"></a>
-<span class="sourceLineNo">664</span> final Collection<RegionInfo> regions) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span> final Map<ServerName, List<RegionInfo>> result = new HashMap<ServerName, List<RegionInfo>>();<a name="line.665"></a>
-<span class="sourceLineNo">666</span> for (RegionInfo hri: regions) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span> final RegionStateNode node = getRegionStateNode(hri);<a name="line.667"></a>
-<span class="sourceLineNo">668</span> if (node == null) continue;<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span> // TODO: State.OPEN<a name="line.670"></a>
-<span class="sourceLineNo">671</span> final ServerName serverName = node.getRegionLocation();<a name="line.671"></a>
-<span class="sourceLineNo">672</span> if (serverName == null) continue;<a name="line.672"></a>
-<span class="sourceLineNo">673</span><a name="line.673"></a>
-<span class="sourceLineNo">674</span> List<RegionInfo> serverRegions = result.get(serverName);<a name="line.674"></a>
-<span class="sourceLineNo">675</span> if (serverRegions == null) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span> serverRegions = new ArrayList<RegionInfo>();<a name="line.676"></a>
-<span class="sourceLineNo">677</span> result.put(serverName, serverRegions);<a name="line.677"></a>
-<span class="sourceLineNo">678</span> }<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span> serverRegions.add(node.getRegionInfo());<a name="line.680"></a>
-<span class="sourceLineNo">681</span> }<a name="line.681"></a>
-<span class="sourceLineNo">682</span> return result;<a name="line.682"></a>
-<span class="sourceLineNo">683</span> }<a name="line.683"></a>
-<span class="sourceLineNo">684</span><a name="line.684"></a>
-<span class="sourceLineNo">685</span> public Map<RegionInfo, ServerName> getRegionAssignments() {<a name="line.685"></a>
-<span class="sourceLineNo">686</span> final HashMap<RegionInfo, ServerName> assignments = new HashMap<RegionInfo, ServerName>();<a name="line.686"></a>
-<span class="sourceLineNo">687</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.687"></a>
-<span class="sourceLineNo">688</span> assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.688"></a>
-<span class="sourceLineNo">689</span> }<a name="line.689"></a>
-<span class="sourceLineNo">690</span> return assignments;<a name="line.690"></a>
-<span class="sourceLineNo">691</span> }<a name="line.691"></a>
-<span class="sourceLineNo">692</span><a name="line.692"></a>
-<span class="sourceLineNo">693</span> public Map<RegionState.State, List<RegionInfo>> getRegionByStateOfTable(TableName tableName) {<a name="line.693"></a>
-<span class="sourceLineNo">694</span> final State[] states = State.values();<a name="line.694"></a>
-<span class="sourceLineNo">695</span> final Map<RegionState.State, List<RegionInfo>> tableRegions =<a name="line.695"></a>
-<span class="sourceLineNo">696</span> new HashMap<State, List<RegionInfo>>(states.length);<a name="line.696"></a>
-<span class="sourceLineNo">697</span> for (int i = 0; i < states.length; ++i) {<a name="line.697"></a>
-<span class="sourceLineNo">698</span> tableRegions.put(states[i], new ArrayList<RegionInfo>());<a name="line.698"></a>
-<span class="sourceLineNo">699</span> }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span> if (node.getTable().equals(tableName)) {<a name="line.702"></a>
-<span class="sourceLineNo">703</span> tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.703"></a>
-<span class="sourceLineNo">704</span> }<a name="line.704"></a>
-<span class="sourceLineNo">705</span> }<a name="line.705"></a>
-<span class="sourceLineNo">706</span> return tableRegions;<a name="line.706"></a>
-<span class="sourceLineNo">707</span> }<a name="line.707"></a>
+<span class="sourceLineNo">656</span> @VisibleForTesting<a name="line.656"></a>
+<span class="sourceLineNo">657</span> public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.657"></a>
+<span class="sourceLineNo">658</span> final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.658"></a>
+<span class="sourceLineNo">659</span> synchronized (regionNode) {<a name="line.659"></a>
+<span class="sourceLineNo">660</span> regionNode.setState(state);<a name="line.660"></a>
+<span class="sourceLineNo">661</span> }<a name="line.661"></a>
+<span class="sourceLineNo">662</span> }<a name="line.662"></a>
+<span class="sourceLineNo">663</span><a name="line.663"></a>
+<span class="sourceLineNo">664</span> // ============================================================================================<a name="line.664"></a>
+<span class="sourceLineNo">665</span> // TODO:<a name="line.665"></a>
+<span class="sourceLineNo">666</span> // ============================================================================================<a name="line.666"></a>
+<span class="sourceLineNo">667</span> public List<RegionInfo> getAssignedRegions() {<a name="line.667"></a>
+<span class="sourceLineNo">668</span> final List<RegionInfo> result = new ArrayList<RegionInfo>();<a name="line.668"></a>
+<span class="sourceLineNo">669</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.669"></a>
+<span class="sourceLineNo">670</span> if (!node.isInTransition()) {<a name="line.670"></a>
+<span class="sourceLineNo">671</span> result.add(node.getRegionInfo());<a name="line.671"></a>
+<span class="sourceLineNo">672</span> }<a name="line.672"></a>
+<span class="sourceLineNo">673</span> }<a name="line.673"></a>
+<span class="sourceLineNo">674</span> return result;<a name="line.674"></a>
+<span class="sourceLineNo">675</span> }<a name="line.675"></a>
+<span class="sourceLineNo">676</span><a name="line.676"></a>
+<span class="sourceLineNo">677</span> public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.677"></a>
+<span class="sourceLineNo">678</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.678"></a>
+<span class="sourceLineNo">679</span> if (region != null) {<a name="line.679"></a>
+<span class="sourceLineNo">680</span> synchronized (region) {<a name="line.680"></a>
+<span class="sourceLineNo">681</span> return region.isInState(state);<a name="line.681"></a>
+<span class="sourceLineNo">682</span> }<a name="line.682"></a>
+<span class="sourceLineNo">683</span> }<a name="line.683"></a>
+<span class="sourceLineNo">684</span> return false;<a name="line.684"></a>
+<span class="sourceLineNo">685</span> }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span> public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.687"></a>
+<span class="sourceLineNo">688</span> return isRegionInState(regionInfo, State.OPEN);<a name="line.688"></a>
+<span class="sourceLineNo">689</span> }<a name="line.689"></a>
+<span class="sourceLineNo">690</span><a name="line.690"></a>
+<span class="sourceLineNo">691</span> /**<a name="line.691"></a>
+<span class="sourceLineNo">692</span> * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.692"></a>
+<span class="sourceLineNo">693</span> */<a name="line.693"></a>
+<span class="sourceLineNo">694</span> public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.694"></a>
+<span class="sourceLineNo">695</span> return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.695"></a>
+<span class="sourceLineNo">696</span> }<a name="line.696"></a>
+<span class="sourceLineNo">697</span><a name="line.697"></a>
+<span class="sourceLineNo">698</span> public Map<ServerName, List<RegionInfo>> getSnapShotOfAssignment(<a name="line.698"></a>
+<span class="sourceLineNo">699</span> final Collection<RegionInfo> regions) {<a name="line.699"></a>
+<span class="sourceLineNo">700</span> final Map<ServerName, List<RegionInfo>> result = new HashMap<ServerName, List<RegionInfo>>();<a name="line.700"></a>
+<span class="sourceLineNo">701</span> for (RegionInfo hri: regions) {<a name="line.701"></a>
+<span class="sourceLineNo">702</span> final RegionStateNode node = getRegionStateNode(hri);<a name="line.702"></a>
+<span class="sourceLineNo">703</span> if (node == null) continue;<a name="line.703"></a>
+<span class="sourceLineNo">704</span><a name="line.704"></a>
+<span class="sourceLineNo">705</span> // TODO: State.OPEN<a name="line.705"></a>
+<span class="sourceLineNo">706</span> final ServerName serverName = node.getRegionLocation();<a name="line.706"></a>
+<span class="sourceLineNo">707</span> if (serverName == null) continue;<a name="line.707"></a>
<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span> public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.709"></a>
-<span class="sourceLineNo">710</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.710"></a>
-<span class="sourceLineNo">711</span> if (region != null) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span> synchronized (region) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span> ServerName server = region.getRegionLocation();<a name="line.713"></a>
-<span class="sourceLineNo">714</span> return server != null ? server : region.getLastHost();<a name="line.714"></a>
-<span class="sourceLineNo">715</span> }<a name="line.715"></a>
+<span class="sourceLineNo">709</span> List<RegionInfo> serverRegions = result.get(serverName);<a name="line.709"></a>
+<span class="sourceLineNo">710</span> if (serverRegions == null) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span> serverRegions = new ArrayList<RegionInfo>();<a name="line.711"></a>
+<span class="sourceLineNo">712</span> result.put(serverName, serverRegions);<a name="line.712"></a>
+<span class="sourceLineNo">713</span> }<a name="line.713"></a>
+<span class="sourceLineNo">714</span><a name="line.714"></a>
+<span class="sourceLineNo">715</span> serverRegions.add(node.getRegionInfo());<a name="line.715"></a>
<span class="sourceLineNo">716</span> }<a name="line.716"></a>
-<span class="sourceLineNo">717</span> return null;<a name="line.717"></a>
+<span class="sourceLineNo">717</span> return result;<a name="line.717"></a>
<span class="sourceLineNo">718</span> }<a name="line.718"></a>
<span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span> /**<a name="line.720"></a>
-<span class="sourceLineNo">721</span> * This is an EXPENSIVE clone. Cloning though is the safest thing to do.<a name="line.721"></a>
-<span class="sourceLineNo">722</span> * Can't let out original since it can change and at least the load balancer<a name="line.722"></a>
-<span class="sourceLineNo">723</span> * wants to iterate this exported list. We need to synchronize on regions<a name="line.723"></a>
-<span class="sourceLineNo">724</span> * since all access to this.servers is under a lock on this.regions.<a name="line.724"></a>
-<span class="sourceLineNo">725</span> * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.725"></a>
-<span class="sourceLineNo">726</span> * @return A clone of current assignments by table.<a name="line.726"></a>
-<span class="sourceLineNo">727</span> */<a name="line.727"></a>
-<span class="sourceLineNo">728</span> public Map<TableName, Map<ServerName, List<RegionInfo>>> getAssignmentsByTable(<a name="line.728"></a>
-<span class="sourceLineNo">729</span> final boolean forceByCluster) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span> if (!forceByCluster) return getAssignmentsByTable();<a name="line.730"></a>
-<span class="sourceLineNo">731</span><a name="line.731"></a>
-<span class="sourceLineNo">732</span> final HashMap<ServerName, List<RegionInfo>> ensemble =<a name="line.732"></a>
-<span class="sourceLineNo">733</span> new HashMap<ServerName, List<RegionInfo>>(serverMap.size());<a name="line.733"></a>
-<span class="sourceLineNo">734</span> for (ServerStateNode serverNode: serverMap.values()) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span> ensemble.put(serverNode.getServerName(), serverNode.getRegionInfoList());<a name="line.735"></a>
-<span class="sourceLineNo">736</span> }<a name="line.736"></a>
-<span class="sourceLineNo">737</span><a name="line.737"></a>
-<span class="sourceLineNo">738</span> // TODO: can we use Collections.singletonMap(HConstants.ENSEMBLE_TABLE_NAME, ensemble)?<a name="line.738"></a>
-<span class="sourceLineNo">739</span> final Map<TableName, Map<ServerName, List<RegionInfo>>> result =<a name="line.739"></a>
-<span class="sourceLineNo">740</span> new HashMap<TableName, Map<ServerName, List<RegionInfo>>>(1);<a name="line.740"></a>
-<span class="sourceLineNo">741</span> result.put(HConstants.ENSEMBLE_TABLE_NAME, ensemble);<a name="line.741"></a>
-<span class="sourceLineNo">742</span> return result;<a name="line.742"></a>
-<span class="sourceLineNo">743</span> }<a name="line.743"></a>
-<span class="sourceLineNo">744</span><a name="line.744"></a>
-<span class="sourceLineNo">745</span> public Map<TableName, Map<ServerName, List<RegionInfo>>> getAssignmentsByTable() {<a name="line.745"></a>
-<span class="sourceLineNo">746</span> final Map<TableName, Map<ServerName, List<RegionInfo>>> result = new HashMap<>();<a name="line.746"></a>
-<span class="sourceLineNo">747</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span> Map<ServerName, List<RegionInfo>> tableResult = result.get(node.getTable());<a name="line.748"></a>
-<span class="sourceLineNo">749</span> if (tableResult == null) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span> tableResult = new HashMap<ServerName, List<RegionInfo>>();<a name="line.750"></a>
-<span class="sourceLineNo">751</span> result.put(node.getTable(), tableResult);<a name="line.751"></a>
-<span class="sourceLineNo">752</span> }<a name="line.752"></a>
-<span class="sourceLineNo">753</span><a name="line.753"></a>
-<span class="sourceLineNo">754</span> final ServerName serverName = node.getRegionLocation();<a name="line.754"></a>
-<span class="sourceLineNo">755</span> if (serverName == null) {<a name="line.755"></a>
-<span class="sourceLineNo">756</span> LOG.info("Skipping, no server for " + node);<a name="line.756"></a>
-<span class="sourceLineNo">757</span> continue;<a name="line.757"></a>
-<span class="sourceLineNo">758</span> }<a name="line.758"></a>
-<span class="sourceLineNo">759</span> List<RegionInfo> serverResult = tableResult.get(serverName);<a name="line.759"></a>
-<span class="sourceLineNo">760</span> if (serverResult == null) {<a name="line.760"></a>
-<span class="sourceLineNo">761</span> serverResult = new ArrayList<RegionInfo>();<a name="line.761"></a>
-<span class="sourceLineNo">762</span> tableResult.put(serverName, serverResult);<a name="line.762"></a>
-<span class="sourceLineNo">763</span> }<a name="line.763"></a>
-<span class="sourceLineNo">764</span><a name="line.764"></a>
-<span class="sourceLineNo">765</span> serverResult.add(node.getRegionInfo());<a name="line.765"></a>
-<span class="sourceLineNo">766</span> }<a name="line.766"></a>
-<span class="sourceLineNo">767</span> // Add online servers with no assignment for the table.<a name="line.767"></a>
-<span class="sourceLineNo">768</span> for (Map<ServerName, List<RegionInfo>> table: result.values()) {<a name="line.768"></a>
-<span class="sourceLineNo">769</span> for (ServerName svr : serverMap.keySet()) {<a name="line.769"></a>
-<span class="sourceLineNo">770</span> if (!table.containsKey(svr)) {<a name="line.770"></a>
-<span class="sourceLineNo">771</span> table.put(svr, new ArrayList<RegionInfo>());<a name="line.771"></a>
-<span class="sourceLineNo">772</span> }<a name="line.772"></a>
-<span class="sourceLineNo">773</span> }<a name="line.773"></a>
-<span class="sourceLineNo">774</span> }<a name="line.774"></a>
-<span class="sourceLineNo">775</span> return result;<a name="line.775"></a>
-<span class="sourceLineNo">776</span> }<a name="line.776"></a>
-<span class="sourceLineNo">777</span><a name="line.777"></a>
-<span class="sourceLineNo">778</span> // ==========================================================================<a name="line.778"></a>
-<span class="sourceLineNo">779</span> // Region in transition helpers<a name="line.779"></a>
-<span class="sourceLineNo">780</span> // ==========================================================================<a name="line.780"></a>
-<span class="sourceLineNo">781</span> protected boolean addRegionInTransition(final RegionStateNode regionNode,<a name="line.781"></a>
-<span class="sourceLineNo">782</span> final RegionTransitionProcedure procedure) {<a name="line.782"></a>
-<span class="sourceLineNo">783</span> if (procedure != null && !regionNode.setProcedure(procedure)) return false;<a name="line.783"></a>
-<span class="sourceLineNo">784</span><a name="line.784"></a>
-<span class="sourceLineNo">785</span> regionInTransition.put(regionNode.getRegionInfo(), regionNode);<a name="line.785"></a>
-<span class="sourceLineNo">786</span> return true;<a name="line.786"></a>
-<span class="sourceLineNo">787</span> }<a name="line.787"></a>
+<span class="sourceLineNo">720</span> public Map<RegionInfo, ServerName> getRegionAssignments() {<a name="line.720"></a>
+<span class="sourceLineNo">721</span> final HashMap<RegionInfo, ServerName> assignments = new HashMap<RegionInfo, ServerName>();<a name="line.721"></a>
+<span class="sourceLineNo">722</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span> assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.723"></a>
+<span class="sourceLineNo">724</span> }<a name="line.724"></a>
+<span class="sourceLineNo">725</span> return assignments;<a name="line.725"></a>
+<span class="sourceLineNo">726</span> }<a name="line.726"></a>
+<span class="sourceLineNo">727</span><a name="line.727"></a>
+<span class="sourceLineNo">728</span> public Map<RegionState.State, List<RegionInfo>> getRegionByStateOfTable(TableName tableName) {<a name="line.728"></a>
+<span class="sourceLineNo">729</span> final State[] states = State.values();<a name="line.729"></a>
+<span class="sourceLineNo">730</span> final Map<RegionState.State, List<RegionInfo>> tableRegions =<a name="line.730"></a>
+<span class="sourceLineNo">731</span> new HashMap<State, List<RegionInfo>>(states.length);<a name="line.731"></a>
+<span class="sourceLineNo">732</span> for (int i = 0; i < states.length; ++i) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span> tableRegions.put(states[i], new ArrayList<RegionInfo>());<a name="line.733"></a>
+<span class="sourceLineNo">734</span> }<a name="line.734"></a>
+<span class="sourceLineNo">735</span><a name="line.735"></a>
+<span class="sourceLineNo">736</span> for (RegionStateNode node: regionsMap.values()) {<a name="line.736"></a>
+<span class="sourceLineNo">737</span> if (node.getTable().equals(tableName)) {<a name="line.737"></a>
+<span class="sourceLineNo">738</span> tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.738"></a>
+<span class="sourceLineNo">739</span> }<a name="line.739"></a>
+<span class="sourceLineNo">740</span> }<a name="line.740"></a>
+<span class="sourceLineNo">741</span> return tableRegions;<a name="line.741"></a>
+<span class="sourceLineNo">742</span> }<a name="line.742"></a>
+<span class="sourceLineNo">743</span><a name="line.743"></a>
+<span class="sourceLineNo">744</span> public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.744"></a>
+<span class="sourceLineNo">745</span> final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.745"></a>
+<span class="sourceLineNo">746</span> if (region != null) {<a name="line.746"></a>
+<span class="sourceLineNo">747</span> synchronized (region) {<a name="line.747"></a>
+<span class="sourceLineNo">748</span> ServerName server = region.getRegionLocation();<a name="line.748"></a>
+<span class="sourceLineNo">749</span> return server != null ? server : region.getLastHost();<a name="line.749"></a>
+<span class="sourceLineNo">750</span> }<a name="line.750"></a>
+<span class="sourceLineNo">751</span> }<a name="line.751"></a>
+<span class="sourceLineNo">752</span> return null;<a name="line.752"></a>
+<span class="sourceLineNo">753</span> }<a name="line.753"></a>
+<span class="sourceLineNo">754</span><a name="line.754"></a>
+<span class="sourceLineNo">755</span> /**<a name="line.755"></a>
+<span class="sourceLineNo">756</span> * This is an EXPENSIVE clone. Cloning though is the safest thing to do.<a name="line.756"></a>
+<span class="sourceLineNo">757</span> * Can't let out original since it can change and at least the load balancer<a name="line.757"></a>
+<span class="sourceLineNo">758</span> * wants to iterate this exported list. We need to synchronize on regions<a name="line.758"></a>
+<span class="sourceLineNo">759</span> * since all access to this.servers is under a lock on this.regions.<a name="line.759"></a>
+<span class="sourceLineNo">760</span> * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.760"></a>
+<span class="sourceLineNo">761</span> * @return A clone of current assignments by table.<a name="line.761"></a>
+<span class="sourceLineNo">762</span> */<a name="line.762"></a>
+<span class="sourceLineNo">763</span> public Map<TableName, Map<ServerName, List<RegionInfo>>> getAssignmentsByTable(<a name="line.763"></a>
+<span class="sourceLineNo">764</span> final boolean forceByCluster) {<a name="line.764"></a>
+<span class="sourceLineNo">765</span>
<TRUNCATED>