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/09/18 14:52:11 UTC

[01/18] hbase-site git commit: Published site at cebb725a9f4ab8dd9d3f306d21d53d6f56161c51.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site bfd2ee27f -> ab5975847


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/testdevapidocs/src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html
index fb460d2..ed463fe 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html
@@ -321,2799 +321,2779 @@
 <span class="sourceLineNo">313</span>            ResultScanner scanner = table.getScanner(s);<a name="line.313"></a>
 <span class="sourceLineNo">314</span>            Result[] next = scanner.next(3);<a name="line.314"></a>
 <span class="sourceLineNo">315</span>            assertEquals(1, next.length);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>          } catch (Throwable t) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>            throw new IOException(t);<a name="line.317"></a>
-<span class="sourceLineNo">318</span>          }<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>      };<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      SUPERUSER.runAs(scanAction);<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      d = new Delete(row1);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      // with visibility<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      d.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      d.addColumns(fam, qual, HConstants.LATEST_TIMESTAMP);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      table.delete(d);<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        @Override<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        public Void run() throws Exception {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>            Table table = connection.getTable(tableName)) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>            Scan s = new Scan();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>            ResultScanner scanner = table.getScanner(s);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>            Result[] next = scanner.next(3);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>            assertEquals(0, next.length);<a name="line.336"></a>
-<span class="sourceLineNo">337</span>          } catch (Throwable t) {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>            throw new IOException(t);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>          }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>          return null;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        }<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      };<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      SUPERUSER.runAs(scanAction);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    }<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>  @Test<a name="line.347"></a>
-<span class="sourceLineNo">348</span>  public void testDeleteColumnsWithAndWithoutVisibilityLabels() throws Exception {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    TableName tableName = createTable();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      Put put = new Put(row1);<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      put.addColumn(fam, qual, value);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      table.put(put);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      Delete d = new Delete(row1);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      // with visibility<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      d.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      d.addColumns(fam, qual, HConstants.LATEST_TIMESTAMP);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      table.delete(d);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      PrivilegedExceptionAction&lt;Void&gt; scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>        @Override<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        public Void run() throws Exception {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>            Table table = connection.getTable(tableName)) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>            Scan s = new Scan();<a name="line.365"></a>
-<span class="sourceLineNo">366</span>            ResultScanner scanner = table.getScanner(s);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>            Result[] next = scanner.next(3);<a name="line.367"></a>
-<span class="sourceLineNo">368</span>            assertEquals(0, next.length);<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          } catch (Throwable t) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>            throw new IOException(t);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>          }<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          return null;<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>      SUPERUSER.runAs(scanAction);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      d = new Delete(row1);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      // without visibility<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      d.addColumns(fam, qual, HConstants.LATEST_TIMESTAMP);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>      table.delete(d);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>        @Override<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        public Void run() throws Exception {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>            Table table = connection.getTable(tableName)) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>            Scan s = new Scan();<a name="line.385"></a>
-<span class="sourceLineNo">386</span>            ResultScanner scanner = table.getScanner(s);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>            Result[] next = scanner.next(3);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>            assertEquals(0, next.length);<a name="line.388"></a>
-<span class="sourceLineNo">389</span>          } catch (Throwable t) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>            throw new IOException(t);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>          }<a name="line.391"></a>
-<span class="sourceLineNo">392</span>          return null;<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>      SUPERUSER.runAs(scanAction);<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    }<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  }<a name="line.397"></a>
-<span class="sourceLineNo">398</span><a name="line.398"></a>
-<span class="sourceLineNo">399</span>  @Test<a name="line.399"></a>
-<span class="sourceLineNo">400</span>  public void testDeleteFamiliesWithoutAndWithVisibilityLabels() throws Exception {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    TableName tableName = createTable();<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      Put put = new Put(row1);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      put.addColumn(fam, qual, value);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      table.put(put);<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      Delete d = new Delete(row1);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      // without visibility<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      d.addFamily(fam);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      table.delete(d);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      PrivilegedExceptionAction&lt;Void&gt; scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        @Override<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        public Void run() throws Exception {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>            Table table = connection.getTable(tableName)) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>            Scan s = new Scan();<a name="line.416"></a>
-<span class="sourceLineNo">417</span>            ResultScanner scanner = table.getScanner(s);<a name="line.417"></a>
-<span class="sourceLineNo">418</span>            Result[] next = scanner.next(3);<a name="line.418"></a>
-<span class="sourceLineNo">419</span>            assertEquals(1, next.length);<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          } catch (Throwable t) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>            throw new IOException(t);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>          }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>          return null;<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        }<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      };<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      SUPERUSER.runAs(scanAction);<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      d = new Delete(row1);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      // with visibility<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      d.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      d.addFamily(fam);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      table.delete(d);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>        @Override<a name="line.433"></a>
-<span class="sourceLineNo">434</span>        public Void run() throws Exception {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>            Table table = connection.getTable(tableName)) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>            Scan s = new Scan();<a name="line.437"></a>
-<span class="sourceLineNo">438</span>            ResultScanner scanner = table.getScanner(s);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>            Result[] next = scanner.next(3);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>            assertEquals(0, next.length);<a name="line.440"></a>
-<span class="sourceLineNo">441</span>          } catch (Throwable t) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>            throw new IOException(t);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          }<a name="line.443"></a>
-<span class="sourceLineNo">444</span>          return null;<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        }<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      };<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      SUPERUSER.runAs(scanAction);<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><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  @Test<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  public void testDeleteFamiliesWithAndWithoutVisibilityLabels() throws Exception {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    TableName tableName = createTable();<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      Put put = new Put(row1);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      put.addColumn(fam, qual, value);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      table.put(put);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      Delete d = new Delete(row1);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      d.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      // with visibility<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      d.addFamily(fam);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      table.delete(d);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      PrivilegedExceptionAction&lt;Void&gt; scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>        @Override<a name="line.465"></a>
-<span class="sourceLineNo">466</span>        public Void run() throws Exception {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>            Table table = connection.getTable(tableName)) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>            Scan s = new Scan();<a name="line.469"></a>
-<span class="sourceLineNo">470</span>            ResultScanner scanner = table.getScanner(s);<a name="line.470"></a>
-<span class="sourceLineNo">471</span>            Result[] next = scanner.next(3);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>            assertEquals(0, next.length);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>          } catch (Throwable t) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>            throw new IOException(t);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>          }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>          return null;<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>      SUPERUSER.runAs(scanAction);<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      d = new Delete(row1);<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      // without visibility<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      d.addFamily(fam);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      table.delete(d);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        @Override<a name="line.485"></a>
-<span class="sourceLineNo">486</span>        public Void run() throws Exception {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.487"></a>
-<span class="sourceLineNo">488</span>            Table table = connection.getTable(tableName)) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>            Scan s = new Scan();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>            ResultScanner scanner = table.getScanner(s);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>            Result[] next = scanner.next(3);<a name="line.491"></a>
-<span class="sourceLineNo">492</span>            assertEquals(0, next.length);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>          } catch (Throwable t) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>            throw new IOException(t);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>          }<a name="line.495"></a>
-<span class="sourceLineNo">496</span>          return null;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>        }<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      };<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      SUPERUSER.runAs(scanAction);<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>  @Test<a name="line.503"></a>
-<span class="sourceLineNo">504</span>  public void testDeletesWithoutAndWithVisibilityLabels() throws Exception {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    TableName tableName = createTable();<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      Put put = new Put(row1);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      put.addColumn(fam, qual, value);<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      table.put(put);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      Delete d = new Delete(row1);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      // without visibility<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      d.addColumn(fam, qual);<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      table.delete(d);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      PrivilegedExceptionAction&lt;Void&gt; scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        @Override<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        public Void run() throws Exception {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>            Table table = connection.getTable(tableName)) {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>            Scan s = new Scan();<a name="line.520"></a>
-<span class="sourceLineNo">521</span>            ResultScanner scanner = table.getScanner(s);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>            // The delete would not be able to apply it because of visibility mismatch<a name="line.522"></a>
-<span class="sourceLineNo">523</span>            Result[] next = scanner.next(3);<a name="line.523"></a>
-<span class="sourceLineNo">524</span>            assertEquals(1, next.length);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>          } catch (Throwable t) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>            throw new IOException(t);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>          }<a name="line.527"></a>
-<span class="sourceLineNo">528</span>          return null;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>        }<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      };<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      SUPERUSER.runAs(scanAction);<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      d = new Delete(row1);<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      // with visibility<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      d.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      d.addColumn(fam, qual);<a name="line.535"></a>
-<span class="sourceLineNo">536</span>      table.delete(d);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        @Override<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        public Void run() throws Exception {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.540"></a>
-<span class="sourceLineNo">541</span>            Table table = connection.getTable(tableName)) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>            Scan s = new Scan();<a name="line.542"></a>
-<span class="sourceLineNo">543</span>            ResultScanner scanner = table.getScanner(s);<a name="line.543"></a>
-<span class="sourceLineNo">544</span>            Result[] next = scanner.next(3);<a name="line.544"></a>
-<span class="sourceLineNo">545</span>            // this will alone match<a name="line.545"></a>
-<span class="sourceLineNo">546</span>            assertEquals(0, next.length);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>          } catch (Throwable t) {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>            throw new IOException(t);<a name="line.548"></a>
-<span class="sourceLineNo">549</span>          }<a name="line.549"></a>
-<span class="sourceLineNo">550</span>          return null;<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>      SUPERUSER.runAs(scanAction);<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
-<span class="sourceLineNo">555</span>  }<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>  @Test<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  public void testVisibilityLabelsWithDeleteFamilyWithPutsReAppearing() throws Exception {<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    TableName tableName = createTable(5);<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>      Put put = new Put(Bytes.toBytes("row1"));<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      put.addColumn(fam, qual, value);<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.563"></a>
-<span class="sourceLineNo">564</span>      table.put(put);<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      put = new Put(Bytes.toBytes("row1"));<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      put.addColumn(fam, qual, value);<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      put.setCellVisibility(new CellVisibility(SECRET));<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      table.put(put);<a name="line.568"></a>
-<span class="sourceLineNo">569</span>      TEST_UTIL.getAdmin().flush(tableName);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      PrivilegedExceptionAction&lt;Void&gt; actiona = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>        @Override<a name="line.571"></a>
-<span class="sourceLineNo">572</span>        public Void run() throws Exception {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.573"></a>
-<span class="sourceLineNo">574</span>            Table table = connection.getTable(tableName)) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>            Delete d = new Delete(row1);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>            d.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.576"></a>
-<span class="sourceLineNo">577</span>            d.addFamily(fam);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>            table.delete(d);<a name="line.578"></a>
-<span class="sourceLineNo">579</span>          } catch (Throwable t) {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>            throw new IOException(t);<a name="line.580"></a>
-<span class="sourceLineNo">581</span>          }<a name="line.581"></a>
-<span class="sourceLineNo">582</span>          return null;<a name="line.582"></a>
-<span class="sourceLineNo">583</span>        }<a name="line.583"></a>
-<span class="sourceLineNo">584</span>      };<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      SUPERUSER.runAs(actiona);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>      Scan s = new Scan();<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      s.readVersions(5);<a name="line.587"></a>
-<span class="sourceLineNo">588</span>      s.setAuthorizations(new Authorizations(SECRET));<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      ResultScanner scanner = table.getScanner(s);<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      Result[] next = scanner.next(3);<a name="line.590"></a>
-<span class="sourceLineNo">591</span>      assertEquals(1, next.length);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      put = new Put(Bytes.toBytes("row1"));<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      put.addColumn(fam, qual, value1);<a name="line.593"></a>
-<span class="sourceLineNo">594</span>      put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      table.put(put);<a name="line.595"></a>
-<span class="sourceLineNo">596</span>      actiona = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>        @Override<a name="line.597"></a>
-<span class="sourceLineNo">598</span>        public Void run() throws Exception {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.599"></a>
-<span class="sourceLineNo">600</span>            Table table = connection.getTable(tableName)) {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>            Delete d = new Delete(row1);<a name="line.601"></a>
-<span class="sourceLineNo">602</span>            d.setCellVisibility(new CellVisibility(SECRET));<a name="line.602"></a>
-<span class="sourceLineNo">603</span>            d.addFamily(fam);<a name="line.603"></a>
-<span class="sourceLineNo">604</span>            table.delete(d);<a name="line.604"></a>
-<span class="sourceLineNo">605</span>          } catch (Throwable t) {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>            throw new IOException(t);<a name="line.606"></a>
-<span class="sourceLineNo">607</span>          }<a name="line.607"></a>
-<span class="sourceLineNo">608</span>          return null;<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>      SUPERUSER.runAs(actiona);<a name="line.611"></a>
-<span class="sourceLineNo">612</span>      s = new Scan();<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      s.readVersions(5);<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      s.setAuthorizations(new Authorizations(CONFIDENTIAL));<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      scanner = table.getScanner(s);<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      next = scanner.next(3);<a name="line.616"></a>
-<span class="sourceLineNo">617</span>      assertEquals(1, next.length);<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      s = new Scan();<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      s.readVersions(5);<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      s.setAuthorizations(new Authorizations(SECRET));<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      scanner = table.getScanner(s);<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      Result[] next1 = scanner.next(3);<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      assertEquals(0, next1.length);<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    }<a name="line.624"></a>
-<span class="sourceLineNo">625</span>  }<a name="line.625"></a>
-<span class="sourceLineNo">626</span><a name="line.626"></a>
-<span class="sourceLineNo">627</span>  @Test<a name="line.627"></a>
-<span class="sourceLineNo">628</span>  public void testVisibilityLabelsWithDeleteColumnsWithPutsReAppearing() throws Exception {<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    TableName tableName = createTable(5);<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      Put put = new Put(Bytes.toBytes("row1"));<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      put.addColumn(fam, qual, value);<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      table.put(put);<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      put = new Put(Bytes.toBytes("row1"));<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      put.addColumn(fam, qual, value);<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      put.setCellVisibility(new CellVisibility(SECRET));<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      table.put(put);<a name="line.638"></a>
-<span class="sourceLineNo">639</span>      TEST_UTIL.getAdmin().flush(tableName);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      PrivilegedExceptionAction&lt;Void&gt; actiona = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>        @Override<a name="line.641"></a>
-<span class="sourceLineNo">642</span>        public Void run() throws Exception {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>            Table table = connection.getTable(tableName)) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>            Delete d = new Delete(row1);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>            d.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.646"></a>
-<span class="sourceLineNo">647</span>            d.addColumns(fam, qual);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>            table.delete(d);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>          } catch (Throwable t) {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>            throw new IOException(t);<a name="line.650"></a>
-<span class="sourceLineNo">651</span>          }<a name="line.651"></a>
-<span class="sourceLineNo">652</span>          return null;<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>      SUPERUSER.runAs(actiona);<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      Scan s = new Scan();<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      s.readVersions(5);<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      s.setAuthorizations(new Authorizations(SECRET));<a name="line.658"></a>
-<span class="sourceLineNo">659</span>      ResultScanner scanner = table.getScanner(s);<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      Result[] next = scanner.next(3);<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      assertEquals(1, next.length);<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      put = new Put(Bytes.toBytes("row1"));<a name="line.662"></a>
-<span class="sourceLineNo">663</span>      put.addColumn(fam, qual, value1);<a name="line.663"></a>
-<span class="sourceLineNo">664</span>      put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.664"></a>
-<span class="sourceLineNo">665</span>      table.put(put);<a name="line.665"></a>
-<span class="sourceLineNo">666</span>      actiona = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>        @Override<a name="line.667"></a>
-<span class="sourceLineNo">668</span>        public Void run() throws Exception {<a name="line.668"></a>
-<span class="sourceLineNo">669</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.669"></a>
-<span class="sourceLineNo">670</span>            Table table = connection.getTable(tableName)) {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>            Delete d = new Delete(row1);<a name="line.671"></a>
-<span class="sourceLineNo">672</span>            d.setCellVisibility(new CellVisibility(SECRET));<a name="line.672"></a>
-<span class="sourceLineNo">673</span>            d.addColumns(fam, qual);<a name="line.673"></a>
-<span class="sourceLineNo">674</span>            table.delete(d);<a name="line.674"></a>
-<span class="sourceLineNo">675</span>          } catch (Throwable t) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span>            throw new IOException(t);<a name="line.676"></a>
-<span class="sourceLineNo">677</span>          }<a name="line.677"></a>
-<span class="sourceLineNo">678</span>          return null;<a name="line.678"></a>
-<span class="sourceLineNo">679</span>        }<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      };<a name="line.680"></a>
-<span class="sourceLineNo">681</span>      SUPERUSER.runAs(actiona);<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      s = new Scan();<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      s.readVersions(5);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>      s.setAuthorizations(new Authorizations(CONFIDENTIAL));<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      scanner = table.getScanner(s);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      next = scanner.next(3);<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      assertEquals(1, next.length);<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      s = new Scan();<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      s.readVersions(5);<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      s.setAuthorizations(new Authorizations(SECRET));<a name="line.690"></a>
-<span class="sourceLineNo">691</span>      scanner = table.getScanner(s);<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      Result[] next1 = scanner.next(3);<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      assertEquals(0, next1.length);<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    }<a name="line.694"></a>
-<span class="sourceLineNo">695</span>  }<a name="line.695"></a>
-<span class="sourceLineNo">696</span><a name="line.696"></a>
-<span class="sourceLineNo">697</span>  @Test<a name="line.697"></a>
-<span class="sourceLineNo">698</span>  public void testVisibilityCombinations() throws Exception {<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    TableName tableName = createTable(5);<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.700"></a>
-<span class="sourceLineNo">701</span>      Put put = new Put(Bytes.toBytes("row1"));<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      put.addColumn(fam, qual, 123L, value);<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      table.put(put);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>      put = new Put(Bytes.toBytes("row1"));<a name="line.705"></a>
-<span class="sourceLineNo">706</span>      put.addColumn(fam, qual, 124L, value1);<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      put.setCellVisibility(new CellVisibility(SECRET));<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      table.put(put);<a name="line.708"></a>
-<span class="sourceLineNo">709</span>      PrivilegedExceptionAction&lt;Void&gt; actiona = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        @Override<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        public Void run() throws Exception {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.712"></a>
-<span class="sourceLineNo">713</span>            Table table = connection.getTable(tableName)) {<a name="line.713"></a>
-<span class="sourceLineNo">714</span>            Delete d = new Delete(row1);<a name="line.714"></a>
-<span class="sourceLineNo">715</span>            d.setCellVisibility(new CellVisibility(SECRET));<a name="line.715"></a>
-<span class="sourceLineNo">716</span>            d.addColumns(fam, qual, 126L);<a name="line.716"></a>
-<span class="sourceLineNo">717</span>            table.delete(d);<a name="line.717"></a>
-<span class="sourceLineNo">718</span>          } catch (Throwable t) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>            throw new IOException(t);<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>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.722"></a>
-<span class="sourceLineNo">723</span>            Table table = connection.getTable(tableName)) {<a name="line.723"></a>
-<span class="sourceLineNo">724</span>            Delete d = new Delete(row1);<a name="line.724"></a>
-<span class="sourceLineNo">725</span>            d.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.725"></a>
-<span class="sourceLineNo">726</span>            d.addColumn(fam, qual, 123L);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>            table.delete(d);<a name="line.727"></a>
-<span class="sourceLineNo">728</span>          } catch (Throwable t) {<a name="line.728"></a>
-<span class="sourceLineNo">729</span>            throw new IOException(t);<a name="line.729"></a>
-<span class="sourceLineNo">730</span>          }<a name="line.730"></a>
-<span class="sourceLineNo">731</span>          return null;<a name="line.731"></a>
-<span class="sourceLineNo">732</span>        }<a name="line.732"></a>
-<span class="sourceLineNo">733</span>      };<a name="line.733"></a>
-<span class="sourceLineNo">734</span>      SUPERUSER.runAs(actiona);<a name="line.734"></a>
-<span class="sourceLineNo">735</span>      Scan s = new Scan();<a name="line.735"></a>
-<span class="sourceLineNo">736</span>      s.readVersions(5);<a name="line.736"></a>
-<span class="sourceLineNo">737</span>      s.setAuthorizations(new Authorizations(CONFIDENTIAL, SECRET));<a name="line.737"></a>
-<span class="sourceLineNo">738</span>      ResultScanner scanner = table.getScanner(s);<a name="line.738"></a>
-<span class="sourceLineNo">739</span>      Result[] next = scanner.next(3);<a name="line.739"></a>
-<span class="sourceLineNo">740</span>      assertEquals(0, next.length);<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>  @Test<a name="line.744"></a>
-<span class="sourceLineNo">745</span>  public void testVisibilityLabelsWithDeleteColumnWithSpecificVersionWithPutsReAppearing()<a name="line.745"></a>
-<span class="sourceLineNo">746</span>      throws Exception {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>    TableName tableName = createTable(5);<a name="line.747"></a>
-<span class="sourceLineNo">748</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.748"></a>
-<span class="sourceLineNo">749</span>      Put put1 = new Put(Bytes.toBytes("row1"));<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      put1.addColumn(fam, qual, 123L, value);<a name="line.750"></a>
-<span class="sourceLineNo">751</span>      put1.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.751"></a>
-<span class="sourceLineNo">752</span><a name="line.752"></a>
-<span class="sourceLineNo">753</span>      Put put2 = new Put(Bytes.toBytes("row1"));<a name="line.753"></a>
-<span class="sourceLineNo">754</span>      put2.addColumn(fam, qual, 123L, value1);<a name="line.754"></a>
-<span class="sourceLineNo">755</span>      put2.setCellVisibility(new CellVisibility(SECRET));<a name="line.755"></a>
-<span class="sourceLineNo">756</span>      table.put(createList(put1, put2));<a name="line.756"></a>
-<span class="sourceLineNo">757</span><a name="line.757"></a>
-<span class="sourceLineNo">758</span>      Scan s = new Scan();<a name="line.758"></a>
-<span class="sourceLineNo">759</span>      s.readVersions(5);<a name="line.759"></a>
-<span class="sourceLineNo">760</span>      s.setAuthorizations(new Authorizations(CONFIDENTIAL, SECRET));<a name="line.760"></a>
-<span class="sourceLineNo">761</span><a name="line.761"></a>
-<span class="sourceLineNo">762</span>      ResultScanner scanner = table.getScanner(s);<a name="line.762"></a>
-<span class="sourceLineNo">763</span>      assertEquals(1, scanner.next(3).length);<a name="line.763"></a>
-<span class="sourceLineNo">764</span>      scanner.close();<a name="line.764"></a>
-<span class="sourceLineNo">765</span><a name="line.765"></a>
-<span class="sourceLineNo">766</span>      PrivilegedExceptionAction&lt;Void&gt; actiona = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.766"></a>
-<span class="sourceLineNo">767</span>        @Override<a name="line.767"></a>
-<span class="sourceLineNo">768</span>        public Void run() throws Exception {<a name="line.768"></a>
-<span class="sourceLineNo">769</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.769"></a>
-<span class="sourceLineNo">770</span>            Table table = connection.getTable(tableName)) {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>            Delete d = new Delete(row1);<a name="line.771"></a>
-<span class="sourceLineNo">772</span>            d.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.772"></a>
-<span class="sourceLineNo">773</span>            d.addColumn(fam, qual, 123L);<a name="line.773"></a>
-<span class="sourceLineNo">774</span>            table.delete(d);<a name="line.774"></a>
-<span class="sourceLineNo">775</span>          }<a name="line.775"></a>
-<span class="sourceLineNo">776</span><a name="line.776"></a>
-<span class="sourceLineNo">777</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.777"></a>
-<span class="sourceLineNo">778</span>            Table table = connection.getTable(tableName)) {<a name="line.778"></a>
-<span class="sourceLineNo">779</span>            Delete d = new Delete(row1);<a name="line.779"></a>
-<span class="sourceLineNo">780</span>            d.setCellVisibility(new CellVisibility(SECRET));<a name="line.780"></a>
-<span class="sourceLineNo">781</span>            d.addColumn(fam, qual, 123L);<a name="line.781"></a>
-<span class="sourceLineNo">782</span>            table.delete(d);<a name="line.782"></a>
-<span class="sourceLineNo">783</span>          } catch (Throwable t) {<a name="line.783"></a>
-<span class="sourceLineNo">784</span>            throw new IOException(t);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>          }<a name="line.785"></a>
-<span class="sourceLineNo">786</span>          return null;<a name="line.786"></a>
-<span class="sourceLineNo">787</span>        }<a name="line.787"></a>
-<span class="sourceLineNo">788</span>      };<a name="line.788"></a>
-<span class="sourceLineNo">789</span>      SUPERUSER.runAs(actiona);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      s = new Scan();<a name="line.790"></a>
-<span class="sourceLineNo">791</span>      s.readVersions(5);<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      s.setAuthorizations(new Authorizations(CONFIDENTIAL));<a name="line.792"></a>
-<span class="sourceLineNo">793</span>      scanner = table.getScanner(s);<a name="line.793"></a>
-<span class="sourceLineNo">794</span>      assertEquals(0, scanner.next(3).length);<a name="line.794"></a>
-<span class="sourceLineNo">795</span>      scanner.close();<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><a name="line.798"></a>
-<span class="sourceLineNo">799</span>  @Test<a name="line.799"></a>
-<span class="sourceLineNo">800</span>  public void testVisibilityLabelsWithDeleteFamilyNoMatchingVisExpWithMultipleVersionsNoTimestamp()<a name="line.800"></a>
-<span class="sourceLineNo">801</span>      throws Exception {<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    setAuths();<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    final TableName tableName = TableName.valueOf(testName.getMethodName());<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    try (Table table = doPuts(tableName)) {<a name="line.804"></a>
-<span class="sourceLineNo">805</span>      TEST_UTIL.getAdmin().flush(tableName);<a name="line.805"></a>
-<span class="sourceLineNo">806</span>      PrivilegedExceptionAction&lt;Void&gt; actiona = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>        @Override<a name="line.807"></a>
-<span class="sourceLineNo">808</span>        public Void run() throws Exception {<a name="line.808"></a>
-<span class="sourceLineNo">809</span>          Delete d1 = new Delete(row1);<a name="line.809"></a>
-<span class="sourceLineNo">810</span>          d1.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.810"></a>
-<span class="sourceLineNo">811</span>          d1.addFamily(fam);<a name="line.811"></a>
-<span class="sourceLineNo">812</span><a name="line.812"></a>
-<span class="sourceLineNo">813</span>          Delete d2 = new Delete(row1);<a name="line.813"></a>
-<span class="sourceLineNo">814</span>          d2.setCellVisibility(new CellVisibility(SECRET));<a name="line.814"></a>
-<span class="sourceLineNo">815</span>          d2.addFamily(fam);<a name="line.815"></a>
-<span class="sourceLineNo">816</span><a name="line.816"></a>
-<span class="sourceLineNo">817</span>          Delete d3 = new Delete(row1);<a name="line.817"></a>
-<span class="sourceLineNo">818</span>          d3.setCellVisibility(new CellVisibility(<a name="line.818"></a>
-<span class="sourceLineNo">819</span>              "(" + PRIVATE + "&amp;" + CONFIDENTIAL + ")|(" + SECRET + "&amp;" + TOPSECRET + ")"));<a name="line.819"></a>
-<span class="sourceLineNo">820</span>          d3.addFamily(fam);<a name="line.820"></a>
-<span class="sourceLineNo">821</span><a name="line.821"></a>
-<span class="sourceLineNo">822</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.822"></a>
-<span class="sourceLineNo">823</span>            Table table = connection.getTable(tableName)) {<a name="line.823"></a>
-<span class="sourceLineNo">824</span>            table.delete(createList(d1, d2, d3));<a name="line.824"></a>
-<span class="sourceLineNo">825</span>          } catch (Throwable t) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span>            throw new IOException(t);<a name="line.826"></a>
-<span class="sourceLineNo">827</span>          }<a name="line.827"></a>
-<span class="sourceLineNo">828</span>          return null;<a name="line.828"></a>
-<span class="sourceLineNo">829</span>        }<a name="line.829"></a>
-<span class="sourceLineNo">830</span>      };<a name="line.830"></a>
-<span class="sourceLineNo">831</span>      SUPERUSER.runAs(actiona);<a name="line.831"></a>
-<span class="sourceLineNo">832</span>      Scan s = new Scan();<a name="line.832"></a>
-<span class="sourceLineNo">833</span>      s.readVersions(5);<a name="line.833"></a>
-<span class="sourceLineNo">834</span>      s.setAuthorizations(new Authorizations(SECRET, PRIVATE, CONFIDENTIAL, TOPSECRET));<a name="line.834"></a>
-<span class="sourceLineNo">835</span>      ResultScanner scanner = table.getScanner(s);<a name="line.835"></a>
-<span class="sourceLineNo">836</span>      Result[] next = scanner.next(3);<a name="line.836"></a>
-<span class="sourceLineNo">837</span>      assertTrue(next.length == 2);<a name="line.837"></a>
-<span class="sourceLineNo">838</span>      CellScanner cellScanner = next[0].cellScanner();<a name="line.838"></a>
-<span class="sourceLineNo">839</span>      cellScanner.advance();<a name="line.839"></a>
-<span class="sourceLineNo">840</span>      Cell current = cellScanner.current();<a name="line.840"></a>
-<span class="sourceLineNo">841</span>      assertTrue(Bytes.equals(current.getRowArray(), current.getRowOffset(), current.getRowLength(),<a name="line.841"></a>
-<span class="sourceLineNo">842</span>        row1, 0, row1.length));<a name="line.842"></a>
-<span class="sourceLineNo">843</span>      cellScanner = next[1].cellScanner();<a name="line.843"></a>
-<span class="sourceLineNo">844</span>      cellScanner.advance();<a name="line.844"></a>
-<span class="sourceLineNo">845</span>      current = cellScanner.current();<a name="line.845"></a>
-<span class="sourceLineNo">846</span>      assertTrue(Bytes.equals(current.getRowArray(), current.getRowOffset(), current.getRowLength(),<a name="line.846"></a>
-<span class="sourceLineNo">847</span>        row2, 0, row2.length));<a name="line.847"></a>
-<span class="sourceLineNo">848</span>      scanner.close();<a name="line.848"></a>
-<span class="sourceLineNo">849</span>    }<a name="line.849"></a>
-<span class="sourceLineNo">850</span>  }<a name="line.850"></a>
-<span class="sourceLineNo">851</span><a name="line.851"></a>
-<span class="sourceLineNo">852</span>  @Test<a name="line.852"></a>
-<span class="sourceLineNo">853</span>  public void testDeleteFamilyAndDeleteColumnsWithAndWithoutVisibilityExp() throws Exception {<a name="line.853"></a>
-<span class="sourceLineNo">854</span>    setAuths();<a name="line.854"></a>
-<span class="sourceLineNo">855</span>    final TableName tableName = TableName.valueOf(testName.getMethodName());<a name="line.855"></a>
-<span class="sourceLineNo">856</span>    try (Table table = doPuts(tableName)) {<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      TEST_UTIL.getAdmin().flush(tableName);<a name="line.857"></a>
-<span class="sourceLineNo">858</span>      PrivilegedExceptionAction&lt;Void&gt; actiona = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.858"></a>
-<span class="sourceLineNo">859</span>        @Override<a name="line.859"></a>
-<span class="sourceLineNo">860</span>        public Void run() throws Exception {<a name="line.860"></a>
-<span class="sourceLineNo">861</span>          Delete d1 = new Delete(row1);<a name="line.861"></a>
-<span class="sourceLineNo">862</span>          d1.addFamily(fam);<a name="line.862"></a>
-<span class="sourceLineNo">863</span><a name="line.863"></a>
-<span class="sourceLineNo">864</span>          Delete d2 = new Delete(row1);<a name="line.864"></a>
-<span class="sourceLineNo">865</span>          d2.setCellVisibility(new CellVisibility(SECRET + "&amp;" + TOPSECRET));<a name="line.865"></a>
-<span class="sourceLineNo">866</span>          d2.addColumns(fam, qual);<a name="line.866"></a>
-<span class="sourceLineNo">867</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.867"></a>
-<span class="sourceLineNo">868</span>            Table table = connection.getTable(tableName)) {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>            table.delete(createList(d1, d2));<a name="line.869"></a>
-<span class="sourceLineNo">870</span>          } catch (Throwable t) {<a name="line.870"></a>
-<span class="sourceLineNo">871</span>            throw new IOException(t);<a name="line.871"></a>
-<span class="sourceLineNo">872</span>          }<a name="line.872"></a>
-<span class="sourceLineNo">873</span>          return null;<a name="line.873"></a>
-<span class="sourceLineNo">874</span>        }<a name="line.874"></a>
-<span class="sourceLineNo">875</span>      };<a name="line.875"></a>
-<span class="sourceLineNo">876</span>      SUPERUSER.runAs(actiona);<a name="line.876"></a>
-<span class="sourceLineNo">877</span>      Scan s = new Scan();<a name="line.877"></a>
-<span class="sourceLineNo">878</span>      s.readVersions(5);<a name="line.878"></a>
-<span class="sourceLineNo">879</span>      s.setAuthorizations(new Authorizations(SECRET, PRIVATE, CONFIDENTIAL, TOPSECRET));<a name="line.879"></a>
-<span class="sourceLineNo">880</span>      ResultScanner scanner = table.getScanner(s);<a name="line.880"></a>
-<span class="sourceLineNo">881</span>      Result[] next = scanner.next(3);<a name="line.881"></a>
-<span class="sourceLineNo">882</span>      assertTrue(next.length == 2);<a name="line.882"></a>
-<span class="sourceLineNo">883</span>      CellScanner cellScanner = next[0].cellScanner();<a name="line.883"></a>
-<span class="sourceLineNo">884</span>      cellScanner.advance();<a name="line.884"></a>
-<span class="sourceLineNo">885</span>      Cell current = cellScanner.current();<a name="line.885"></a>
-<span class="sourceLineNo">886</span>      assertTrue(Bytes.equals(current.getRowArray(), current.getRowOffset(), current.getRowLength(),<a name="line.886"></a>
-<span class="sourceLineNo">887</span>        row1, 0, row1.length));<a name="line.887"></a>
-<span class="sourceLineNo">888</span>      assertEquals(127L, current.getTimestamp());<a name="line.888"></a>
-<span class="sourceLineNo">889</span>      cellScanner.advance();<a name="line.889"></a>
-<span class="sourceLineNo">890</span>      current = cellScanner.current();<a name="line.890"></a>
-<span class="sourceLineNo">891</span>      assertTrue(Bytes.equals(current.getRowArray(), current.getRowOffset(), current.getRowLength(),<a name="line.891"></a>
-<span class="sourceLineNo">892</span>        row1, 0, row1.length));<a name="line.892"></a>
-<span class="sourceLineNo">893</span>      assertEquals(126L, current.getTimestamp());<a name="line.893"></a>
-<span class="sourceLineNo">894</span>      cellScanner.advance();<a name="line.894"></a>
-<span class="sourceLineNo">895</span>      current = cellScanner.current();<a name="line.895"></a>
-<span class="sourceLineNo">896</span>      assertTrue(Bytes.equals(current.getRowArray(), current.getRowOffset(), current.getRowLength(),<a name="line.896"></a>
-<span class="sourceLineNo">897</span>        row1, 0, row1.length));<a name="line.897"></a>
-<span class="sourceLineNo">898</span>      assertEquals(124L, current.getTimestamp());<a name="line.898"></a>
-<span class="sourceLineNo">899</span>      cellScanner.advance();<a name="line.899"></a>
-<span class="sourceLineNo">900</span>      current = cellScanner.current();<a name="line.900"></a>
-<span class="sourceLineNo">901</span>      assertTrue(Bytes.equals(current.getRowArray(), current.getRowOffset(), current.getRowLength(),<a name="line.901"></a>
-<span class="sourceLineNo">902</span>        row1, 0, row1.length));<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      assertEquals(123L, current.getTimestamp());<a name="line.903"></a>
-<span class="sourceLineNo">904</span>      cellScanner = next[1].cellScanner();<a name="line.904"></a>
-<span class="sourceLineNo">905</span>      cellScanner.advance();<a name="line.905"></a>
-<span class="sourceLineNo">906</span>      current = cellScanner.current();<a name="line.906"></a>
-<span class="sourceLineNo">907</span>      assertTrue(Bytes.equals(current.getRowArray(), current.getRowOffset(), current.getRowLength(),<a name="line.907"></a>
-<span class="sourceLineNo">908</span>        row2, 0, row2.length));<a name="line.908"></a>
-<span class="sourceLineNo">909</span>      scanner.close();<a name="line.909"></a>
-<span class="sourceLineNo">910</span>    }<a name="line.910"></a>
-<span class="sourceLineNo">911</span>  }<a name="line.911"></a>
-<span class="sourceLineNo">912</span><a name="line.912"></a>
-<span class="sourceLineNo">913</span>  private Table doPuts(TableName tableName) throws IOException, InterruptedIOException,<a name="line.913"></a>
-<span class="sourceLineNo">914</span>      RetriesExhaustedWithDetailsException, InterruptedException {<a name="line.914"></a>
-<span class="sourceLineNo">915</span>    createTable(tableName, 5);<a name="line.915"></a>
-<span class="sourceLineNo">916</span><a name="line.916"></a>
-<span class="sourceLineNo">917</span>    List&lt;Put&gt; puts = new ArrayList&lt;&gt;(5);<a name="line.917"></a>
-<span class="sourceLineNo">918</span>    Put put = new Put(Bytes.toBytes("row1"));<a name="line.918"></a>
-<span class="sourceLineNo">919</span>    put.addColumn(fam, qual, 123L, value);<a name="line.919"></a>
-<span class="sourceLineNo">920</span>    put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.920"></a>
-<span class="sourceLineNo">921</span>    puts.add(put);<a name="line.921"></a>
-<span class="sourceLineNo">922</span><a name="line.922"></a>
-<span class="sourceLineNo">923</span>    put = new Put(Bytes.toBytes("row1"));<a name="line.923"></a>
-<span class="sourceLineNo">924</span>    put.addColumn(fam, qual, 124L, value);<a name="line.924"></a>
-<span class="sourceLineNo">925</span>    put.setCellVisibility(new CellVisibility(<a name="line.925"></a>
-<span class="sourceLineNo">926</span>        "(" + CONFIDENTIAL + "&amp;" + PRIVATE + ")|(" + TOPSECRET + "&amp;" + SECRET + ")"));<a name="line.926"></a>
-<span class="sourceLineNo">927</span>    puts.add(put);<a name="line.927"></a>
-<span class="sourceLineNo">928</span><a name="line.928"></a>
-<span class="sourceLineNo">929</span>    put = new Put(Bytes.toBytes("row1"));<a name="line.929"></a>
-<span class="sourceLineNo">930</span>    put.addColumn(fam, qual, 125L, value);<a name="line.930"></a>
-<span class="sourceLineNo">931</span>    put.setCellVisibility(new CellVisibility(SECRET + "&amp;" + TOPSECRET));<a name="line.931"></a>
-<span class="sourceLineNo">932</span>    puts.add(put);<a name="line.932"></a>
-<span class="sourceLineNo">933</span><a name="line.933"></a>
-<span class="sourceLineNo">934</span>    put = new Put(Bytes.toBytes("row1"));<a name="line.934"></a>
-<span class="sourceLineNo">935</span>    put.addColumn(fam, qual, 126L, value);<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    put.setCellVisibility(new CellVisibility(<a name="line.936"></a>
-<span class="sourceLineNo">937</span>        "(" + CONFIDENTIAL + "&amp;" + PRIVATE + ")|(" + TOPSECRET + "&amp;" + SECRET + ")"));<a name="line.937"></a>
-<span class="sourceLineNo">938</span>    puts.add(put);<a name="line.938"></a>
-<span class="sourceLineNo">939</span><a name="line.939"></a>
-<span class="sourceLineNo">940</span>    put = new Put(Bytes.toBytes("row1"));<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    put.addColumn(fam, qual, 127L, value);<a name="line.941"></a>
-<span class="sourceLineNo">942</span>    put.setCellVisibility(new CellVisibility(<a name="line.942"></a>
-<span class="sourceLineNo">943</span>        "(" + CONFIDENTIAL + "&amp;" + PRIVATE + ")|(" + TOPSECRET + "&amp;" + SECRET + ")"));<a name="line.943"></a>
-<span class="sourceLineNo">944</span>    puts.add(put);<a name="line.944"></a>
-<span class="sourceLineNo">945</span><a name="line.945"></a>
-<span class="sourceLineNo">946</span>    TEST_UTIL.getAdmin().flush(tableName);<a name="line.946"></a>
-<span class="sourceLineNo">947</span>    put = new Put(Bytes.toBytes("row2"));<a name="line.947"></a>
-<span class="sourceLineNo">948</span>    put.addColumn(fam, qual, 127L, value);<a name="line.948"></a>
-<span class="sourceLineNo">949</span>    put.setCellVisibility(new CellVisibility(<a name="line.949"></a>
-<span class="sourceLineNo">950</span>        "(" + CONFIDENTIAL + "&amp;" + PRIVATE + ")|(" + TOPSECRET + "&amp;" + SECRET + ")"));<a name="line.950"></a>
-<span class="sourceLineNo">951</span>    puts.add(put);<a name="line.951"></a>
-<span class="sourceLineNo">952</span><a name="line.952"></a>
-<span class="sourceLineNo">953</span>    Table table = TEST_UTIL.getConnection().getTable(tableName);<a name="line.953"></a>
-<span class="sourceLineNo">954</span>    table.put(puts);<a name="line.954"></a>
-<span class="sourceLineNo">955</span>    return table;<a name="line.955"></a>
-<span class="sourceLineNo">956</span>  }<a name="line.956"></a>
-<span class="sourceLineNo">957</span><a name="line.957"></a>
-<span class="sourceLineNo">958</span>  private Table doPutsWithDiffCols(TableName tableName) throws IOException, InterruptedIOException,<a name="line.958"></a>
-<span class="sourceLineNo">959</span>      RetriesExhaustedWithDetailsException, InterruptedException {<a name="line.959"></a>
-<span class="sourceLineNo">960</span>    createTable(tableName, 5);<a name="line.960"></a>
-<span class="sourceLineNo">961</span><a name="line.961"></a>
-<span class="sourceLineNo">962</span>    List&lt;Put&gt; puts = new ArrayList&lt;&gt;(5);<a name="line.962"></a>
-<span class="sourceLineNo">963</span>    Put put = new Put(Bytes.toBytes("row1"));<a name="line.963"></a>
-<span class="sourceLineNo">964</span>    put.addColumn(fam, qual, 123L, value);<a name="line.964"></a>
-<span class="sourceLineNo">965</span>    put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.965"></a>
-<span class="sourceLineNo">966</span>    puts.add(put);<a name="line.966"></a>
-<span class="sourceLineNo">967</span><a name="line.967"></a>
-<span class="sourceLineNo">968</span>    put = new Put(Bytes.toBytes("row1"));<a name="line.968"></a>
-<span class="sourceLineNo">969</span>    put.addColumn(fam, qual, 124L, value);<a name="line.969"></a>
-<span class="sourceLineNo">970</span>    put.setCellVisibility(new CellVisibility(<a name="line.970"></a>
-<span class="sourceLineNo">971</span>        "(" + CONFIDENTIAL + "&amp;" + PRIVATE + ")|(" + TOPSECRET + "&amp;" + SECRET + ")"));<a name="line.971"></a>
-<span class="sourceLineNo">972</span>    puts.add(put);<a name="line.972"></a>
-<span class="sourceLineNo">973</span><a name="line.973"></a>
-<span class="sourceLineNo">974</span>    put = new Put(Bytes.toBytes("row1"));<a name="line.974"></a>
-<span class="sourceLineNo">975</span>    put.addColumn(fam, qual, 125L, value);<a name="line.975"></a>
-<span class="sourceLineNo">976</span>    put.setCellVisibility(new CellVisibility(SECRET + "&amp;" + TOPSECRET));<a name="line.976"></a>
-<span class="sourceLineNo">977</span>    puts.add(put);<a name="line.977"></a>
-<span class="sourceLineNo">978</span><a name="line.978"></a>
-<span class="sourceLineNo">979</span>    put = new Put(Bytes.toBytes("row1"));<a name="line.979"></a>
-<span class="sourceLineNo">980</span>    put.addColumn(fam, qual1, 126L, value);<a name="line.980"></a>
-<span class="sourceLineNo">981</span>    put.setCellVisibility(new CellVisibility(SECRET + "&amp;" + TOPSECRET));<a name="line.981"></a>
-<span class="sourceLineNo">982</span>    puts.add(put);<a name="line.982"></a>
-<span class="sourceLineNo">983</span><a name="line.983"></a>
-<span class="sourceLineNo">984</span>    put = new Put(Bytes.toBytes("row1"));<a name="line.984"></a>
-<span class="sourceLineNo">985</span>    put.addColumn(fam, qual2, 127L, value);<a name="line.985"></a>
-<span class="sourceLineNo">986</span>    put.setCellVisibility(new CellVisibility(<a name="line.986"></a>
-<span class="sourceLineNo">987</span>        "(" + CONFIDENTIAL + "&amp;" + PRIVATE + ")|(" + TOPSECRET + "&amp;" + SECRET + ")"));<a name="line.987"></a>
-<span class="sourceLineNo">988</span>    puts.add(put);<a name="line.988"></a>
-<span class="sourceLineNo">989</span><a name="line.989"></a>
-<span class="sourceLineNo">990</span>    Table table = TEST_UTIL.getConnection().getTable(tableName);<a name="line.990"></a>
-<span class="sourceLineNo">991</span>    table.put(puts);<a name="line.991"></a>
-<span class="sourceLineNo">992</span>    return table;<a name="line.992"></a>
-<span class="sourceLineNo">993</span>  }<a name="line.993"></a>
+<span class="sourceLineNo">316</span>          }<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          return null;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        }<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      };<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      SUPERUSER.runAs(scanAction);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      d = new Delete(row1);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      // with visibility<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      d.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      d.addColumns(fam, qual, HConstants.LATEST_TIMESTAMP);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      table.delete(d);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        @Override<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        public Void run() throws Exception {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.329"></a>
+<span class="sourceLineNo">330</span>            Table table = connection.getTable(tableName)) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>            Scan s = new Scan();<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            ResultScanner scanner = table.getScanner(s);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>            Result[] next = scanner.next(3);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>            assertEquals(0, next.length);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>          }<a name="line.335"></a>
+<span class="sourceLineNo">336</span>          return null;<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>      SUPERUSER.runAs(scanAction);<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><a name="line.342"></a>
+<span class="sourceLineNo">343</span>  @Test<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  public void testDeleteColumnsWithAndWithoutVisibilityLabels() throws Exception {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    TableName tableName = createTable();<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      Put put = new Put(row1);<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      put.addColumn(fam, qual, value);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      table.put(put);<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      Delete d = new Delete(row1);<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      // with visibility<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      d.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      d.addColumns(fam, qual, HConstants.LATEST_TIMESTAMP);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      table.delete(d);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      PrivilegedExceptionAction&lt;Void&gt; scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        @Override<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        public Void run() throws Exception {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>            Table table = connection.getTable(tableName)) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>            Scan s = new Scan();<a name="line.361"></a>
+<span class="sourceLineNo">362</span>            ResultScanner scanner = table.getScanner(s);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>            Result[] next = scanner.next(3);<a name="line.363"></a>
+<span class="sourceLineNo">364</span>            assertEquals(0, next.length);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>          }<a name="line.365"></a>
+<span class="sourceLineNo">366</span>          return null;<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>      SUPERUSER.runAs(scanAction);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      d = new Delete(row1);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      // without visibility<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      d.addColumns(fam, qual, HConstants.LATEST_TIMESTAMP);<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      table.delete(d);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        @Override<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        public Void run() throws Exception {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>            Table table = connection.getTable(tableName)) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>            Scan s = new Scan();<a name="line.379"></a>
+<span class="sourceLineNo">380</span>            ResultScanner scanner = table.getScanner(s);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>            Result[] next = scanner.next(3);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>            assertEquals(0, next.length);<a name="line.382"></a>
+<span class="sourceLineNo">383</span>          }<a name="line.383"></a>
+<span class="sourceLineNo">384</span>          return null;<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>      SUPERUSER.runAs(scanAction);<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>  @Test<a name="line.391"></a>
+<span class="sourceLineNo">392</span>  public void testDeleteFamiliesWithoutAndWithVisibilityLabels() throws Exception {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    TableName tableName = createTable();<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>      Put put = new Put(row1);<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      put.addColumn(fam, qual, value);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      table.put(put);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      Delete d = new Delete(row1);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      // without visibility<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      d.addFamily(fam);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      table.delete(d);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      PrivilegedExceptionAction&lt;Void&gt; scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        @Override<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        public Void run() throws Exception {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.406"></a>
+<span class="sourceLineNo">407</span>            Table table = connection.getTable(tableName)) {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>            Scan s = new Scan();<a name="line.408"></a>
+<span class="sourceLineNo">409</span>            ResultScanner scanner = table.getScanner(s);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>            Result[] next = scanner.next(3);<a name="line.410"></a>
+<span class="sourceLineNo">411</span>            assertEquals(1, next.length);<a name="line.411"></a>
+<span class="sourceLineNo">412</span>          }<a name="line.412"></a>
+<span class="sourceLineNo">413</span>          return null;<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>      SUPERUSER.runAs(scanAction);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      d = new Delete(row1);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      // with visibility<a name="line.418"></a>
+<span class="sourceLineNo">419</span>      d.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      d.addFamily(fam);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      table.delete(d);<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>        @Override<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        public Void run() throws Exception {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>            Table table = connection.getTable(tableName)) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>            Scan s = new Scan();<a name="line.427"></a>
+<span class="sourceLineNo">428</span>            ResultScanner scanner = table.getScanner(s);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>            Result[] next = scanner.next(3);<a name="line.429"></a>
+<span class="sourceLineNo">430</span>            assertEquals(0, next.length);<a name="line.430"></a>
+<span class="sourceLineNo">431</span>          }<a name="line.431"></a>
+<span class="sourceLineNo">432</span>          return null;<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        }<a name="line.433"></a>
+<span class="sourceLineNo">434</span>      };<a name="line.434"></a>
+<span class="sourceLineNo">435</span>      SUPERUSER.runAs(scanAction);<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
+<span class="sourceLineNo">437</span>  }<a name="line.437"></a>
+<span class="sourceLineNo">438</span><a name="line.438"></a>
+<span class="sourceLineNo">439</span>  @Test<a name="line.439"></a>
+<span class="sourceLineNo">440</span>  public void testDeleteFamiliesWithAndWithoutVisibilityLabels() throws Exception {<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    TableName tableName = createTable();<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      Put put = new Put(row1);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      put.addColumn(fam, qual, value);<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      table.put(put);<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      Delete d = new Delete(row1);<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      d.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      // with visibility<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      d.addFamily(fam);<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      table.delete(d);<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      PrivilegedExceptionAction&lt;Void&gt; scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>        @Override<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        public Void run() throws Exception {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>            Table table = connection.getTable(tableName)) {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>            Scan s = new Scan();<a name="line.457"></a>
+<span class="sourceLineNo">458</span>            ResultScanner scanner = table.getScanner(s);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>            Result[] next = scanner.next(3);<a name="line.459"></a>
+<span class="sourceLineNo">460</span>            assertEquals(0, next.length);<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          }<a name="line.461"></a>
+<span class="sourceLineNo">462</span>          return null;<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        }<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      };<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      SUPERUSER.runAs(scanAction);<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      d = new Delete(row1);<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      // without visibility<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      d.addFamily(fam);<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      table.delete(d);<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.470"></a>
+<span class="sourceLineNo">471</span>        @Override<a name="line.471"></a>
+<span class="sourceLineNo">472</span>        public Void run() throws Exception {<a name="line.472"></a>
+<span class="sourceLineNo">473</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.473"></a>
+<span class="sourceLineNo">474</span>            Table table = connection.getTable(tableName)) {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>            Scan s = new Scan();<a name="line.475"></a>
+<span class="sourceLineNo">476</span>            ResultScanner scanner = table.getScanner(s);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>            Result[] next = scanner.next(3);<a name="line.477"></a>
+<span class="sourceLineNo">478</span>            assertEquals(0, next.length);<a name="line.478"></a>
+<span class="sourceLineNo">479</span>          }<a name="line.479"></a>
+<span class="sourceLineNo">480</span>          return null;<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>      SUPERUSER.runAs(scanAction);<a name="line.483"></a>
+<span class="sourceLineNo">484</span>    }<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>  @Test<a name="line.487"></a>
+<span class="sourceLineNo">488</span>  public void testDeletesWithoutAndWithVisibilityLabels() throws Exception {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    TableName tableName = createTable();<a name="line.489"></a>
+<span class="sourceLineNo">490</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.490"></a>
+<span class="sourceLineNo">491</span>      Put put = new Put(row1);<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      put.addColumn(fam, qual, value);<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.493"></a>
+<span class="sourceLineNo">494</span>      table.put(put);<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      Delete d = new Delete(row1);<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      // without visibility<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      d.addColumn(fam, qual);<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      table.delete(d);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      PrivilegedExceptionAction&lt;Void&gt; scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        @Override<a name="line.500"></a>
+<span class="sourceLineNo">501</span>        public Void run() throws Exception {<a name="line.501"></a>
+<span class="sourceLineNo">502</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.502"></a>
+<span class="sourceLineNo">503</span>            Table table = connection.getTable(tableName)) {<a name="line.503"></a>
+<span class="sourceLineNo">504</span>            Scan s = new Scan();<a name="line.504"></a>
+<span class="sourceLineNo">505</span>            ResultScanner scanner = table.getScanner(s);<a name="line.505"></a>
+<span class="sourceLineNo">506</span>            // The delete would not be able to apply it because of visibility mismatch<a name="line.506"></a>
+<span class="sourceLineNo">507</span>            Result[] next = scanner.next(3);<a name="line.507"></a>
+<span class="sourceLineNo">508</span>            assertEquals(1, next.length);<a name="line.508"></a>
+<span class="sourceLineNo">509</span>          }<a name="line.509"></a>
+<span class="sourceLineNo">510</span>          return null;<a name="line.510"></a>
+<span class="sourceLineNo">511</span>        }<a name="line.511"></a>
+<span class="sourceLineNo">512</span>      };<a name="line.512"></a>
+<span class="sourceLineNo">513</span>      SUPERUSER.runAs(scanAction);<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      d = new Delete(row1);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      // with visibility<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      d.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.516"></a>
+<span class="sourceLineNo">517</span>      d.addColumn(fam, qual);<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      table.delete(d);<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>        @Override<a name="line.520"></a>
+<span class="sourceLineNo">521</span>        public Void run() throws Exception {<a name="line.521"></a>
+<span class="sourceLineNo">522</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.522"></a>
+<span class="sourceLineNo">523</span>            Table table = connection.getTable(tableName)) {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>            Scan s = new Scan();<a name="line.524"></a>
+<span class="sourceLineNo">525</span>            ResultScanner scanner = table.getScanner(s);<a name="line.525"></a>
+<span class="sourceLineNo">526</span>            Result[] next = scanner.next(3);<a name="line.526"></a>
+<span class="sourceLineNo">527</span>            // this will alone match<a name="line.527"></a>
+<span class="sourceLineNo">528</span>            assertEquals(0, next.length);<a name="line.528"></a>
+<span class="sourceLineNo">529</span>          }<a name="line.529"></a>
+<span class="sourceLineNo">530</span>          return null;<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>      SUPER

<TRUNCATED>

[14/18] hbase-site git commit: Published site at cebb725a9f4ab8dd9d3f306d21d53d6f56161c51.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html
index a2a54d4..d72fb0f 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html
@@ -978,7 +978,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>initialize</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1528">initialize</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1533">initialize</a>()
                 throws <a href="../../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#initialize--">LoadBalancer</a></code></span></div>
 <div class="block">Initialize the load balancer. Must be called after setters.</div>
@@ -996,7 +996,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>regionOnline</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1532">regionOnline</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1537">regionOnline</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                          <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#regionOnline-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-">LoadBalancer</a></code></span></div>
 <div class="block">Marks the region as online at balancer.</div>
@@ -1012,7 +1012,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>regionOffline</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1536">regionOffline</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1541">regionOffline</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#regionOffline-org.apache.hadoop.hbase.client.RegionInfo-">LoadBalancer</a></code></span></div>
 <div class="block">Marks the region as offline at balancer.</div>
 <dl>
@@ -1027,7 +1027,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>isStopped</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1540">isStopped</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1545">isStopped</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html#isStopped--">isStopped</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></code></dd>
@@ -1042,7 +1042,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1545">stop</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>&nbsp;why)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1550">stop</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>&nbsp;why)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html#stop-java.lang.String-">Stoppable</a></code></span></div>
 <div class="block">Stop this service.
  Implementers should favor logging errors over throwing RuntimeExceptions.</div>
@@ -1060,7 +1060,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>randomAssignment</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1553">randomAssignment</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster</a>&nbsp;cluster,
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1558">randomAssignment</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster</a>&nbsp;cluster,
                                     <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                                     <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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)</pre>
 <div class="block">Used to assign a single region to a random server.</div>
@@ -1072,7 +1072,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>roundRobinAssignment</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1589">roundRobinAssignment</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster</a>&nbsp;cluster,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1594">roundRobinAssignment</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster</a>&nbsp;cluster,
                                   <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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regions,
                                   <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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;unassignedRegions,
                                   <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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers,
@@ -1086,7 +1086,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionAssignmentsByServer</h4>
-<pre>protected&nbsp;<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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1619">getRegionAssignmentsByServer</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.clie
 nt">RegionInfo</a>&gt;&nbsp;regions)</pre>
+<pre>protected&nbsp;<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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1624">getRegionAssignmentsByServer</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.clie
 nt">RegionInfo</a>&gt;&nbsp;regions)</pre>
 </li>
 </ul>
 <a name="onConfigurationChange-org.apache.hadoop.conf.Configuration-">
@@ -1095,7 +1095,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockListLast">
 <li class="blockList">
 <h4>onConfigurationChange</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1629">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1634">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/conf/ConfigurationObserver.html#onConfigurationChange-org.apache.hadoop.conf.Configuration-">ConfigurationObserver</a></code></span></div>
 <div class="block">This method would be called by the <a href="../../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf"><code>ConfigurationManager</code></a>
  object when the <code>Configuration</code> object is reloaded from disk.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/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 abd92a9..1799704 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/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>&lt;E&gt; (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>&lt;T&gt;, 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.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>
+<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/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 92d2987..95ff204 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -347,11 +347,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>&lt;E&gt; (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>&lt;T&gt;, 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/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</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/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.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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/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 ddea7b8..25426ec 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -216,10 +216,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>&lt;E&gt; (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>&lt;T&gt;, 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/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/MetaProcedureInterface.MetaOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">MetaProcedureInterface.MetaOperationType</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/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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/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 4b549da..7b435d2 100644
--- a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
@@ -127,8 +127,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>&lt;E&gt; (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>&lt;T&gt;, 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/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>
+<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/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 68f47a5..83d09e1 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>&lt;E&gt; (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>&lt;T&gt;, 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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/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 1bc57ec..325652f 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -216,11 +216,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>&lt;E&gt; (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>&lt;T&gt;, 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/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/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/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/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/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/ab597584/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 f029496..367d0d6 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>&lt;E&gt; (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>&lt;T&gt;, 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/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/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/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/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/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/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/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/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/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/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/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 9f73bae..53e21be 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -710,20 +710,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>&lt;E&gt; (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>&lt;T&gt;, 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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/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 23060c2..6851ee1 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>&lt;E&gt; (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>&lt;T&gt;, 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/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/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/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/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html b/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html
index f8e4b11..3c7146a 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html
@@ -160,8 +160,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>&lt;E&gt; (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>&lt;T&gt;, 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.<a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationState.html" title="enum in org.apache.hadoop.hbase.replication"><span class="typeNameLink">SyncReplicationState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeer.PeerState.html" title="enum in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ReplicationPeer.PeerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationState.html" title="enum in org.apache.hadoop.hbase.replication"><span class="typeNameLink">SyncReplicationState</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/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 30c4e73..cd3870f 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
@@ -207,8 +207,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>&lt;E&gt; (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>&lt;T&gt;, 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/ab597584/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 f594c43..8051208 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -142,9 +142,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>&lt;E&gt; (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>&lt;T&gt;, 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/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/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/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/ab597584/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..2cef8bd 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -199,8 +199,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>&lt;E&gt; (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>&lt;T&gt;, 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/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/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/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 813f5bb..9690a51 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -515,13 +515,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>&lt;E&gt; (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>&lt;T&gt;, 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/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/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>&lt;T&gt;)</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/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/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/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/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/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/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/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>&lt;T&gt;)</li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/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 c6caa9b..bcb1724 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -191,8 +191,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>&lt;E&gt; (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>&lt;T&gt;, 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/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>
+<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/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 b8964a9..03c7c24 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 = "6d7bc0e98b25215e79f67f107fd0d3306dfcf352";<a name="line.11"></a>
+<span class="sourceLineNo">011</span>  public static final String revision = "cebb725a9f4ab8dd9d3f306d21d53d6f56161c51";<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 Sep 17 14:44:40 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Tue Sep 18 14:43:51 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 = "c84d66e08b953d4447102b307c654c63";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "54606a0f9ede6bd4aaf8d5d2c89cbcf3";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>}<a name="line.16"></a>
 
 


[02/18] hbase-site git commit: Published site at cebb725a9f4ab8dd9d3f306d21d53d6f56161c51.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/testdevapidocs/src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html
index fb460d2..ed463fe 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html
@@ -321,2799 +321,2779 @@
 <span class="sourceLineNo">313</span>            ResultScanner scanner = table.getScanner(s);<a name="line.313"></a>
 <span class="sourceLineNo">314</span>            Result[] next = scanner.next(3);<a name="line.314"></a>
 <span class="sourceLineNo">315</span>            assertEquals(1, next.length);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>          } catch (Throwable t) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>            throw new IOException(t);<a name="line.317"></a>
-<span class="sourceLineNo">318</span>          }<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>      };<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      SUPERUSER.runAs(scanAction);<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      d = new Delete(row1);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      // with visibility<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      d.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      d.addColumns(fam, qual, HConstants.LATEST_TIMESTAMP);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      table.delete(d);<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        @Override<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        public Void run() throws Exception {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>            Table table = connection.getTable(tableName)) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>            Scan s = new Scan();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>            ResultScanner scanner = table.getScanner(s);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>            Result[] next = scanner.next(3);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>            assertEquals(0, next.length);<a name="line.336"></a>
-<span class="sourceLineNo">337</span>          } catch (Throwable t) {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>            throw new IOException(t);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>          }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>          return null;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        }<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      };<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      SUPERUSER.runAs(scanAction);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    }<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>  @Test<a name="line.347"></a>
-<span class="sourceLineNo">348</span>  public void testDeleteColumnsWithAndWithoutVisibilityLabels() throws Exception {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    TableName tableName = createTable();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      Put put = new Put(row1);<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      put.addColumn(fam, qual, value);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      table.put(put);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      Delete d = new Delete(row1);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      // with visibility<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      d.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      d.addColumns(fam, qual, HConstants.LATEST_TIMESTAMP);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      table.delete(d);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      PrivilegedExceptionAction&lt;Void&gt; scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>        @Override<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        public Void run() throws Exception {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>            Table table = connection.getTable(tableName)) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>            Scan s = new Scan();<a name="line.365"></a>
-<span class="sourceLineNo">366</span>            ResultScanner scanner = table.getScanner(s);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>            Result[] next = scanner.next(3);<a name="line.367"></a>
-<span class="sourceLineNo">368</span>            assertEquals(0, next.length);<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          } catch (Throwable t) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>            throw new IOException(t);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>          }<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          return null;<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>      SUPERUSER.runAs(scanAction);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      d = new Delete(row1);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      // without visibility<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      d.addColumns(fam, qual, HConstants.LATEST_TIMESTAMP);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>      table.delete(d);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>        @Override<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        public Void run() throws Exception {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>            Table table = connection.getTable(tableName)) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>            Scan s = new Scan();<a name="line.385"></a>
-<span class="sourceLineNo">386</span>            ResultScanner scanner = table.getScanner(s);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>            Result[] next = scanner.next(3);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>            assertEquals(0, next.length);<a name="line.388"></a>
-<span class="sourceLineNo">389</span>          } catch (Throwable t) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>            throw new IOException(t);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>          }<a name="line.391"></a>
-<span class="sourceLineNo">392</span>          return null;<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>      SUPERUSER.runAs(scanAction);<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    }<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  }<a name="line.397"></a>
-<span class="sourceLineNo">398</span><a name="line.398"></a>
-<span class="sourceLineNo">399</span>  @Test<a name="line.399"></a>
-<span class="sourceLineNo">400</span>  public void testDeleteFamiliesWithoutAndWithVisibilityLabels() throws Exception {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    TableName tableName = createTable();<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      Put put = new Put(row1);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      put.addColumn(fam, qual, value);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      table.put(put);<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      Delete d = new Delete(row1);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      // without visibility<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      d.addFamily(fam);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      table.delete(d);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      PrivilegedExceptionAction&lt;Void&gt; scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        @Override<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        public Void run() throws Exception {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>            Table table = connection.getTable(tableName)) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>            Scan s = new Scan();<a name="line.416"></a>
-<span class="sourceLineNo">417</span>            ResultScanner scanner = table.getScanner(s);<a name="line.417"></a>
-<span class="sourceLineNo">418</span>            Result[] next = scanner.next(3);<a name="line.418"></a>
-<span class="sourceLineNo">419</span>            assertEquals(1, next.length);<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          } catch (Throwable t) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>            throw new IOException(t);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>          }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>          return null;<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        }<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      };<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      SUPERUSER.runAs(scanAction);<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      d = new Delete(row1);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      // with visibility<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      d.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      d.addFamily(fam);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      table.delete(d);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>        @Override<a name="line.433"></a>
-<span class="sourceLineNo">434</span>        public Void run() throws Exception {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>            Table table = connection.getTable(tableName)) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>            Scan s = new Scan();<a name="line.437"></a>
-<span class="sourceLineNo">438</span>            ResultScanner scanner = table.getScanner(s);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>            Result[] next = scanner.next(3);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>            assertEquals(0, next.length);<a name="line.440"></a>
-<span class="sourceLineNo">441</span>          } catch (Throwable t) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>            throw new IOException(t);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          }<a name="line.443"></a>
-<span class="sourceLineNo">444</span>          return null;<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        }<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      };<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      SUPERUSER.runAs(scanAction);<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><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  @Test<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  public void testDeleteFamiliesWithAndWithoutVisibilityLabels() throws Exception {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    TableName tableName = createTable();<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      Put put = new Put(row1);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      put.addColumn(fam, qual, value);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      table.put(put);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      Delete d = new Delete(row1);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      d.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      // with visibility<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      d.addFamily(fam);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      table.delete(d);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      PrivilegedExceptionAction&lt;Void&gt; scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>        @Override<a name="line.465"></a>
-<span class="sourceLineNo">466</span>        public Void run() throws Exception {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>            Table table = connection.getTable(tableName)) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>            Scan s = new Scan();<a name="line.469"></a>
-<span class="sourceLineNo">470</span>            ResultScanner scanner = table.getScanner(s);<a name="line.470"></a>
-<span class="sourceLineNo">471</span>            Result[] next = scanner.next(3);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>            assertEquals(0, next.length);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>          } catch (Throwable t) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>            throw new IOException(t);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>          }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>          return null;<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>      SUPERUSER.runAs(scanAction);<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      d = new Delete(row1);<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      // without visibility<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      d.addFamily(fam);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      table.delete(d);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        @Override<a name="line.485"></a>
-<span class="sourceLineNo">486</span>        public Void run() throws Exception {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.487"></a>
-<span class="sourceLineNo">488</span>            Table table = connection.getTable(tableName)) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>            Scan s = new Scan();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>            ResultScanner scanner = table.getScanner(s);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>            Result[] next = scanner.next(3);<a name="line.491"></a>
-<span class="sourceLineNo">492</span>            assertEquals(0, next.length);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>          } catch (Throwable t) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>            throw new IOException(t);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>          }<a name="line.495"></a>
-<span class="sourceLineNo">496</span>          return null;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>        }<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      };<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      SUPERUSER.runAs(scanAction);<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>  @Test<a name="line.503"></a>
-<span class="sourceLineNo">504</span>  public void testDeletesWithoutAndWithVisibilityLabels() throws Exception {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    TableName tableName = createTable();<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      Put put = new Put(row1);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      put.addColumn(fam, qual, value);<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      table.put(put);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      Delete d = new Delete(row1);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      // without visibility<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      d.addColumn(fam, qual);<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      table.delete(d);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      PrivilegedExceptionAction&lt;Void&gt; scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        @Override<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        public Void run() throws Exception {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>            Table table = connection.getTable(tableName)) {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>            Scan s = new Scan();<a name="line.520"></a>
-<span class="sourceLineNo">521</span>            ResultScanner scanner = table.getScanner(s);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>            // The delete would not be able to apply it because of visibility mismatch<a name="line.522"></a>
-<span class="sourceLineNo">523</span>            Result[] next = scanner.next(3);<a name="line.523"></a>
-<span class="sourceLineNo">524</span>            assertEquals(1, next.length);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>          } catch (Throwable t) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>            throw new IOException(t);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>          }<a name="line.527"></a>
-<span class="sourceLineNo">528</span>          return null;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>        }<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      };<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      SUPERUSER.runAs(scanAction);<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      d = new Delete(row1);<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      // with visibility<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      d.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      d.addColumn(fam, qual);<a name="line.535"></a>
-<span class="sourceLineNo">536</span>      table.delete(d);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        @Override<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        public Void run() throws Exception {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.540"></a>
-<span class="sourceLineNo">541</span>            Table table = connection.getTable(tableName)) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>            Scan s = new Scan();<a name="line.542"></a>
-<span class="sourceLineNo">543</span>            ResultScanner scanner = table.getScanner(s);<a name="line.543"></a>
-<span class="sourceLineNo">544</span>            Result[] next = scanner.next(3);<a name="line.544"></a>
-<span class="sourceLineNo">545</span>            // this will alone match<a name="line.545"></a>
-<span class="sourceLineNo">546</span>            assertEquals(0, next.length);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>          } catch (Throwable t) {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>            throw new IOException(t);<a name="line.548"></a>
-<span class="sourceLineNo">549</span>          }<a name="line.549"></a>
-<span class="sourceLineNo">550</span>          return null;<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>      SUPERUSER.runAs(scanAction);<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
-<span class="sourceLineNo">555</span>  }<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>  @Test<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  public void testVisibilityLabelsWithDeleteFamilyWithPutsReAppearing() throws Exception {<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    TableName tableName = createTable(5);<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>      Put put = new Put(Bytes.toBytes("row1"));<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      put.addColumn(fam, qual, value);<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.563"></a>
-<span class="sourceLineNo">564</span>      table.put(put);<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      put = new Put(Bytes.toBytes("row1"));<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      put.addColumn(fam, qual, value);<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      put.setCellVisibility(new CellVisibility(SECRET));<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      table.put(put);<a name="line.568"></a>
-<span class="sourceLineNo">569</span>      TEST_UTIL.getAdmin().flush(tableName);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      PrivilegedExceptionAction&lt;Void&gt; actiona = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>        @Override<a name="line.571"></a>
-<span class="sourceLineNo">572</span>        public Void run() throws Exception {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.573"></a>
-<span class="sourceLineNo">574</span>            Table table = connection.getTable(tableName)) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>            Delete d = new Delete(row1);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>            d.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.576"></a>
-<span class="sourceLineNo">577</span>            d.addFamily(fam);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>            table.delete(d);<a name="line.578"></a>
-<span class="sourceLineNo">579</span>          } catch (Throwable t) {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>            throw new IOException(t);<a name="line.580"></a>
-<span class="sourceLineNo">581</span>          }<a name="line.581"></a>
-<span class="sourceLineNo">582</span>          return null;<a name="line.582"></a>
-<span class="sourceLineNo">583</span>        }<a name="line.583"></a>
-<span class="sourceLineNo">584</span>      };<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      SUPERUSER.runAs(actiona);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>      Scan s = new Scan();<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      s.readVersions(5);<a name="line.587"></a>
-<span class="sourceLineNo">588</span>      s.setAuthorizations(new Authorizations(SECRET));<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      ResultScanner scanner = table.getScanner(s);<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      Result[] next = scanner.next(3);<a name="line.590"></a>
-<span class="sourceLineNo">591</span>      assertEquals(1, next.length);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      put = new Put(Bytes.toBytes("row1"));<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      put.addColumn(fam, qual, value1);<a name="line.593"></a>
-<span class="sourceLineNo">594</span>      put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      table.put(put);<a name="line.595"></a>
-<span class="sourceLineNo">596</span>      actiona = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>        @Override<a name="line.597"></a>
-<span class="sourceLineNo">598</span>        public Void run() throws Exception {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.599"></a>
-<span class="sourceLineNo">600</span>            Table table = connection.getTable(tableName)) {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>            Delete d = new Delete(row1);<a name="line.601"></a>
-<span class="sourceLineNo">602</span>            d.setCellVisibility(new CellVisibility(SECRET));<a name="line.602"></a>
-<span class="sourceLineNo">603</span>            d.addFamily(fam);<a name="line.603"></a>
-<span class="sourceLineNo">604</span>            table.delete(d);<a name="line.604"></a>
-<span class="sourceLineNo">605</span>          } catch (Throwable t) {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>            throw new IOException(t);<a name="line.606"></a>
-<span class="sourceLineNo">607</span>          }<a name="line.607"></a>
-<span class="sourceLineNo">608</span>          return null;<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>      SUPERUSER.runAs(actiona);<a name="line.611"></a>
-<span class="sourceLineNo">612</span>      s = new Scan();<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      s.readVersions(5);<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      s.setAuthorizations(new Authorizations(CONFIDENTIAL));<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      scanner = table.getScanner(s);<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      next = scanner.next(3);<a name="line.616"></a>
-<span class="sourceLineNo">617</span>      assertEquals(1, next.length);<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      s = new Scan();<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      s.readVersions(5);<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      s.setAuthorizations(new Authorizations(SECRET));<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      scanner = table.getScanner(s);<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      Result[] next1 = scanner.next(3);<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      assertEquals(0, next1.length);<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    }<a name="line.624"></a>
-<span class="sourceLineNo">625</span>  }<a name="line.625"></a>
-<span class="sourceLineNo">626</span><a name="line.626"></a>
-<span class="sourceLineNo">627</span>  @Test<a name="line.627"></a>
-<span class="sourceLineNo">628</span>  public void testVisibilityLabelsWithDeleteColumnsWithPutsReAppearing() throws Exception {<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    TableName tableName = createTable(5);<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      Put put = new Put(Bytes.toBytes("row1"));<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      put.addColumn(fam, qual, value);<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      table.put(put);<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      put = new Put(Bytes.toBytes("row1"));<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      put.addColumn(fam, qual, value);<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      put.setCellVisibility(new CellVisibility(SECRET));<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      table.put(put);<a name="line.638"></a>
-<span class="sourceLineNo">639</span>      TEST_UTIL.getAdmin().flush(tableName);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      PrivilegedExceptionAction&lt;Void&gt; actiona = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>        @Override<a name="line.641"></a>
-<span class="sourceLineNo">642</span>        public Void run() throws Exception {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>            Table table = connection.getTable(tableName)) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>            Delete d = new Delete(row1);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>            d.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.646"></a>
-<span class="sourceLineNo">647</span>            d.addColumns(fam, qual);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>            table.delete(d);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>          } catch (Throwable t) {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>            throw new IOException(t);<a name="line.650"></a>
-<span class="sourceLineNo">651</span>          }<a name="line.651"></a>
-<span class="sourceLineNo">652</span>          return null;<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>      SUPERUSER.runAs(actiona);<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      Scan s = new Scan();<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      s.readVersions(5);<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      s.setAuthorizations(new Authorizations(SECRET));<a name="line.658"></a>
-<span class="sourceLineNo">659</span>      ResultScanner scanner = table.getScanner(s);<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      Result[] next = scanner.next(3);<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      assertEquals(1, next.length);<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      put = new Put(Bytes.toBytes("row1"));<a name="line.662"></a>
-<span class="sourceLineNo">663</span>      put.addColumn(fam, qual, value1);<a name="line.663"></a>
-<span class="sourceLineNo">664</span>      put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.664"></a>
-<span class="sourceLineNo">665</span>      table.put(put);<a name="line.665"></a>
-<span class="sourceLineNo">666</span>      actiona = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>        @Override<a name="line.667"></a>
-<span class="sourceLineNo">668</span>        public Void run() throws Exception {<a name="line.668"></a>
-<span class="sourceLineNo">669</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.669"></a>
-<span class="sourceLineNo">670</span>            Table table = connection.getTable(tableName)) {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>            Delete d = new Delete(row1);<a name="line.671"></a>
-<span class="sourceLineNo">672</span>            d.setCellVisibility(new CellVisibility(SECRET));<a name="line.672"></a>
-<span class="sourceLineNo">673</span>            d.addColumns(fam, qual);<a name="line.673"></a>
-<span class="sourceLineNo">674</span>            table.delete(d);<a name="line.674"></a>
-<span class="sourceLineNo">675</span>          } catch (Throwable t) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span>            throw new IOException(t);<a name="line.676"></a>
-<span class="sourceLineNo">677</span>          }<a name="line.677"></a>
-<span class="sourceLineNo">678</span>          return null;<a name="line.678"></a>
-<span class="sourceLineNo">679</span>        }<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      };<a name="line.680"></a>
-<span class="sourceLineNo">681</span>      SUPERUSER.runAs(actiona);<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      s = new Scan();<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      s.readVersions(5);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>      s.setAuthorizations(new Authorizations(CONFIDENTIAL));<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      scanner = table.getScanner(s);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      next = scanner.next(3);<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      assertEquals(1, next.length);<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      s = new Scan();<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      s.readVersions(5);<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      s.setAuthorizations(new Authorizations(SECRET));<a name="line.690"></a>
-<span class="sourceLineNo">691</span>      scanner = table.getScanner(s);<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      Result[] next1 = scanner.next(3);<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      assertEquals(0, next1.length);<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    }<a name="line.694"></a>
-<span class="sourceLineNo">695</span>  }<a name="line.695"></a>
-<span class="sourceLineNo">696</span><a name="line.696"></a>
-<span class="sourceLineNo">697</span>  @Test<a name="line.697"></a>
-<span class="sourceLineNo">698</span>  public void testVisibilityCombinations() throws Exception {<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    TableName tableName = createTable(5);<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.700"></a>
-<span class="sourceLineNo">701</span>      Put put = new Put(Bytes.toBytes("row1"));<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      put.addColumn(fam, qual, 123L, value);<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      table.put(put);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>      put = new Put(Bytes.toBytes("row1"));<a name="line.705"></a>
-<span class="sourceLineNo">706</span>      put.addColumn(fam, qual, 124L, value1);<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      put.setCellVisibility(new CellVisibility(SECRET));<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      table.put(put);<a name="line.708"></a>
-<span class="sourceLineNo">709</span>      PrivilegedExceptionAction&lt;Void&gt; actiona = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        @Override<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        public Void run() throws Exception {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.712"></a>
-<span class="sourceLineNo">713</span>            Table table = connection.getTable(tableName)) {<a name="line.713"></a>
-<span class="sourceLineNo">714</span>            Delete d = new Delete(row1);<a name="line.714"></a>
-<span class="sourceLineNo">715</span>            d.setCellVisibility(new CellVisibility(SECRET));<a name="line.715"></a>
-<span class="sourceLineNo">716</span>            d.addColumns(fam, qual, 126L);<a name="line.716"></a>
-<span class="sourceLineNo">717</span>            table.delete(d);<a name="line.717"></a>
-<span class="sourceLineNo">718</span>          } catch (Throwable t) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>            throw new IOException(t);<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>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.722"></a>
-<span class="sourceLineNo">723</span>            Table table = connection.getTable(tableName)) {<a name="line.723"></a>
-<span class="sourceLineNo">724</span>            Delete d = new Delete(row1);<a name="line.724"></a>
-<span class="sourceLineNo">725</span>            d.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.725"></a>
-<span class="sourceLineNo">726</span>            d.addColumn(fam, qual, 123L);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>            table.delete(d);<a name="line.727"></a>
-<span class="sourceLineNo">728</span>          } catch (Throwable t) {<a name="line.728"></a>
-<span class="sourceLineNo">729</span>            throw new IOException(t);<a name="line.729"></a>
-<span class="sourceLineNo">730</span>          }<a name="line.730"></a>
-<span class="sourceLineNo">731</span>          return null;<a name="line.731"></a>
-<span class="sourceLineNo">732</span>        }<a name="line.732"></a>
-<span class="sourceLineNo">733</span>      };<a name="line.733"></a>
-<span class="sourceLineNo">734</span>      SUPERUSER.runAs(actiona);<a name="line.734"></a>
-<span class="sourceLineNo">735</span>      Scan s = new Scan();<a name="line.735"></a>
-<span class="sourceLineNo">736</span>      s.readVersions(5);<a name="line.736"></a>
-<span class="sourceLineNo">737</span>      s.setAuthorizations(new Authorizations(CONFIDENTIAL, SECRET));<a name="line.737"></a>
-<span class="sourceLineNo">738</span>      ResultScanner scanner = table.getScanner(s);<a name="line.738"></a>
-<span class="sourceLineNo">739</span>      Result[] next = scanner.next(3);<a name="line.739"></a>
-<span class="sourceLineNo">740</span>      assertEquals(0, next.length);<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>  @Test<a name="line.744"></a>
-<span class="sourceLineNo">745</span>  public void testVisibilityLabelsWithDeleteColumnWithSpecificVersionWithPutsReAppearing()<a name="line.745"></a>
-<span class="sourceLineNo">746</span>      throws Exception {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>    TableName tableName = createTable(5);<a name="line.747"></a>
-<span class="sourceLineNo">748</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.748"></a>
-<span class="sourceLineNo">749</span>      Put put1 = new Put(Bytes.toBytes("row1"));<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      put1.addColumn(fam, qual, 123L, value);<a name="line.750"></a>
-<span class="sourceLineNo">751</span>      put1.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.751"></a>
-<span class="sourceLineNo">752</span><a name="line.752"></a>
-<span class="sourceLineNo">753</span>      Put put2 = new Put(Bytes.toBytes("row1"));<a name="line.753"></a>
-<span class="sourceLineNo">754</span>      put2.addColumn(fam, qual, 123L, value1);<a name="line.754"></a>
-<span class="sourceLineNo">755</span>      put2.setCellVisibility(new CellVisibility(SECRET));<a name="line.755"></a>
-<span class="sourceLineNo">756</span>      table.put(createList(put1, put2));<a name="line.756"></a>
-<span class="sourceLineNo">757</span><a name="line.757"></a>
-<span class="sourceLineNo">758</span>      Scan s = new Scan();<a name="line.758"></a>
-<span class="sourceLineNo">759</span>      s.readVersions(5);<a name="line.759"></a>
-<span class="sourceLineNo">760</span>      s.setAuthorizations(new Authorizations(CONFIDENTIAL, SECRET));<a name="line.760"></a>
-<span class="sourceLineNo">761</span><a name="line.761"></a>
-<span class="sourceLineNo">762</span>      ResultScanner scanner = table.getScanner(s);<a name="line.762"></a>
-<span class="sourceLineNo">763</span>      assertEquals(1, scanner.next(3).length);<a name="line.763"></a>
-<span class="sourceLineNo">764</span>      scanner.close();<a name="line.764"></a>
-<span class="sourceLineNo">765</span><a name="line.765"></a>
-<span class="sourceLineNo">766</span>      PrivilegedExceptionAction&lt;Void&gt; actiona = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.766"></a>
-<span class="sourceLineNo">767</span>        @Override<a name="line.767"></a>
-<span class="sourceLineNo">768</span>        public Void run() throws Exception {<a name="line.768"></a>
-<span class="sourceLineNo">769</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.769"></a>
-<span class="sourceLineNo">770</span>            Table table = connection.getTable(tableName)) {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>            Delete d = new Delete(row1);<a name="line.771"></a>
-<span class="sourceLineNo">772</span>            d.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.772"></a>
-<span class="sourceLineNo">773</span>            d.addColumn(fam, qual, 123L);<a name="line.773"></a>
-<span class="sourceLineNo">774</span>            table.delete(d);<a name="line.774"></a>
-<span class="sourceLineNo">775</span>          }<a name="line.775"></a>
-<span class="sourceLineNo">776</span><a name="line.776"></a>
-<span class="sourceLineNo">777</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.777"></a>
-<span class="sourceLineNo">778</span>            Table table = connection.getTable(tableName)) {<a name="line.778"></a>
-<span class="sourceLineNo">779</span>            Delete d = new Delete(row1);<a name="line.779"></a>
-<span class="sourceLineNo">780</span>            d.setCellVisibility(new CellVisibility(SECRET));<a name="line.780"></a>
-<span class="sourceLineNo">781</span>            d.addColumn(fam, qual, 123L);<a name="line.781"></a>
-<span class="sourceLineNo">782</span>            table.delete(d);<a name="line.782"></a>
-<span class="sourceLineNo">783</span>          } catch (Throwable t) {<a name="line.783"></a>
-<span class="sourceLineNo">784</span>            throw new IOException(t);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>          }<a name="line.785"></a>
-<span class="sourceLineNo">786</span>          return null;<a name="line.786"></a>
-<span class="sourceLineNo">787</span>        }<a name="line.787"></a>
-<span class="sourceLineNo">788</span>      };<a name="line.788"></a>
-<span class="sourceLineNo">789</span>      SUPERUSER.runAs(actiona);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      s = new Scan();<a name="line.790"></a>
-<span class="sourceLineNo">791</span>      s.readVersions(5);<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      s.setAuthorizations(new Authorizations(CONFIDENTIAL));<a name="line.792"></a>
-<span class="sourceLineNo">793</span>      scanner = table.getScanner(s);<a name="line.793"></a>
-<span class="sourceLineNo">794</span>      assertEquals(0, scanner.next(3).length);<a name="line.794"></a>
-<span class="sourceLineNo">795</span>      scanner.close();<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><a name="line.798"></a>
-<span class="sourceLineNo">799</span>  @Test<a name="line.799"></a>
-<span class="sourceLineNo">800</span>  public void testVisibilityLabelsWithDeleteFamilyNoMatchingVisExpWithMultipleVersionsNoTimestamp()<a name="line.800"></a>
-<span class="sourceLineNo">801</span>      throws Exception {<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    setAuths();<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    final TableName tableName = TableName.valueOf(testName.getMethodName());<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    try (Table table = doPuts(tableName)) {<a name="line.804"></a>
-<span class="sourceLineNo">805</span>      TEST_UTIL.getAdmin().flush(tableName);<a name="line.805"></a>
-<span class="sourceLineNo">806</span>      PrivilegedExceptionAction&lt;Void&gt; actiona = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>        @Override<a name="line.807"></a>
-<span class="sourceLineNo">808</span>        public Void run() throws Exception {<a name="line.808"></a>
-<span class="sourceLineNo">809</span>          Delete d1 = new Delete(row1);<a name="line.809"></a>
-<span class="sourceLineNo">810</span>          d1.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.810"></a>
-<span class="sourceLineNo">811</span>          d1.addFamily(fam);<a name="line.811"></a>
-<span class="sourceLineNo">812</span><a name="line.812"></a>
-<span class="sourceLineNo">813</span>          Delete d2 = new Delete(row1);<a name="line.813"></a>
-<span class="sourceLineNo">814</span>          d2.setCellVisibility(new CellVisibility(SECRET));<a name="line.814"></a>
-<span class="sourceLineNo">815</span>          d2.addFamily(fam);<a name="line.815"></a>
-<span class="sourceLineNo">816</span><a name="line.816"></a>
-<span class="sourceLineNo">817</span>          Delete d3 = new Delete(row1);<a name="line.817"></a>
-<span class="sourceLineNo">818</span>          d3.setCellVisibility(new CellVisibility(<a name="line.818"></a>
-<span class="sourceLineNo">819</span>              "(" + PRIVATE + "&amp;" + CONFIDENTIAL + ")|(" + SECRET + "&amp;" + TOPSECRET + ")"));<a name="line.819"></a>
-<span class="sourceLineNo">820</span>          d3.addFamily(fam);<a name="line.820"></a>
-<span class="sourceLineNo">821</span><a name="line.821"></a>
-<span class="sourceLineNo">822</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.822"></a>
-<span class="sourceLineNo">823</span>            Table table = connection.getTable(tableName)) {<a name="line.823"></a>
-<span class="sourceLineNo">824</span>            table.delete(createList(d1, d2, d3));<a name="line.824"></a>
-<span class="sourceLineNo">825</span>          } catch (Throwable t) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span>            throw new IOException(t);<a name="line.826"></a>
-<span class="sourceLineNo">827</span>          }<a name="line.827"></a>
-<span class="sourceLineNo">828</span>          return null;<a name="line.828"></a>
-<span class="sourceLineNo">829</span>        }<a name="line.829"></a>
-<span class="sourceLineNo">830</span>      };<a name="line.830"></a>
-<span class="sourceLineNo">831</span>      SUPERUSER.runAs(actiona);<a name="line.831"></a>
-<span class="sourceLineNo">832</span>      Scan s = new Scan();<a name="line.832"></a>
-<span class="sourceLineNo">833</span>      s.readVersions(5);<a name="line.833"></a>
-<span class="sourceLineNo">834</span>      s.setAuthorizations(new Authorizations(SECRET, PRIVATE, CONFIDENTIAL, TOPSECRET));<a name="line.834"></a>
-<span class="sourceLineNo">835</span>      ResultScanner scanner = table.getScanner(s);<a name="line.835"></a>
-<span class="sourceLineNo">836</span>      Result[] next = scanner.next(3);<a name="line.836"></a>
-<span class="sourceLineNo">837</span>      assertTrue(next.length == 2);<a name="line.837"></a>
-<span class="sourceLineNo">838</span>      CellScanner cellScanner = next[0].cellScanner();<a name="line.838"></a>
-<span class="sourceLineNo">839</span>      cellScanner.advance();<a name="line.839"></a>
-<span class="sourceLineNo">840</span>      Cell current = cellScanner.current();<a name="line.840"></a>
-<span class="sourceLineNo">841</span>      assertTrue(Bytes.equals(current.getRowArray(), current.getRowOffset(), current.getRowLength(),<a name="line.841"></a>
-<span class="sourceLineNo">842</span>        row1, 0, row1.length));<a name="line.842"></a>
-<span class="sourceLineNo">843</span>      cellScanner = next[1].cellScanner();<a name="line.843"></a>
-<span class="sourceLineNo">844</span>      cellScanner.advance();<a name="line.844"></a>
-<span class="sourceLineNo">845</span>      current = cellScanner.current();<a name="line.845"></a>
-<span class="sourceLineNo">846</span>      assertTrue(Bytes.equals(current.getRowArray(), current.getRowOffset(), current.getRowLength(),<a name="line.846"></a>
-<span class="sourceLineNo">847</span>        row2, 0, row2.length));<a name="line.847"></a>
-<span class="sourceLineNo">848</span>      scanner.close();<a name="line.848"></a>
-<span class="sourceLineNo">849</span>    }<a name="line.849"></a>
-<span class="sourceLineNo">850</span>  }<a name="line.850"></a>
-<span class="sourceLineNo">851</span><a name="line.851"></a>
-<span class="sourceLineNo">852</span>  @Test<a name="line.852"></a>
-<span class="sourceLineNo">853</span>  public void testDeleteFamilyAndDeleteColumnsWithAndWithoutVisibilityExp() throws Exception {<a name="line.853"></a>
-<span class="sourceLineNo">854</span>    setAuths();<a name="line.854"></a>
-<span class="sourceLineNo">855</span>    final TableName tableName = TableName.valueOf(testName.getMethodName());<a name="line.855"></a>
-<span class="sourceLineNo">856</span>    try (Table table = doPuts(tableName)) {<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      TEST_UTIL.getAdmin().flush(tableName);<a name="line.857"></a>
-<span class="sourceLineNo">858</span>      PrivilegedExceptionAction&lt;Void&gt; actiona = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.858"></a>
-<span class="sourceLineNo">859</span>        @Override<a name="line.859"></a>
-<span class="sourceLineNo">860</span>        public Void run() throws Exception {<a name="line.860"></a>
-<span class="sourceLineNo">861</span>          Delete d1 = new Delete(row1);<a name="line.861"></a>
-<span class="sourceLineNo">862</span>          d1.addFamily(fam);<a name="line.862"></a>
-<span class="sourceLineNo">863</span><a name="line.863"></a>
-<span class="sourceLineNo">864</span>          Delete d2 = new Delete(row1);<a name="line.864"></a>
-<span class="sourceLineNo">865</span>          d2.setCellVisibility(new CellVisibility(SECRET + "&amp;" + TOPSECRET));<a name="line.865"></a>
-<span class="sourceLineNo">866</span>          d2.addColumns(fam, qual);<a name="line.866"></a>
-<span class="sourceLineNo">867</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.867"></a>
-<span class="sourceLineNo">868</span>            Table table = connection.getTable(tableName)) {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>            table.delete(createList(d1, d2));<a name="line.869"></a>
-<span class="sourceLineNo">870</span>          } catch (Throwable t) {<a name="line.870"></a>
-<span class="sourceLineNo">871</span>            throw new IOException(t);<a name="line.871"></a>
-<span class="sourceLineNo">872</span>          }<a name="line.872"></a>
-<span class="sourceLineNo">873</span>          return null;<a name="line.873"></a>
-<span class="sourceLineNo">874</span>        }<a name="line.874"></a>
-<span class="sourceLineNo">875</span>      };<a name="line.875"></a>
-<span class="sourceLineNo">876</span>      SUPERUSER.runAs(actiona);<a name="line.876"></a>
-<span class="sourceLineNo">877</span>      Scan s = new Scan();<a name="line.877"></a>
-<span class="sourceLineNo">878</span>      s.readVersions(5);<a name="line.878"></a>
-<span class="sourceLineNo">879</span>      s.setAuthorizations(new Authorizations(SECRET, PRIVATE, CONFIDENTIAL, TOPSECRET));<a name="line.879"></a>
-<span class="sourceLineNo">880</span>      ResultScanner scanner = table.getScanner(s);<a name="line.880"></a>
-<span class="sourceLineNo">881</span>      Result[] next = scanner.next(3);<a name="line.881"></a>
-<span class="sourceLineNo">882</span>      assertTrue(next.length == 2);<a name="line.882"></a>
-<span class="sourceLineNo">883</span>      CellScanner cellScanner = next[0].cellScanner();<a name="line.883"></a>
-<span class="sourceLineNo">884</span>      cellScanner.advance();<a name="line.884"></a>
-<span class="sourceLineNo">885</span>      Cell current = cellScanner.current();<a name="line.885"></a>
-<span class="sourceLineNo">886</span>      assertTrue(Bytes.equals(current.getRowArray(), current.getRowOffset(), current.getRowLength(),<a name="line.886"></a>
-<span class="sourceLineNo">887</span>        row1, 0, row1.length));<a name="line.887"></a>
-<span class="sourceLineNo">888</span>      assertEquals(127L, current.getTimestamp());<a name="line.888"></a>
-<span class="sourceLineNo">889</span>      cellScanner.advance();<a name="line.889"></a>
-<span class="sourceLineNo">890</span>      current = cellScanner.current();<a name="line.890"></a>
-<span class="sourceLineNo">891</span>      assertTrue(Bytes.equals(current.getRowArray(), current.getRowOffset(), current.getRowLength(),<a name="line.891"></a>
-<span class="sourceLineNo">892</span>        row1, 0, row1.length));<a name="line.892"></a>
-<span class="sourceLineNo">893</span>      assertEquals(126L, current.getTimestamp());<a name="line.893"></a>
-<span class="sourceLineNo">894</span>      cellScanner.advance();<a name="line.894"></a>
-<span class="sourceLineNo">895</span>      current = cellScanner.current();<a name="line.895"></a>
-<span class="sourceLineNo">896</span>      assertTrue(Bytes.equals(current.getRowArray(), current.getRowOffset(), current.getRowLength(),<a name="line.896"></a>
-<span class="sourceLineNo">897</span>        row1, 0, row1.length));<a name="line.897"></a>
-<span class="sourceLineNo">898</span>      assertEquals(124L, current.getTimestamp());<a name="line.898"></a>
-<span class="sourceLineNo">899</span>      cellScanner.advance();<a name="line.899"></a>
-<span class="sourceLineNo">900</span>      current = cellScanner.current();<a name="line.900"></a>
-<span class="sourceLineNo">901</span>      assertTrue(Bytes.equals(current.getRowArray(), current.getRowOffset(), current.getRowLength(),<a name="line.901"></a>
-<span class="sourceLineNo">902</span>        row1, 0, row1.length));<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      assertEquals(123L, current.getTimestamp());<a name="line.903"></a>
-<span class="sourceLineNo">904</span>      cellScanner = next[1].cellScanner();<a name="line.904"></a>
-<span class="sourceLineNo">905</span>      cellScanner.advance();<a name="line.905"></a>
-<span class="sourceLineNo">906</span>      current = cellScanner.current();<a name="line.906"></a>
-<span class="sourceLineNo">907</span>      assertTrue(Bytes.equals(current.getRowArray(), current.getRowOffset(), current.getRowLength(),<a name="line.907"></a>
-<span class="sourceLineNo">908</span>        row2, 0, row2.length));<a name="line.908"></a>
-<span class="sourceLineNo">909</span>      scanner.close();<a name="line.909"></a>
-<span class="sourceLineNo">910</span>    }<a name="line.910"></a>
-<span class="sourceLineNo">911</span>  }<a name="line.911"></a>
-<span class="sourceLineNo">912</span><a name="line.912"></a>
-<span class="sourceLineNo">913</span>  private Table doPuts(TableName tableName) throws IOException, InterruptedIOException,<a name="line.913"></a>
-<span class="sourceLineNo">914</span>      RetriesExhaustedWithDetailsException, InterruptedException {<a name="line.914"></a>
-<span class="sourceLineNo">915</span>    createTable(tableName, 5);<a name="line.915"></a>
-<span class="sourceLineNo">916</span><a name="line.916"></a>
-<span class="sourceLineNo">917</span>    List&lt;Put&gt; puts = new ArrayList&lt;&gt;(5);<a name="line.917"></a>
-<span class="sourceLineNo">918</span>    Put put = new Put(Bytes.toBytes("row1"));<a name="line.918"></a>
-<span class="sourceLineNo">919</span>    put.addColumn(fam, qual, 123L, value);<a name="line.919"></a>
-<span class="sourceLineNo">920</span>    put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.920"></a>
-<span class="sourceLineNo">921</span>    puts.add(put);<a name="line.921"></a>
-<span class="sourceLineNo">922</span><a name="line.922"></a>
-<span class="sourceLineNo">923</span>    put = new Put(Bytes.toBytes("row1"));<a name="line.923"></a>
-<span class="sourceLineNo">924</span>    put.addColumn(fam, qual, 124L, value);<a name="line.924"></a>
-<span class="sourceLineNo">925</span>    put.setCellVisibility(new CellVisibility(<a name="line.925"></a>
-<span class="sourceLineNo">926</span>        "(" + CONFIDENTIAL + "&amp;" + PRIVATE + ")|(" + TOPSECRET + "&amp;" + SECRET + ")"));<a name="line.926"></a>
-<span class="sourceLineNo">927</span>    puts.add(put);<a name="line.927"></a>
-<span class="sourceLineNo">928</span><a name="line.928"></a>
-<span class="sourceLineNo">929</span>    put = new Put(Bytes.toBytes("row1"));<a name="line.929"></a>
-<span class="sourceLineNo">930</span>    put.addColumn(fam, qual, 125L, value);<a name="line.930"></a>
-<span class="sourceLineNo">931</span>    put.setCellVisibility(new CellVisibility(SECRET + "&amp;" + TOPSECRET));<a name="line.931"></a>
-<span class="sourceLineNo">932</span>    puts.add(put);<a name="line.932"></a>
-<span class="sourceLineNo">933</span><a name="line.933"></a>
-<span class="sourceLineNo">934</span>    put = new Put(Bytes.toBytes("row1"));<a name="line.934"></a>
-<span class="sourceLineNo">935</span>    put.addColumn(fam, qual, 126L, value);<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    put.setCellVisibility(new CellVisibility(<a name="line.936"></a>
-<span class="sourceLineNo">937</span>        "(" + CONFIDENTIAL + "&amp;" + PRIVATE + ")|(" + TOPSECRET + "&amp;" + SECRET + ")"));<a name="line.937"></a>
-<span class="sourceLineNo">938</span>    puts.add(put);<a name="line.938"></a>
-<span class="sourceLineNo">939</span><a name="line.939"></a>
-<span class="sourceLineNo">940</span>    put = new Put(Bytes.toBytes("row1"));<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    put.addColumn(fam, qual, 127L, value);<a name="line.941"></a>
-<span class="sourceLineNo">942</span>    put.setCellVisibility(new CellVisibility(<a name="line.942"></a>
-<span class="sourceLineNo">943</span>        "(" + CONFIDENTIAL + "&amp;" + PRIVATE + ")|(" + TOPSECRET + "&amp;" + SECRET + ")"));<a name="line.943"></a>
-<span class="sourceLineNo">944</span>    puts.add(put);<a name="line.944"></a>
-<span class="sourceLineNo">945</span><a name="line.945"></a>
-<span class="sourceLineNo">946</span>    TEST_UTIL.getAdmin().flush(tableName);<a name="line.946"></a>
-<span class="sourceLineNo">947</span>    put = new Put(Bytes.toBytes("row2"));<a name="line.947"></a>
-<span class="sourceLineNo">948</span>    put.addColumn(fam, qual, 127L, value);<a name="line.948"></a>
-<span class="sourceLineNo">949</span>    put.setCellVisibility(new CellVisibility(<a name="line.949"></a>
-<span class="sourceLineNo">950</span>        "(" + CONFIDENTIAL + "&amp;" + PRIVATE + ")|(" + TOPSECRET + "&amp;" + SECRET + ")"));<a name="line.950"></a>
-<span class="sourceLineNo">951</span>    puts.add(put);<a name="line.951"></a>
-<span class="sourceLineNo">952</span><a name="line.952"></a>
-<span class="sourceLineNo">953</span>    Table table = TEST_UTIL.getConnection().getTable(tableName);<a name="line.953"></a>
-<span class="sourceLineNo">954</span>    table.put(puts);<a name="line.954"></a>
-<span class="sourceLineNo">955</span>    return table;<a name="line.955"></a>
-<span class="sourceLineNo">956</span>  }<a name="line.956"></a>
-<span class="sourceLineNo">957</span><a name="line.957"></a>
-<span class="sourceLineNo">958</span>  private Table doPutsWithDiffCols(TableName tableName) throws IOException, InterruptedIOException,<a name="line.958"></a>
-<span class="sourceLineNo">959</span>      RetriesExhaustedWithDetailsException, InterruptedException {<a name="line.959"></a>
-<span class="sourceLineNo">960</span>    createTable(tableName, 5);<a name="line.960"></a>
-<span class="sourceLineNo">961</span><a name="line.961"></a>
-<span class="sourceLineNo">962</span>    List&lt;Put&gt; puts = new ArrayList&lt;&gt;(5);<a name="line.962"></a>
-<span class="sourceLineNo">963</span>    Put put = new Put(Bytes.toBytes("row1"));<a name="line.963"></a>
-<span class="sourceLineNo">964</span>    put.addColumn(fam, qual, 123L, value);<a name="line.964"></a>
-<span class="sourceLineNo">965</span>    put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.965"></a>
-<span class="sourceLineNo">966</span>    puts.add(put);<a name="line.966"></a>
-<span class="sourceLineNo">967</span><a name="line.967"></a>
-<span class="sourceLineNo">968</span>    put = new Put(Bytes.toBytes("row1"));<a name="line.968"></a>
-<span class="sourceLineNo">969</span>    put.addColumn(fam, qual, 124L, value);<a name="line.969"></a>
-<span class="sourceLineNo">970</span>    put.setCellVisibility(new CellVisibility(<a name="line.970"></a>
-<span class="sourceLineNo">971</span>        "(" + CONFIDENTIAL + "&amp;" + PRIVATE + ")|(" + TOPSECRET + "&amp;" + SECRET + ")"));<a name="line.971"></a>
-<span class="sourceLineNo">972</span>    puts.add(put);<a name="line.972"></a>
-<span class="sourceLineNo">973</span><a name="line.973"></a>
-<span class="sourceLineNo">974</span>    put = new Put(Bytes.toBytes("row1"));<a name="line.974"></a>
-<span class="sourceLineNo">975</span>    put.addColumn(fam, qual, 125L, value);<a name="line.975"></a>
-<span class="sourceLineNo">976</span>    put.setCellVisibility(new CellVisibility(SECRET + "&amp;" + TOPSECRET));<a name="line.976"></a>
-<span class="sourceLineNo">977</span>    puts.add(put);<a name="line.977"></a>
-<span class="sourceLineNo">978</span><a name="line.978"></a>
-<span class="sourceLineNo">979</span>    put = new Put(Bytes.toBytes("row1"));<a name="line.979"></a>
-<span class="sourceLineNo">980</span>    put.addColumn(fam, qual1, 126L, value);<a name="line.980"></a>
-<span class="sourceLineNo">981</span>    put.setCellVisibility(new CellVisibility(SECRET + "&amp;" + TOPSECRET));<a name="line.981"></a>
-<span class="sourceLineNo">982</span>    puts.add(put);<a name="line.982"></a>
-<span class="sourceLineNo">983</span><a name="line.983"></a>
-<span class="sourceLineNo">984</span>    put = new Put(Bytes.toBytes("row1"));<a name="line.984"></a>
-<span class="sourceLineNo">985</span>    put.addColumn(fam, qual2, 127L, value);<a name="line.985"></a>
-<span class="sourceLineNo">986</span>    put.setCellVisibility(new CellVisibility(<a name="line.986"></a>
-<span class="sourceLineNo">987</span>        "(" + CONFIDENTIAL + "&amp;" + PRIVATE + ")|(" + TOPSECRET + "&amp;" + SECRET + ")"));<a name="line.987"></a>
-<span class="sourceLineNo">988</span>    puts.add(put);<a name="line.988"></a>
-<span class="sourceLineNo">989</span><a name="line.989"></a>
-<span class="sourceLineNo">990</span>    Table table = TEST_UTIL.getConnection().getTable(tableName);<a name="line.990"></a>
-<span class="sourceLineNo">991</span>    table.put(puts);<a name="line.991"></a>
-<span class="sourceLineNo">992</span>    return table;<a name="line.992"></a>
-<span class="sourceLineNo">993</span>  }<a name="line.993"></a>
+<span class="sourceLineNo">316</span>          }<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          return null;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        }<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      };<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      SUPERUSER.runAs(scanAction);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      d = new Delete(row1);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      // with visibility<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      d.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      d.addColumns(fam, qual, HConstants.LATEST_TIMESTAMP);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      table.delete(d);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        @Override<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        public Void run() throws Exception {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.329"></a>
+<span class="sourceLineNo">330</span>            Table table = connection.getTable(tableName)) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>            Scan s = new Scan();<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            ResultScanner scanner = table.getScanner(s);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>            Result[] next = scanner.next(3);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>            assertEquals(0, next.length);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>          }<a name="line.335"></a>
+<span class="sourceLineNo">336</span>          return null;<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>      SUPERUSER.runAs(scanAction);<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><a name="line.342"></a>
+<span class="sourceLineNo">343</span>  @Test<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  public void testDeleteColumnsWithAndWithoutVisibilityLabels() throws Exception {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    TableName tableName = createTable();<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      Put put = new Put(row1);<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      put.addColumn(fam, qual, value);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      table.put(put);<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      Delete d = new Delete(row1);<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      // with visibility<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      d.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      d.addColumns(fam, qual, HConstants.LATEST_TIMESTAMP);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      table.delete(d);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      PrivilegedExceptionAction&lt;Void&gt; scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        @Override<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        public Void run() throws Exception {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>            Table table = connection.getTable(tableName)) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>            Scan s = new Scan();<a name="line.361"></a>
+<span class="sourceLineNo">362</span>            ResultScanner scanner = table.getScanner(s);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>            Result[] next = scanner.next(3);<a name="line.363"></a>
+<span class="sourceLineNo">364</span>            assertEquals(0, next.length);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>          }<a name="line.365"></a>
+<span class="sourceLineNo">366</span>          return null;<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>      SUPERUSER.runAs(scanAction);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      d = new Delete(row1);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      // without visibility<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      d.addColumns(fam, qual, HConstants.LATEST_TIMESTAMP);<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      table.delete(d);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        @Override<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        public Void run() throws Exception {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>            Table table = connection.getTable(tableName)) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>            Scan s = new Scan();<a name="line.379"></a>
+<span class="sourceLineNo">380</span>            ResultScanner scanner = table.getScanner(s);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>            Result[] next = scanner.next(3);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>            assertEquals(0, next.length);<a name="line.382"></a>
+<span class="sourceLineNo">383</span>          }<a name="line.383"></a>
+<span class="sourceLineNo">384</span>          return null;<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>      SUPERUSER.runAs(scanAction);<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>  @Test<a name="line.391"></a>
+<span class="sourceLineNo">392</span>  public void testDeleteFamiliesWithoutAndWithVisibilityLabels() throws Exception {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    TableName tableName = createTable();<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>      Put put = new Put(row1);<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      put.addColumn(fam, qual, value);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      table.put(put);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      Delete d = new Delete(row1);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      // without visibility<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      d.addFamily(fam);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      table.delete(d);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      PrivilegedExceptionAction&lt;Void&gt; scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        @Override<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        public Void run() throws Exception {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.406"></a>
+<span class="sourceLineNo">407</span>            Table table = connection.getTable(tableName)) {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>            Scan s = new Scan();<a name="line.408"></a>
+<span class="sourceLineNo">409</span>            ResultScanner scanner = table.getScanner(s);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>            Result[] next = scanner.next(3);<a name="line.410"></a>
+<span class="sourceLineNo">411</span>            assertEquals(1, next.length);<a name="line.411"></a>
+<span class="sourceLineNo">412</span>          }<a name="line.412"></a>
+<span class="sourceLineNo">413</span>          return null;<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>      SUPERUSER.runAs(scanAction);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      d = new Delete(row1);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      // with visibility<a name="line.418"></a>
+<span class="sourceLineNo">419</span>      d.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      d.addFamily(fam);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      table.delete(d);<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>        @Override<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        public Void run() throws Exception {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>            Table table = connection.getTable(tableName)) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>            Scan s = new Scan();<a name="line.427"></a>
+<span class="sourceLineNo">428</span>            ResultScanner scanner = table.getScanner(s);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>            Result[] next = scanner.next(3);<a name="line.429"></a>
+<span class="sourceLineNo">430</span>            assertEquals(0, next.length);<a name="line.430"></a>
+<span class="sourceLineNo">431</span>          }<a name="line.431"></a>
+<span class="sourceLineNo">432</span>          return null;<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        }<a name="line.433"></a>
+<span class="sourceLineNo">434</span>      };<a name="line.434"></a>
+<span class="sourceLineNo">435</span>      SUPERUSER.runAs(scanAction);<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
+<span class="sourceLineNo">437</span>  }<a name="line.437"></a>
+<span class="sourceLineNo">438</span><a name="line.438"></a>
+<span class="sourceLineNo">439</span>  @Test<a name="line.439"></a>
+<span class="sourceLineNo">440</span>  public void testDeleteFamiliesWithAndWithoutVisibilityLabels() throws Exception {<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    TableName tableName = createTable();<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      Put put = new Put(row1);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      put.addColumn(fam, qual, value);<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      table.put(put);<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      Delete d = new Delete(row1);<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      d.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      // with visibility<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      d.addFamily(fam);<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      table.delete(d);<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      PrivilegedExceptionAction&lt;Void&gt; scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>        @Override<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        public Void run() throws Exception {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>            Table table = connection.getTable(tableName)) {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>            Scan s = new Scan();<a name="line.457"></a>
+<span class="sourceLineNo">458</span>            ResultScanner scanner = table.getScanner(s);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>            Result[] next = scanner.next(3);<a name="line.459"></a>
+<span class="sourceLineNo">460</span>            assertEquals(0, next.length);<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          }<a name="line.461"></a>
+<span class="sourceLineNo">462</span>          return null;<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        }<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      };<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      SUPERUSER.runAs(scanAction);<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      d = new Delete(row1);<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      // without visibility<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      d.addFamily(fam);<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      table.delete(d);<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.470"></a>
+<span class="sourceLineNo">471</span>        @Override<a name="line.471"></a>
+<span class="sourceLineNo">472</span>        public Void run() throws Exception {<a name="line.472"></a>
+<span class="sourceLineNo">473</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.473"></a>
+<span class="sourceLineNo">474</span>            Table table = connection.getTable(tableName)) {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>            Scan s = new Scan();<a name="line.475"></a>
+<span class="sourceLineNo">476</span>            ResultScanner scanner = table.getScanner(s);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>            Result[] next = scanner.next(3);<a name="line.477"></a>
+<span class="sourceLineNo">478</span>            assertEquals(0, next.length);<a name="line.478"></a>
+<span class="sourceLineNo">479</span>          }<a name="line.479"></a>
+<span class="sourceLineNo">480</span>          return null;<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>      SUPERUSER.runAs(scanAction);<a name="line.483"></a>
+<span class="sourceLineNo">484</span>    }<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>  @Test<a name="line.487"></a>
+<span class="sourceLineNo">488</span>  public void testDeletesWithoutAndWithVisibilityLabels() throws Exception {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    TableName tableName = createTable();<a name="line.489"></a>
+<span class="sourceLineNo">490</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.490"></a>
+<span class="sourceLineNo">491</span>      Put put = new Put(row1);<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      put.addColumn(fam, qual, value);<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      put.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.493"></a>
+<span class="sourceLineNo">494</span>      table.put(put);<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      Delete d = new Delete(row1);<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      // without visibility<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      d.addColumn(fam, qual);<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      table.delete(d);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      PrivilegedExceptionAction&lt;Void&gt; scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        @Override<a name="line.500"></a>
+<span class="sourceLineNo">501</span>        public Void run() throws Exception {<a name="line.501"></a>
+<span class="sourceLineNo">502</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.502"></a>
+<span class="sourceLineNo">503</span>            Table table = connection.getTable(tableName)) {<a name="line.503"></a>
+<span class="sourceLineNo">504</span>            Scan s = new Scan();<a name="line.504"></a>
+<span class="sourceLineNo">505</span>            ResultScanner scanner = table.getScanner(s);<a name="line.505"></a>
+<span class="sourceLineNo">506</span>            // The delete would not be able to apply it because of visibility mismatch<a name="line.506"></a>
+<span class="sourceLineNo">507</span>            Result[] next = scanner.next(3);<a name="line.507"></a>
+<span class="sourceLineNo">508</span>            assertEquals(1, next.length);<a name="line.508"></a>
+<span class="sourceLineNo">509</span>          }<a name="line.509"></a>
+<span class="sourceLineNo">510</span>          return null;<a name="line.510"></a>
+<span class="sourceLineNo">511</span>        }<a name="line.511"></a>
+<span class="sourceLineNo">512</span>      };<a name="line.512"></a>
+<span class="sourceLineNo">513</span>      SUPERUSER.runAs(scanAction);<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      d = new Delete(row1);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      // with visibility<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      d.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.516"></a>
+<span class="sourceLineNo">517</span>      d.addColumn(fam, qual);<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      table.delete(d);<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      scanAction = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>        @Override<a name="line.520"></a>
+<span class="sourceLineNo">521</span>        public Void run() throws Exception {<a name="line.521"></a>
+<span class="sourceLineNo">522</span>          try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.522"></a>
+<span class="sourceLineNo">523</span>            Table table = connection.getTable(tableName)) {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>            Scan s = new Scan();<a name="line.524"></a>
+<span class="sourceLineNo">525</span>            ResultScanner scanner = table.getScanner(s);<a name="line.525"></a>
+<span class="sourceLineNo">526</span>            Result[] next = scanner.next(3);<a name="line.526"></a>
+<span class="sourceLineNo">527</span>            // this will alone match<a name="line.527"></a>
+<span class="sourceLineNo">528</span>            assertEquals(0, next.length);<a name="line.528"></a>
+<span class="sourceLineNo">529</span>          }<a name="line.529"></a>
+<span class="sourceLineNo">530</span>          return null;<a name="line.530"></a>
+<span class="sourceLineNo">531</span>        }<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      };<a name="line.532"

<TRUNCATED>

[12/18] hbase-site git commit: Published site at cebb725a9f4ab8dd9d3f306d21d53d6f56161c51.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/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 314b4e9..ba2baf3 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
@@ -45,766 +45,788 @@
 <span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.ServerName;<a name="line.37"></a>
 <span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.TableName;<a name="line.38"></a>
 <span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.master.RegionState.State;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.slf4j.Logger;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.slf4j.LoggerFactory;<a name="line.45"></a>
-<span class="sourceLineNo">046</span><a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.47"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.master.RegionState.State;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.slf4j.Logger;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.slf4j.LoggerFactory;<a name="line.47"></a>
 <span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>/**<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * RegionStates contains a set of Maps that describes the in-memory state of the AM, with<a name="line.50"></a>
-<span class="sourceLineNo">051</span> * the regions available in the system, the region in transition, the offline regions and<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * the servers holding regions.<a name="line.52"></a>
-<span class="sourceLineNo">053</span> */<a name="line.53"></a>
-<span class="sourceLineNo">054</span>@InterfaceAudience.Private<a name="line.54"></a>
-<span class="sourceLineNo">055</span>public class RegionStates {<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private static final Logger LOG = LoggerFactory.getLogger(RegionStates.class);<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  // This comparator sorts the RegionStates by time stamp then Region name.<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  // Comparing by timestamp alone can lead us to discard different RegionStates that happen<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  // to share a timestamp.<a name="line.60"></a>
-<span class="sourceLineNo">061</span>  private static class RegionStateStampComparator implements Comparator&lt;RegionState&gt; {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    @Override<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    public int compare(final RegionState l, final RegionState r) {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>      int stampCmp = Long.compare(l.getStamp(), r.getStamp());<a name="line.64"></a>
-<span class="sourceLineNo">065</span>      return stampCmp != 0 ? stampCmp : RegionInfo.COMPARATOR.compare(l.getRegion(), r.getRegion());<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    }<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>  public final static RegionStateStampComparator REGION_STATE_STAMP_COMPARATOR =<a name="line.69"></a>
-<span class="sourceLineNo">070</span>      new RegionStateStampComparator();<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  // TODO: Replace the ConcurrentSkipListMaps<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  /**<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * RegionName -- i.e. RegionInfo.getRegionName() -- as bytes to {@link RegionStateNode}<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   */<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private final ConcurrentSkipListMap&lt;byte[], RegionStateNode&gt; regionsMap =<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      new ConcurrentSkipListMap&lt;byte[], RegionStateNode&gt;(Bytes.BYTES_COMPARATOR);<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  private final ConcurrentSkipListMap&lt;RegionInfo, RegionStateNode&gt; regionInTransition =<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    new ConcurrentSkipListMap&lt;RegionInfo, RegionStateNode&gt;(RegionInfo.COMPARATOR);<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>   * Regions marked as offline on a read of hbase:meta. Unused or at least, once<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   * offlined, regions have no means of coming on line again. TODO.<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   */<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  private final ConcurrentSkipListMap&lt;RegionInfo, RegionStateNode&gt; regionOffline =<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    new ConcurrentSkipListMap&lt;RegionInfo, RegionStateNode&gt;();<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private final ConcurrentSkipListMap&lt;byte[], RegionFailedOpen&gt; regionFailedOpen =<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    new ConcurrentSkipListMap&lt;byte[], RegionFailedOpen&gt;(Bytes.BYTES_COMPARATOR);<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  private final ConcurrentHashMap&lt;ServerName, ServerStateNode&gt; serverMap =<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      new ConcurrentHashMap&lt;ServerName, ServerStateNode&gt;();<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>  public RegionStates() { }<a name="line.95"></a>
+<span class="sourceLineNo">049</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>/**<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * RegionStates contains a set of Maps that describes the in-memory state of the AM, with<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * the regions available in the system, the region in transition, the offline regions and<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * the servers holding regions.<a name="line.54"></a>
+<span class="sourceLineNo">055</span> */<a name="line.55"></a>
+<span class="sourceLineNo">056</span>@InterfaceAudience.Private<a name="line.56"></a>
+<span class="sourceLineNo">057</span>public class RegionStates {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  private static final Logger LOG = LoggerFactory.getLogger(RegionStates.class);<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>  // This comparator sorts the RegionStates by time stamp then Region name.<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  // Comparing by timestamp alone can lead us to discard different RegionStates that happen<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  // to share a timestamp.<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  private static class RegionStateStampComparator implements Comparator&lt;RegionState&gt; {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    @Override<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    public int compare(final RegionState l, final RegionState r) {<a name="line.65"></a>
+<span class="sourceLineNo">066</span>      int stampCmp = Long.compare(l.getStamp(), r.getStamp());<a name="line.66"></a>
+<span class="sourceLineNo">067</span>      return stampCmp != 0 ? stampCmp : RegionInfo.COMPARATOR.compare(l.getRegion(), r.getRegion());<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    }<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  }<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span>  public final static RegionStateStampComparator REGION_STATE_STAMP_COMPARATOR =<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      new RegionStateStampComparator();<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>  // TODO: Replace the ConcurrentSkipListMaps<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  /**<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   * RegionName -- i.e. RegionInfo.getRegionName() -- as bytes to {@link RegionStateNode}<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   */<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  private final ConcurrentSkipListMap&lt;byte[], RegionStateNode&gt; regionsMap =<a name="line.78"></a>
+<span class="sourceLineNo">079</span>      new ConcurrentSkipListMap&lt;byte[], RegionStateNode&gt;(Bytes.BYTES_COMPARATOR);<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>  private final ConcurrentSkipListMap&lt;RegionInfo, RegionStateNode&gt; regionInTransition =<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    new ConcurrentSkipListMap&lt;RegionInfo, RegionStateNode&gt;(RegionInfo.COMPARATOR);<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  /**<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   * Regions marked as offline on a read of hbase:meta. Unused or at least, once<a name="line.85"></a>
+<span class="sourceLineNo">086</span>   * offlined, regions have no means of coming on line again. TODO.<a name="line.86"></a>
+<span class="sourceLineNo">087</span>   */<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private final ConcurrentSkipListMap&lt;RegionInfo, RegionStateNode&gt; regionOffline =<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    new ConcurrentSkipListMap&lt;RegionInfo, RegionStateNode&gt;();<a name="line.89"></a>
+<span class="sourceLineNo">090</span><a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private final ConcurrentSkipListMap&lt;byte[], RegionFailedOpen&gt; regionFailedOpen =<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    new ConcurrentSkipListMap&lt;byte[], RegionFailedOpen&gt;(Bytes.BYTES_COMPARATOR);<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>  private final ConcurrentHashMap&lt;ServerName, ServerStateNode&gt; serverMap =<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      new ConcurrentHashMap&lt;ServerName, ServerStateNode&gt;();<a name="line.95"></a>
 <span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  public void clear() {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    regionsMap.clear();<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    regionInTransition.clear();<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    regionOffline.clear();<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    serverMap.clear();<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>  @VisibleForTesting<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  public boolean isRegionInRegionStates(final RegionInfo hri) {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    return (regionsMap.containsKey(hri.getRegionName()) || regionInTransition.containsKey(hri)<a name="line.106"></a>
-<span class="sourceLineNo">107</span>        || regionOffline.containsKey(hri));<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>  // ==========================================================================<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  //  RegionStateNode helpers<a name="line.111"></a>
+<span class="sourceLineNo">097</span>  public RegionStates() { }<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  public void clear() {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    regionsMap.clear();<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    regionInTransition.clear();<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    regionOffline.clear();<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    serverMap.clear();<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  }<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>  @VisibleForTesting<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  public boolean isRegionInRegionStates(final RegionInfo hri) {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    return (regionsMap.containsKey(hri.getRegionName()) || regionInTransition.containsKey(hri)<a name="line.108"></a>
+<span class="sourceLineNo">109</span>        || regionOffline.containsKey(hri));<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>  // ==========================================================================<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  @VisibleForTesting<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  RegionStateNode createRegionStateNode(RegionInfo regionInfo) {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    RegionStateNode newNode = new RegionStateNode(regionInfo, regionInTransition);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    RegionStateNode oldNode = regionsMap.putIfAbsent(regionInfo.getRegionName(), newNode);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    return oldNode != null ? oldNode : newNode;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  }<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span>  public RegionStateNode getOrCreateRegionStateNode(RegionInfo regionInfo) {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    RegionStateNode node = getRegionStateNodeFromName(regionInfo.getRegionName());<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    return node != null ? node : createRegionStateNode(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>  RegionStateNode getRegionStateNodeFromName(byte[] regionName) {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    return regionsMap.get(regionName);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  }<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span>  public RegionStateNode getRegionStateNode(RegionInfo regionInfo) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    return getRegionStateNodeFromName(regionInfo.getRegionName());<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  }<a name="line.131"></a>
-<span class="sourceLineNo">132</span><a name="line.132"></a>
-<span class="sourceLineNo">133</span>  public void deleteRegion(final RegionInfo regionInfo) {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    regionsMap.remove(regionInfo.getRegionName());<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    // See HBASE-20860<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    // After master restarts, merged regions' RIT state may not be cleaned,<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    // making sure they are cleaned here<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    if (regionInTransition.containsKey(regionInfo)) {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      regionInTransition.remove(regionInfo);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    // Remove from the offline regions map too if there.<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    if (this.regionOffline.containsKey(regionInfo)) {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      this.regionOffline.remove(regionInfo);<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><a name="line.147"></a>
-<span class="sourceLineNo">148</span>  public void deleteRegions(final List&lt;RegionInfo&gt; regionInfos) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    regionInfos.forEach(this::deleteRegion);<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  }<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span>  ArrayList&lt;RegionStateNode&gt; getTableRegionStateNodes(final TableName tableName) {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    final ArrayList&lt;RegionStateNode&gt; regions = new ArrayList&lt;RegionStateNode&gt;();<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      if (!node.getTable().equals(tableName)) break;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      regions.add(node);<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    }<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    return regions;<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>  ArrayList&lt;RegionState&gt; getTableRegionStates(final TableName tableName) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;();<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      if (!node.getTable().equals(tableName)) break;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      regions.add(node.toRegionState());<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    }<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    return regions;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>  ArrayList&lt;RegionInfo&gt; getTableRegionsInfo(final TableName tableName) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    final ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;RegionInfo&gt;();<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      if (!node.getTable().equals(tableName)) break;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      regions.add(node.getRegionInfo());<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    }<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    return regions;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  }<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>  Collection&lt;RegionStateNode&gt; getRegionStateNodes() {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    return regionsMap.values();<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  }<a name="line.181"></a>
-<span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>  public ArrayList&lt;RegionState&gt; getRegionStates() {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;(regionsMap.size());<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      regions.add(node.toRegionState());<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    return regions;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  }<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>  //  RegionState helpers<a name="line.192"></a>
+<span class="sourceLineNo">113</span>  //  RegionStateNode helpers<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  // ==========================================================================<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  @VisibleForTesting<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  RegionStateNode createRegionStateNode(RegionInfo regionInfo) {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    RegionStateNode newNode = new RegionStateNode(regionInfo, regionInTransition);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    RegionStateNode oldNode = regionsMap.putIfAbsent(regionInfo.getRegionName(), newNode);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    return oldNode != null ? oldNode : newNode;<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>  public RegionStateNode getOrCreateRegionStateNode(RegionInfo regionInfo) {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    RegionStateNode node = getRegionStateNodeFromName(regionInfo.getRegionName());<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    return node != null ? node : createRegionStateNode(regionInfo);<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>  RegionStateNode getRegionStateNodeFromName(byte[] regionName) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    return regionsMap.get(regionName);<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>  public RegionStateNode getRegionStateNode(RegionInfo regionInfo) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    return getRegionStateNodeFromName(regionInfo.getRegionName());<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>  public void deleteRegion(final RegionInfo regionInfo) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    regionsMap.remove(regionInfo.getRegionName());<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    // See HBASE-20860<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    // After master restarts, merged regions' RIT state may not be cleaned,<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    // making sure they are cleaned here<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    if (regionInTransition.containsKey(regionInfo)) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      regionInTransition.remove(regionInfo);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    // Remove from the offline regions map too if there.<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    if (this.regionOffline.containsKey(regionInfo)) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      this.regionOffline.remove(regionInfo);<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><a name="line.149"></a>
+<span class="sourceLineNo">150</span>  public void deleteRegions(final List&lt;RegionInfo&gt; regionInfos) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    regionInfos.forEach(this::deleteRegion);<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>  ArrayList&lt;RegionStateNode&gt; getTableRegionStateNodes(final TableName tableName) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    final ArrayList&lt;RegionStateNode&gt; regions = new ArrayList&lt;RegionStateNode&gt;();<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      if (!node.getTable().equals(tableName)) break;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      regions.add(node);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    }<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    return regions;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
+<span class="sourceLineNo">162</span><a name="line.162"></a>
+<span class="sourceLineNo">163</span>  ArrayList&lt;RegionState&gt; getTableRegionStates(final TableName tableName) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;();<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      if (!node.getTable().equals(tableName)) break;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      regions.add(node.toRegionState());<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    }<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    return regions;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  }<a name="line.170"></a>
+<span class="sourceLineNo">171</span><a name="line.171"></a>
+<span class="sourceLineNo">172</span>  ArrayList&lt;RegionInfo&gt; getTableRegionsInfo(final TableName tableName) {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    final ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;RegionInfo&gt;();<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      if (!node.getTable().equals(tableName)) break;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      regions.add(node.getRegionInfo());<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    }<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    return regions;<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>  Collection&lt;RegionStateNode&gt; getRegionStateNodes() {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    return regionsMap.values();<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>  public ArrayList&lt;RegionState&gt; getRegionStates() {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;(regionsMap.size());<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      regions.add(node.toRegionState());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    }<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    return regions;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  }<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
 <span class="sourceLineNo">193</span>  // ==========================================================================<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    return regionStateNode == null ? null : regionStateNode.toRegionState();<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>  public RegionState getRegionState(final String encodedRegionName) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    // TODO: Need a map &lt;encodedName, ...&gt; but it is just dispatch merge...<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        return node.toRegionState();<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      }<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    }<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    return null;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>  // ============================================================================================<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  //  TODO: helpers<a name="line.210"></a>
+<span class="sourceLineNo">194</span>  //  RegionState helpers<a name="line.194"></a>
+<span class="sourceLineNo">195</span>  // ==========================================================================<a name="line.195"></a>
+<span class="sourceLineNo">196</span>  public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.198"></a>
+<span class="sourceLineNo">199</span>  }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  public RegionState getRegionState(final String encodedRegionName) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    // TODO: Need a map &lt;encodedName, ...&gt; but it is just dispatch merge...<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>        return node.toRegionState();<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 null;<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>  // ============================================================================================<a name="line.211"></a>
-<span class="sourceLineNo">212</span>  public boolean hasTableRegionStates(final TableName tableName) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // TODO<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    return !getTableRegionStates(tableName).isEmpty();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  }<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>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   */<a name="line.219"></a>
-<span class="sourceLineNo">220</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(final TableName table) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    return getRegionsOfTable(table, false);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  }<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>  private HRegionLocation createRegionForReopen(RegionStateNode node) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    node.lock();<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    try {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      if (!include(node, false)) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        return null;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      }<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      if (node.isInState(State.OPEN)) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.231"></a>
-<span class="sourceLineNo">232</span>          node.getOpenSeqNum());<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      } else if (node.isInState(State.OPENING)) {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), -1);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      } else {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        return null;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      }<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    } finally {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      node.unlock();<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><a name="line.242"></a>
-<span class="sourceLineNo">243</span>  /**<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   * Get the regions to be reopened when modifying a table.<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   * &lt;p/&gt;<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   * Notice that the {@code openSeqNum} in the returned HRegionLocation is also used to indicate the<a name="line.246"></a>
-<span class="sourceLineNo">247</span>   * state of this region, positive means the region is in {@link State#OPEN}, -1 means<a name="line.247"></a>
-<span class="sourceLineNo">248</span>   * {@link State#OPENING}. And for regions in other states we do not need reopen them.<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   */<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  public List&lt;HRegionLocation&gt; getRegionsOfTableForReopen(TableName tableName) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    return getTableRegionStateNodes(tableName).stream().map(this::createRegionForReopen)<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      .filter(r -&gt; r != null).collect(Collectors.toList());<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>   * Check whether the region has been reopened. The meaning of the {@link HRegionLocation} is the<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * same with {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * &lt;p/&gt;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   * For a region which is in {@link State#OPEN} before, if the region state is changed or the open<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   * seq num is changed, we can confirm that it has been reopened.<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   * &lt;p/&gt;<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   * For a region which is in {@link State#OPENING} before, usually it will be in {@link State#OPEN}<a name="line.262"></a>
-<span class="sourceLineNo">263</span>   * now and we will schedule a MRP to reopen it. But there are several exceptions:<a name="line.263"></a>
-<span class="sourceLineNo">264</span>   * &lt;ul&gt;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>   * &lt;li&gt;The region is in state other than {@link State#OPEN} or {@link State#OPENING}.&lt;/li&gt;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>   * &lt;li&gt;The location of the region has been changed&lt;/li&gt;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * &lt;/ul&gt;<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * Of course the region could still be in {@link State#OPENING} state and still on the same<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   * server, then here we will still return a {@link HRegionLocation} for it, just like<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   * @param oldLoc the previous state/location of this region<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   * @return null if the region has been reopened, otherwise a new {@link HRegionLocation} which<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   *         means we still need to reopen the region.<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   * @see #getRegionsOfTableForReopen(TableName)<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   */<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public HRegionLocation checkReopened(HRegionLocation oldLoc) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    RegionStateNode node = getRegionStateNode(oldLoc.getRegion());<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    // HBASE-20921<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    // if the oldLoc's state node does not exist, that means the region is<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    // merged or split, no need to check it<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    if (node == null) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      return null;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    }<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    node.lock();<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    try {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      if (oldLoc.getSeqNum() &gt;= 0) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        // in OPEN state before<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        if (node.isInState(State.OPEN)) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          if (node.getOpenSeqNum() &gt; oldLoc.getSeqNum()) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>            // normal case, the region has been reopened<a name="line.290"></a>
-<span class="sourceLineNo">291</span>            return null;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>          } else {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>            // the open seq num does not change, need to reopen again<a name="line.293"></a>
-<span class="sourceLineNo">294</span>            return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.294"></a>
-<span class="sourceLineNo">295</span>              node.getOpenSeqNum());<a name="line.295"></a>
-<span class="sourceLineNo">296</span>          }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        } else {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>          // the state has been changed so we can make sure that the region has been reopened(not<a name="line.298"></a>
-<span class="sourceLineNo">299</span>          // finished maybe, but not a problem).<a name="line.299"></a>
-<span class="sourceLineNo">300</span>          return null;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        }<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      } else {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>        // in OPENING state before<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        if (!node.isInState(State.OPEN, State.OPENING)) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>          // not in OPEN or OPENING state, then we can make sure that the region has been<a name="line.305"></a>
-<span class="sourceLineNo">306</span>          // reopened(not finished maybe, but not a problem)<a name="line.306"></a>
-<span class="sourceLineNo">307</span>          return null;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>        } else {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>          if (!node.getRegionLocation().equals(oldLoc.getServerName())) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>            // the region has been moved, so we can make sure that the region has been reopened.<a name="line.310"></a>
-<span class="sourceLineNo">311</span>            return null;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>          }<a name="line.312"></a>
-<span class="sourceLineNo">313</span>          // normal case, we are still in OPENING state, or the reopen has been opened and the state<a name="line.313"></a>
-<span class="sourceLineNo">314</span>          // is changed to OPEN.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>          long openSeqNum = node.isInState(State.OPEN) ? node.getOpenSeqNum() : -1;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>          return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), openSeqNum);<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>    } finally {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      node.unlock();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  }<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>  /**<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   */<a name="line.326"></a>
-<span class="sourceLineNo">327</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, boolean offline) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    return getRegionsOfTable(table, state -&gt; include(state, 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>  /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   *         &lt;code&gt;offline&lt;/code&gt; to true. Does not include regions that are in the<a name="line.333"></a>
-<span class="sourceLineNo">334</span>   *         {@link State#SPLIT} state.<a name="line.334"></a>
-<span class="sourceLineNo">335</span>   */<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  private List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, Predicate&lt;RegionStateNode&gt; filter) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    return getTableRegionStateNodes(table).stream().filter(filter).map(n -&gt; n.getRegionInfo())<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      .collect(Collectors.toList());<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>  /**<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   * Utility. Whether to include region in list of regions. Default is to<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * weed out split and offline regions.<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   * @return True if we should include the &lt;code&gt;node&lt;/code&gt; (do not include<a name="line.344"></a>
-<span class="sourceLineNo">345</span>   * if split or offline unless &lt;code&gt;offline&lt;/code&gt; is set to true.<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   */<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  boolean include(final RegionStateNode node, final boolean offline) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    if (LOG.isTraceEnabled()) {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    if (node.isInState(State.SPLIT)) return false;<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    if (node.isInState(State.OFFLINE) &amp;&amp; !offline) return false;<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    final RegionInfo hri = node.getRegionInfo();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    return (!hri.isOffline() &amp;&amp; !hri.isSplit()) ||<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        ((hri.isOffline() || hri.isSplit()) &amp;&amp; offline);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>  }<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>   * Returns the set of regions hosted by the specified server<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   * @param serverName the server we are interested in<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   * @return set of RegionInfo hosted by the specified server<a name="line.361"></a>
-<span class="sourceLineNo">362</span>   */<a name="line.362"></a>
-<span class="sourceLineNo">363</span>  public List&lt;RegionInfo&gt; getServerRegionInfoSet(final ServerName serverName) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    ServerStateNode serverInfo = getServerNode(serverName);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    if (serverInfo == null) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      return Collections.emptyList();<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>    synchronized (serverInfo) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      return serverInfo.getRegionInfoList();<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    }<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>  // Split helpers<a name="line.375"></a>
-<span class="sourceLineNo">376</span>  // These methods will only be called in ServerCrashProcedure, and at the end of SCP we will remove<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  // the ServerStateNode by calling removeServer.<a name="line.377"></a>
-<span class="sourceLineNo">378</span>  // ============================================================================================<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>  private void setServerState(ServerName serverName, ServerState state) {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    synchronized (serverNode) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      serverNode.setState(state);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    }<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>  /**<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   * Call this when we start meta log splitting a crashed Server.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   * @see #metaLogSplit(ServerName)<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   */<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  public void metaLogSplitting(ServerName serverName) {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    setServerState(serverName, ServerState.SPLITTING_META);<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>  /**<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   * Called after we've split the meta logs on a crashed Server.<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * @see #metaLogSplitting(ServerName)<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   */<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  public void metaLogSplit(ServerName serverName) {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    setServerState(serverName, ServerState.SPLITTING_META_DONE);<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>  /**<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * Call this when we start log splitting for a crashed Server.<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * @see #logSplit(ServerName)<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   */<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  public void logSplitting(final ServerName serverName) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    setServerState(serverName, ServerState.SPLITTING);<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>  /**<a name="line.411"></a>
-<span class="sourceLineNo">412</span>   * Called after we've split all logs on a crashed Server.<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * @see #logSplitting(ServerName)<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   */<a name="line.414"></a>
-<span class="sourceLineNo">415</span>  public void logSplit(final ServerName serverName) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    setServerState(serverName, ServerState.OFFLINE);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>  }<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span>  public void updateRegionState(RegionInfo regionInfo, State state) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    regionNode.lock();<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    try {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      regionNode.setState(state);<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    } finally {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      regionNode.unlock();<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><a name="line.428"></a>
-<span class="sourceLineNo">429</span>  // ============================================================================================<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  //  TODO:<a name="line.430"></a>
+<span class="sourceLineNo">212</span>  //  TODO: helpers<a name="line.212"></a>
+<span class="sourceLineNo">213</span>  // ============================================================================================<a name="line.213"></a>
+<span class="sourceLineNo">214</span>  public boolean hasTableRegionStates(final TableName tableName) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    // TODO<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    return !getTableRegionStates(tableName).isEmpty();<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>  /**<a name="line.219"></a>
+<span class="sourceLineNo">220</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   */<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(final TableName table) {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    return getRegionsOfTable(table, false);<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>  private HRegionLocation createRegionForReopen(RegionStateNode node) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    node.lock();<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    try {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      if (!include(node, false)) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        return null;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      if (node.isInState(State.OPEN)) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.233"></a>
+<span class="sourceLineNo">234</span>          node.getOpenSeqNum());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      } else if (node.isInState(State.OPENING)) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), -1);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      } else {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>        return null;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    } finally {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      node.unlock();<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><a name="line.244"></a>
+<span class="sourceLineNo">245</span>  /**<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   * Get the regions to be reopened when modifying a table.<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   * &lt;p/&gt;<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   * Notice that the {@code openSeqNum} in the returned HRegionLocation is also used to indicate the<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * state of this region, positive means the region is in {@link State#OPEN}, -1 means<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * {@link State#OPENING}. And for regions in other states we do not need reopen them.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  public List&lt;HRegionLocation&gt; getRegionsOfTableForReopen(TableName tableName) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    return getTableRegionStateNodes(tableName).stream().map(this::createRegionForReopen)<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      .filter(r -&gt; r != null).collect(Collectors.toList());<a name="line.254"></a>
+<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>  /**<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   * Check whether the region has been reopened. The meaning of the {@link HRegionLocation} is the<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   * same with {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   * &lt;p/&gt;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   * For a region which is in {@link State#OPEN} before, if the region state is changed or the open<a name="line.261"></a>
+<span class="sourceLineNo">262</span>   * seq num is changed, we can confirm that it has been reopened.<a name="line.262"></a>
+<span class="sourceLineNo">263</span>   * &lt;p/&gt;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>   * For a region which is in {@link State#OPENING} before, usually it will be in {@link State#OPEN}<a name="line.264"></a>
+<span class="sourceLineNo">265</span>   * now and we will schedule a MRP to reopen it. But there are several exceptions:<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   * &lt;ul&gt;<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   * &lt;li&gt;The region is in state other than {@link State#OPEN} or {@link State#OPENING}.&lt;/li&gt;<a name="line.267"></a>
+<span class="sourceLineNo">268</span>   * &lt;li&gt;The location of the region has been changed&lt;/li&gt;<a name="line.268"></a>
+<span class="sourceLineNo">269</span>   * &lt;/ul&gt;<a name="line.269"></a>
+<span class="sourceLineNo">270</span>   * Of course the region could still be in {@link State#OPENING} state and still on the same<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * server, then here we will still return a {@link HRegionLocation} for it, just like<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   * @param oldLoc the previous state/location of this region<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   * @return null if the region has been reopened, otherwise a new {@link HRegionLocation} which<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   *         means we still need to reopen the region.<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * @see #getRegionsOfTableForReopen(TableName)<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   */<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  public HRegionLocation checkReopened(HRegionLocation oldLoc) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    RegionStateNode node = getRegionStateNode(oldLoc.getRegion());<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    // HBASE-20921<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    // if the oldLoc's state node does not exist, that means the region is<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    // merged or split, no need to check it<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    if (node == null) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      return null;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    }<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    node.lock();<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    try {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      if (oldLoc.getSeqNum() &gt;= 0) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        // in OPEN state before<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        if (node.isInState(State.OPEN)) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          if (node.getOpenSeqNum() &gt; oldLoc.getSeqNum()) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>            // normal case, the region has been reopened<a name="line.292"></a>
+<span class="sourceLineNo">293</span>            return null;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>          } else {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>            // the open seq num does not change, need to reopen again<a name="line.295"></a>
+<span class="sourceLineNo">296</span>            return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.296"></a>
+<span class="sourceLineNo">297</span>              node.getOpenSeqNum());<a name="line.297"></a>
+<span class="sourceLineNo">298</span>          }<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        } else {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>          // the state has been changed so we can make sure that the region has been reopened(not<a name="line.300"></a>
+<span class="sourceLineNo">301</span>          // finished maybe, but not a problem).<a name="line.301"></a>
+<span class="sourceLineNo">302</span>          return null;<a name="line.302"></a>
+<span class="sourceLineNo">303</span>        }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      } else {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        // in OPENING state before<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        if (!node.isInState(State.OPEN, State.OPENING)) {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>          // not in OPEN or OPENING state, then we can make sure that the region has been<a name="line.307"></a>
+<span class="sourceLineNo">308</span>          // reopened(not finished maybe, but not a problem)<a name="line.308"></a>
+<span class="sourceLineNo">309</span>          return null;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        } else {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>          if (!node.getRegionLocation().equals(oldLoc.getServerName())) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>            // the region has been moved, so we can make sure that the region has been reopened.<a name="line.312"></a>
+<span class="sourceLineNo">313</span>            return null;<a name="line.313"></a>
+<span class="sourceLineNo">314</span>          }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>          // normal case, we are still in OPENING state, or the reopen has been opened and the state<a name="line.315"></a>
+<span class="sourceLineNo">316</span>          // is changed to OPEN.<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          long openSeqNum = node.isInState(State.OPEN) ? node.getOpenSeqNum() : -1;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>          return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), openSeqNum);<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>    } finally {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      node.unlock();<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
+<span class="sourceLineNo">324</span>  }<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span>  /**<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   */<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, boolean offline) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    return getRegionsOfTable(table, state -&gt; include(state, offline));<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>   * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   *         &lt;code&gt;offline&lt;/code&gt; to true. Does not include regions that are in the<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   *         {@link State#SPLIT} state.<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   */<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  private List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, Predicate&lt;RegionStateNode&gt; filter) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    return getTableRegionStateNodes(table).stream().filter(filter).map(n -&gt; n.getRegionInfo())<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      .collect(Collectors.toList());<a name="line.340"></a>
+<span class="sourceLineNo">341</span>  }<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>  /**<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * Utility. Whether to include region in list of regions. Default is to<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   * weed out split and offline regions.<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * @return True if we should include the &lt;code&gt;node&lt;/code&gt; (do not include<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   * if split or offline unless &lt;code&gt;offline&lt;/code&gt; is set to true.<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   */<a name="line.348"></a>
+<span class="sourceLineNo">349</span>  boolean include(final RegionStateNode node, final boolean offline) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    if (LOG.isTraceEnabled()) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    }<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    if (node.isInState(State.SPLIT)) return false;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    if (node.isInState(State.OFFLINE) &amp;&amp; !offline) return false;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    final RegionInfo hri = node.getRegionInfo();<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    return (!hri.isOffline() &amp;&amp; !hri.isSplit()) ||<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        ((hri.isOffline() || hri.isSplit()) &amp;&amp; offline);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>  /**<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   * Returns the set of regions hosted by the specified server<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   * @param serverName the server we are interested in<a name="line.362"></a>
+<span class="sourceLineNo">363</span>   * @return set of RegionInfo hosted by the specified server<a name="line.363"></a>
+<span class="sourceLineNo">364</span>   */<a name="line.364"></a>
+<span class="sourceLineNo">365</span>  public List&lt;RegionInfo&gt; getServerRegionInfoSet(final ServerName serverName) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    ServerStateNode serverInfo = getServerNode(serverName);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    if (serverInfo == null) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      return Collections.emptyList();<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>    synchronized (serverInfo) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      return serverInfo.getRegionInfoList();<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><a name="line.375"></a>
+<span class="sourceLineNo">376</span>  // ============================================================================================<a name="line.376"></a>
+<span class="sourceLineNo">377</span>  // Split helpers<a name="line.377"></a>
+<span class="sourceLineNo">378</span>  // These methods will only be called in ServerCrashProcedure, and at the end of SCP we will remove<a name="line.378"></a>
+<span class="sourceLineNo">379</span>  // the ServerStateNode by calling removeServer.<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 void setServerState(ServerName serverName, ServerState state) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    synchronized (serverNode) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      serverNode.setState(state);<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>  /**<a name="line.389"></a>
+<span class="sourceLineNo">390</span>   * Call this when we start meta log splitting a crashed Server.<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * @see #metaLogSplit(ServerName)<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   */<a name="line.392"></a>
+<span class="sourceLineNo">393</span>  public void metaLogSplitting(ServerName serverName) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    setServerState(serverName, ServerState.SPLITTING_META);<a name="line.394"></a>
+<span class="sourceLineNo">395</span>  }<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>   * Called after we've split the meta logs on a crashed Server.<a name="line.398"></a>
+<span class="sourceLineNo">399</span>   * @see #metaLogSplitting(ServerName)<a name="line.399"></a>
+<span class="sourceLineNo">400</span>   */<a name="line.400"></a>
+<span class="sourceLineNo">401</span>  public void metaLogSplit(ServerName serverName) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>    setServerState(serverName, ServerState.SPLITTING_META_DONE);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>  }<a name="line.403"></a>
+<span class="sourceLineNo">404</span><a name="line.404"></a>
+<span class="sourceLineNo">405</span>  /**<a name="line.405"></a>
+<span class="sourceLineNo">406</span>   * Call this when we start log splitting for a crashed Server.<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   * @see #logSplit(ServerName)<a name="line.407"></a>
+<span class="sourceLineNo">408</span>   */<a name="line.408"></a>
+<span class="sourceLineNo">409</span>  public void logSplitting(final ServerName serverName) {<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    setServerState(serverName, ServerState.SPLITTING);<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  }<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>   * Called after we've split all logs on a crashed Server.<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   * @see #logSplitting(ServerName)<a name="line.415"></a>
+<span class="sourceLineNo">416</span>   */<a name="line.416"></a>
+<span class="sourceLineNo">417</span>  public void logSplit(final ServerName serverName) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    setServerState(serverName, ServerState.OFFLINE);<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>  public void updateRegionState(RegionInfo regionInfo, State state) {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    regionNode.lock();<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    try {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      regionNode.setState(state);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    } finally {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>      regionNode.unlock();<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>  }<a name="line.429"></a>
+<span class="sourceLineNo">430</span><a name="line.430"></a>
 <span class="sourceLineNo">431</span>  // ============================================================================================<a name="line.431"></a>
-<span class="sourceLineNo">432</span>  public List&lt;RegionInfo&gt; getAssignedRegions() {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    final List&lt;RegionInfo&gt; result = new ArrayList&lt;RegionInfo&gt;();<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      if (!node.isInTransition()) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>        result.add(node.getRegionInfo());<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    }<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    return result;<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>  public boolean isRegionInState(RegionInfo regionInfo, State... state) {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    RegionStateNode regionNode = getRegionStateNode(regionInfo);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    if (regionNode != null) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      regionNode.lock();<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      try {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>        return regionNode.isInState(state);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      } finally {<a name="line.448"></a>
-<span class="sourceLineNo">449</span>        regionNode.unlock();<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>    return false;<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>  public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    return isRegionInState(regionInfo, State.OPEN);<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>  /**<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   */<a name="line.461"></a>
-<span class="sourceLineNo">462</span>  public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>  }<a name="line.464"></a>
-<span class="sourceLineNo">465</span><a name="line.465"></a>
-<span class="sourceLineNo">466</span>  public Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getSnapShotOfAssignment(<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      final Collection&lt;RegionInfo&gt; regions) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    final Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; result = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    if (regions != null) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      for (RegionInfo hri : regions) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        final RegionStateNode node = getRegionStateNode(hri);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        if (node == null) {<a name="line.472"></a>
-<span class="sourceLineNo">473</span>          continue;<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        }<a name="line.474"></a>
-<span class="sourceLineNo">475</span>        createSnapshot(node, result);<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      }<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    } else {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      for (RegionStateNode node : regionsMap.values()) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        if (node == null) {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>          continue;<a name="line.480"></a>
-<span class="sourceLineNo">481</span>        }<a name="line.481"></a>
-<span class="sourceLineNo">482</span>        createSnapshot(node, result);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      }<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    return result;<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 void createSnapshot(RegionStateNode node, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; result) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    final ServerName serverName = node.getRegionLocation();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    if (serverName == null) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      return;<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>    List&lt;RegionInfo&gt; serverRegions = result.get(serverName);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    if (serverRegions == null) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      serverRegions = new ArrayList&lt;RegionInfo&gt;();<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      result.put(serverName, serverRegions);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    serverRegions.add(node.getRegionInfo());<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>  public Map&lt;RegionInfo, ServerName&gt; getRegionAssignments() {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    final HashMap&lt;RegionInfo, ServerName&gt; assignments = new HashMap&lt;RegionInfo, ServerName&gt;();<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    }<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    return assignments;<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>  public Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; getRegionByStateOfTable(TableName tableName) {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    final State[] states = State.values();<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    final Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; tableRegions =<a name="line.512"></a>
-<span class="sourceLineNo">513</span>        new HashMap&lt;State, List&lt;RegionInfo&gt;&gt;(states.length);<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    for (int i = 0; i &lt; states.length; ++i) {<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      tableRegions.put(states[i], new ArrayList&lt;RegionInfo&gt;());<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      if (node.getTable().equals(tableName)) {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      }<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    }<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    return tableRegions;<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>  public ServerName getRegionServerOfRegion(RegionInfo regionInfo) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    RegionStateNode regionNode = getRegionStateNode(regionInfo);<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    if (regionNode != null) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      regionNode.lock();<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      try {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>        ServerName server = regionNode.getRegionLocation();<a name="line.531"></a>
-<span class="sourceLineNo">532</span>        return server != null ? server : regionNode.getLastHost();<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      } finally {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>        regionNode.unlock();<a name="line.534"></a>
-<span class="so

<TRUNCATED>

[06/18] hbase-site git commit: Published site at cebb725a9f4ab8dd9d3f306d21d53d6f56161c51.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html
index d974429..e478f39 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html
@@ -42,32 +42,32 @@
 <span class="sourceLineNo">034</span>import java.util.TreeMap;<a name="line.34"></a>
 <span class="sourceLineNo">035</span>import java.util.function.Predicate;<a name="line.35"></a>
 <span class="sourceLineNo">036</span>import java.util.stream.Collectors;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.commons.lang3.NotImplementedException;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.conf.Configuration;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HConstants;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HDFSBlocksDistribution;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.ServerMetrics;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ServerName;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.TableName;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.RackManager;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster.Action.Type;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.slf4j.Logger;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.slf4j.LoggerFactory;<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hbase.thirdparty.com.google.common.collect.ArrayListMultimap;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.62"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.commons.lang3.NotImplementedException;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HConstants;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HDFSBlocksDistribution;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ServerMetrics;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.ServerName;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.TableName;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.RackManager;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster.Action.Type;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hbase.thirdparty.com.google.common.collect.ArrayListMultimap;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.slf4j.Logger;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.slf4j.LoggerFactory;<a name="line.62"></a>
 <span class="sourceLineNo">063</span><a name="line.63"></a>
 <span class="sourceLineNo">064</span>/**<a name="line.64"></a>
 <span class="sourceLineNo">065</span> * The base class for load balancers. It provides the the functions used to by<a name="line.65"></a>
@@ -1462,181 +1462,186 @@
 <span class="sourceLineNo">1454</span>    for (Map.Entry&lt;RegionInfo, ServerName&gt; entry : regions.entrySet()) {<a name="line.1454"></a>
 <span class="sourceLineNo">1455</span>      RegionInfo region = entry.getKey();<a name="line.1455"></a>
 <span class="sourceLineNo">1456</span>      ServerName oldServerName = entry.getValue();<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>      if (!hasRegionReplica &amp;&amp; !RegionReplicaUtil.isDefaultReplica(region)) {<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>        hasRegionReplica = true;<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>      }<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>      List&lt;ServerName&gt; localServers = new ArrayList&lt;&gt;();<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>      if (oldServerName != null) {<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>        localServers = serversByHostname.get(oldServerName.getHostnameLowerCase());<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>      }<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>      if (localServers.isEmpty()) {<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>        // No servers on the new cluster match up with this hostname, assign randomly, later.<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>        randomAssignRegions.add(region);<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>        if (oldServerName != null) {<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>          oldHostsNoLongerPresent.add(oldServerName.getHostnameLowerCase());<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>        }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>      } else if (localServers.size() == 1) {<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>        // the usual case - one new server on same host<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>        ServerName target = localServers.get(0);<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>        assignments.get(target).add(region);<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>        numRetainedAssigments++;<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      } else {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        // multiple new servers in the cluster on this same host<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>        if (localServers.contains(oldServerName)) {<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>          assignments.get(oldServerName).add(region);<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>          numRetainedAssigments++;<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>        } else {<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>          ServerName target = null;<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>          for (ServerName tmp : localServers) {<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>            if (tmp.getPort() == oldServerName.getPort()) {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>              target = tmp;<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>              assignments.get(tmp).add(region);<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>              numRetainedAssigments++;<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>              break;<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>            }<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>          }<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>          if (target == null) {<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>            randomAssignRegions.add(region);<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>          }<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>    // If servers from prior assignment aren't present, then lets do randomAssignment on regions.<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>    if (randomAssignRegions.size() &gt; 0) {<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>      Cluster cluster = createCluster(servers, regions.keySet(), hasRegionReplica);<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>      for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : assignments.entrySet()) {<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>        ServerName sn = entry.getKey();<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>        for (RegionInfo region : entry.getValue()) {<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>          cluster.doAssignRegion(region, sn);<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>        }<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>      }<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>      for (RegionInfo region : randomAssignRegions) {<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>        ServerName target = randomAssignment(cluster, region, servers);<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>        assignments.get(target).add(region);<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>        numRandomAssignments++;<a name="line.1509"></a>
+<span class="sourceLineNo">1457</span>      // In the current set of regions even if one has region replica let us go with<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>      // getting the entire snapshot<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>      if (this.services != null &amp;&amp; this.services.getAssignmentManager() != null) { // for tests<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>        if (!hasRegionReplica &amp;&amp; this.services.getAssignmentManager().getRegionStates()<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>            .isReplicaAvailableForRegion(region)) {<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>          hasRegionReplica = true;<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>        }<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>      }<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>      List&lt;ServerName&gt; localServers = new ArrayList&lt;&gt;();<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>      if (oldServerName != null) {<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>        localServers = serversByHostname.get(oldServerName.getHostnameLowerCase());<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>      }<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>      if (localServers.isEmpty()) {<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>        // No servers on the new cluster match up with this hostname, assign randomly, later.<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>        randomAssignRegions.add(region);<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>        if (oldServerName != null) {<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>          oldHostsNoLongerPresent.add(oldServerName.getHostnameLowerCase());<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>        }<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>      } else if (localServers.size() == 1) {<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>        // the usual case - one new server on same host<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>        ServerName target = localServers.get(0);<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>        assignments.get(target).add(region);<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>        numRetainedAssigments++;<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>      } else {<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>        // multiple new servers in the cluster on this same host<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>        if (localServers.contains(oldServerName)) {<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>          assignments.get(oldServerName).add(region);<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>          numRetainedAssigments++;<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>        } else {<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>          ServerName target = null;<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>          for (ServerName tmp : localServers) {<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>            if (tmp.getPort() == oldServerName.getPort()) {<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>              target = tmp;<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>              assignments.get(tmp).add(region);<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>              numRetainedAssigments++;<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>              break;<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>          if (target == null) {<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>            randomAssignRegions.add(region);<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>          }<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>        }<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>      }<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>    }<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span><a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>    // If servers from prior assignment aren't present, then lets do randomAssignment on regions.<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>    if (randomAssignRegions.size() &gt; 0) {<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>      Cluster cluster = createCluster(servers, regions.keySet(), hasRegionReplica);<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>      for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : assignments.entrySet()) {<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>        ServerName sn = entry.getKey();<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>        for (RegionInfo region : entry.getValue()) {<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>          cluster.doAssignRegion(region, sn);<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>        }<a name="line.1509"></a>
 <span class="sourceLineNo">1510</span>      }<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>    }<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span><a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>    String randomAssignMsg = "";<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    if (numRandomAssignments &gt; 0) {<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>      randomAssignMsg =<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>          numRandomAssignments + " regions were assigned "<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>              + "to random hosts, since the old hosts for these regions are no "<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>              + "longer present in the cluster. These hosts were:\n  "<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>              + Joiner.on("\n  ").join(oldHostsNoLongerPresent);<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>    LOG.info("Reassigned " + regions.size() + " regions. " + numRetainedAssigments<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>        + " retained the pre-restart assignment. " + randomAssignMsg);<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>    return assignments;<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>  }<a name="line.1525"></a>
+<span class="sourceLineNo">1511</span>      for (RegionInfo region : randomAssignRegions) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>        ServerName target = randomAssignment(cluster, region, servers);<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        assignments.get(target).add(region);<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>        numRandomAssignments++;<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>      }<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>    }<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span><a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>    String randomAssignMsg = "";<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    if (numRandomAssignments &gt; 0) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>      randomAssignMsg =<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          numRandomAssignments + " regions were assigned "<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>              + "to random hosts, since the old hosts for these regions are no "<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>              + "longer present in the cluster. These hosts were:\n  "<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>              + Joiner.on("\n  ").join(oldHostsNoLongerPresent);<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>    }<a name="line.1525"></a>
 <span class="sourceLineNo">1526</span><a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>  @Override<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>  public void initialize() throws HBaseIOException{<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>  }<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span><a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>  @Override<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>  public void regionOnline(RegionInfo regionInfo, ServerName sn) {<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>  }<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>  @Override<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>  public void regionOffline(RegionInfo regionInfo) {<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 boolean isStopped() {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>    return stopped;<a name="line.1541"></a>
+<span class="sourceLineNo">1527</span>    LOG.info("Reassigned " + regions.size() + " regions. " + numRetainedAssigments<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>        + " retained the pre-restart assignment. " + randomAssignMsg);<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>    return assignments;<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>  }<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span><a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>  @Override<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>  public void initialize() throws HBaseIOException{<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>  }<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span><a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>  @Override<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>  public void regionOnline(RegionInfo regionInfo, ServerName sn) {<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>  }<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span><a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>  @Override<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>  public void regionOffline(RegionInfo regionInfo) {<a name="line.1541"></a>
 <span class="sourceLineNo">1542</span>  }<a name="line.1542"></a>
 <span class="sourceLineNo">1543</span><a name="line.1543"></a>
 <span class="sourceLineNo">1544</span>  @Override<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>  public void stop(String why) {<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>    LOG.info("Load Balancer stop requested: "+why);<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>    stopped = true;<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>  /**<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>   * Used to assign a single region to a random server.<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>   */<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>  private ServerName randomAssignment(Cluster cluster, RegionInfo regionInfo,<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>      List&lt;ServerName&gt; servers) {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>    int numServers = servers.size(); // servers is not null, numServers &gt; 1<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>    ServerName sn = null;<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>    final int maxIterations = numServers * 4;<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>    int iterations = 0;<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>    List&lt;ServerName&gt; usedSNs = new ArrayList&lt;&gt;(servers.size());<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>    do {<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      int i = RANDOM.nextInt(numServers);<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>      sn = servers.get(i);<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      if (!usedSNs.contains(sn)) {<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        usedSNs.add(sn);<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      }<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>    } while (cluster.wouldLowerAvailability(regionInfo, sn)<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>        &amp;&amp; iterations++ &lt; maxIterations);<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>    if (iterations &gt;= maxIterations) {<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      // We have reached the max. Means the servers that we collected is still lowering the<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      // availability<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      for (ServerName unusedServer : servers) {<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>        if (!usedSNs.contains(unusedServer)) {<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>          // check if any other unused server is there for us to use.<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>          // If so use it. Else we have not other go but to go with one of them<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>          if (!cluster.wouldLowerAvailability(regionInfo, unusedServer)) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>            sn = unusedServer;<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>            break;<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>      }<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>    }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>    cluster.doAssignRegion(regionInfo, sn);<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    return sn;<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>  }<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span><a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>  /**<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>   * Round robin a list of regions to a list of servers<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>   */<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>  private void roundRobinAssignment(Cluster cluster, List&lt;RegionInfo&gt; regions,<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      List&lt;RegionInfo&gt; unassignedRegions, List&lt;ServerName&gt; servers,<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignments) {<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span><a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>    int numServers = servers.size();<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    int numRegions = regions.size();<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    int max = (int) Math.ceil((float) numRegions / numServers);<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    int serverIdx = 0;<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    if (numServers &gt; 1) {<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>      serverIdx = RANDOM.nextInt(numServers);<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>    }<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>    int regionIdx = 0;<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span><a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    for (int j = 0; j &lt; numServers; j++) {<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>      ServerName server = servers.get((j + serverIdx) % numServers);<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>      List&lt;RegionInfo&gt; serverRegions = new ArrayList&lt;&gt;(max);<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>      for (int i = regionIdx; i &lt; numRegions; i += numServers) {<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>        RegionInfo region = regions.get(i % numRegions);<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>        if (cluster.wouldLowerAvailability(region, server)) {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>          unassignedRegions.add(region);<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>        } else {<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>          serverRegions.add(region);<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>          cluster.doAssignRegion(region, server);<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>        }<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>      }<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>      assignments.put(server, serverRegions);<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>      regionIdx++;<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>  protected Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getRegionAssignmentsByServer(<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>    Collection&lt;RegionInfo&gt; regions) {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    if (this.services != null &amp;&amp; this.services.getAssignmentManager() != null) {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      return this.services.getAssignmentManager().getSnapShotOfAssignment(regions);<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>    } else {<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      return new HashMap&lt;&gt;();<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>    }<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>  }<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span><a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>  @Override<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>  public void onConfigurationChange(Configuration conf) {<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">1545</span>  public boolean isStopped() {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>    return stopped;<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>  @Override<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>  public void stop(String why) {<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>    LOG.info("Load Balancer stop requested: "+why);<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>    stopped = true;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>  }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span><a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>  /**<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>   * Used to assign a single region to a random server.<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>   */<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>  private ServerName randomAssignment(Cluster cluster, RegionInfo regionInfo,<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>      List&lt;ServerName&gt; servers) {<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>    int numServers = servers.size(); // servers is not null, numServers &gt; 1<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>    ServerName sn = null;<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>    final int maxIterations = numServers * 4;<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>    int iterations = 0;<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>    List&lt;ServerName&gt; usedSNs = new ArrayList&lt;&gt;(servers.size());<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>    do {<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>      int i = RANDOM.nextInt(numServers);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      sn = servers.get(i);<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>      if (!usedSNs.contains(sn)) {<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>        usedSNs.add(sn);<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>      }<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>    } while (cluster.wouldLowerAvailability(regionInfo, sn)<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>        &amp;&amp; iterations++ &lt; maxIterations);<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>    if (iterations &gt;= maxIterations) {<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>      // We have reached the max. Means the servers that we collected is still lowering the<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      // availability<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      for (ServerName unusedServer : servers) {<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>        if (!usedSNs.contains(unusedServer)) {<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>          // check if any other unused server is there for us to use.<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>          // If so use it. Else we have not other go but to go with one of them<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>          if (!cluster.wouldLowerAvailability(regionInfo, unusedServer)) {<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>            sn = unusedServer;<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>            break;<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>          }<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      }<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>    }<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>    cluster.doAssignRegion(regionInfo, sn);<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>    return sn;<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>  }<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>   * Round robin a list of regions to a list of servers<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>   */<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>  private void roundRobinAssignment(Cluster cluster, List&lt;RegionInfo&gt; regions,<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>      List&lt;RegionInfo&gt; unassignedRegions, List&lt;ServerName&gt; servers,<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignments) {<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span><a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>    int numServers = servers.size();<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    int numRegions = regions.size();<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    int max = (int) Math.ceil((float) numRegions / numServers);<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    int serverIdx = 0;<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    if (numServers &gt; 1) {<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>      serverIdx = RANDOM.nextInt(numServers);<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    }<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>    int regionIdx = 0;<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span><a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>    for (int j = 0; j &lt; numServers; j++) {<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>      ServerName server = servers.get((j + serverIdx) % numServers);<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>      List&lt;RegionInfo&gt; serverRegions = new ArrayList&lt;&gt;(max);<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>      for (int i = regionIdx; i &lt; numRegions; i += numServers) {<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>        RegionInfo region = regions.get(i % numRegions);<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>        if (cluster.wouldLowerAvailability(region, server)) {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>          unassignedRegions.add(region);<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>        } else {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>          serverRegions.add(region);<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>          cluster.doAssignRegion(region, server);<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>      assignments.put(server, serverRegions);<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>      regionIdx++;<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>  protected Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getRegionAssignmentsByServer(<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    Collection&lt;RegionInfo&gt; regions) {<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>    if (this.services != null &amp;&amp; this.services.getAssignmentManager() != null) {<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      return this.services.getAssignmentManager().getSnapShotOfAssignment(regions);<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>    } else {<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      return new HashMap&lt;&gt;();<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>  public void onConfigurationChange(Configuration conf) {<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/downloads.html
----------------------------------------------------------------------
diff --git a/downloads.html b/downloads.html
index e9b8cdc..ee8e15f 100644
--- a/downloads.html
+++ b/downloads.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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase Downloads</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -423,7 +423,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-09-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-09-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index f96c4ac..5cd8d08 100644
--- a/export_control.html
+++ b/export_control.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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Export Control
@@ -331,7 +331,7 @@ for more details.</p>
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-09-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-09-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index c7e50fb..2f92a6b 100644
--- a/index.html
+++ b/index.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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBaseâ„¢ Home</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -411,7 +411,7 @@ Apache HBase is an open-source, distributed, versioned, non-relational database
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-09-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-09-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index c2687da..edbb0e5 100644
--- a/integration.html
+++ b/integration.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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -291,7 +291,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-09-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-09-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index bd3e19c..4ba6462 100644
--- a/issue-tracking.html
+++ b/issue-tracking.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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -288,7 +288,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-09-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-09-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index ce93413..5a19f75 100644
--- a/license.html
+++ b/license.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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -491,7 +491,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-09-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-09-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index 2b9adcf..164781b 100644
--- a/mail-lists.html
+++ b/mail-lists.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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -341,7 +341,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-09-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-09-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index 8975f6b..ee96210 100644
--- a/metrics.html
+++ b/metrics.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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) Metrics
@@ -459,7 +459,7 @@ export HBASE_REGIONSERVER_OPTS=&quot;$HBASE_JMX_OPTS -Dcom.sun.management.jmxrem
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-09-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-09-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index 036d0d5..accf784 100644
--- a/old_news.html
+++ b/old_news.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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Old Apache HBase (TM) News
@@ -440,7 +440,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-09-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-09-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index 5559587..854bd09 100644
--- a/plugin-management.html
+++ b/plugin-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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-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-09-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-09-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index d977a37..fd6f49f 100644
--- a/plugins.html
+++ b/plugins.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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -375,7 +375,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-09-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-09-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index fd31860..62e784e 100644
--- a/poweredbyhbase.html
+++ b/poweredbyhbase.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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Powered By Apache HBase™</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -769,7 +769,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-09-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-09-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/project-info.html
----------------------------------------------------------------------
diff --git a/project-info.html b/project-info.html
index 852e6bd..8264698 100644
--- a/project-info.html
+++ b/project-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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -335,7 +335,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-09-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-09-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/project-reports.html
----------------------------------------------------------------------
diff --git a/project-reports.html b/project-reports.html
index 91d8420..c842fb6 100644
--- a/project-reports.html
+++ b/project-reports.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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Generated Reports</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -305,7 +305,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-09-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-09-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index 6e46643..7ae90b8 100644
--- a/project-summary.html
+++ b/project-summary.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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -331,7 +331,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-09-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-09-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index 289db8c..8fbdcaa 100644
--- a/pseudo-distributed.html
+++ b/pseudo-distributed.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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
 Running Apache HBase (TM) in pseudo-distributed mode
@@ -308,7 +308,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-09-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-09-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/replication.html
----------------------------------------------------------------------
diff --git a/replication.html b/replication.html
index b2cb833..312887d 100644
--- a/replication.html
+++ b/replication.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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Apache HBase (TM) Replication
@@ -303,7 +303,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-09-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-09-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index 873cbcc..44b8061 100644
--- a/resources.html
+++ b/resources.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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Other Apache HBase (TM) Resources</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -331,7 +331,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-09-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-09-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index 29dbcfb..a4cd8c7 100644
--- a/source-repository.html
+++ b/source-repository.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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -299,7 +299,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-09-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-09-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index 107e36a..517bf9f 100644
--- a/sponsors.html
+++ b/sponsors.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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase™ Sponsors</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -333,7 +333,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-09-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-09-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index 8f3041f..02b1ee4 100644
--- a/supportingprojects.html
+++ b/supportingprojects.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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Supporting Projects</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -520,7 +520,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-09-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-09-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index b6472d4..5352e60 100644
--- a/team-list.html
+++ b/team-list.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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Team</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -754,7 +754,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-09-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-09-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/testdevapidocs/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html b/testdevapidocs/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html
index 7ea73a1..66ad97f 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html
@@ -887,7 +887,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>extractAuths</h4>
-<pre>protected&nbsp;<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>&lt;<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>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html#line.495">extractAuths</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>&nbsp;user,
+<pre>protected&nbsp;<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>&lt;<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>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html#line.496">extractAuths</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>&nbsp;user,
                                     <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>&lt;org.apache.hadoop.hbase.client.Result&gt;&nbsp;results)</pre>
 </li>
 </ul>
@@ -897,7 +897,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testClearUserAuths</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html#line.509">testClearUserAuths</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html#line.510">testClearUserAuths</a>()
                         throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -911,7 +911,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testLabelsWithCheckAndPut</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html#line.571">testLabelsWithCheckAndPut</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html#line.572">testLabelsWithCheckAndPut</a>()
                                throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -925,7 +925,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testLabelsWithIncrement</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html#line.597">testLabelsWithIncrement</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html#line.598">testLabelsWithIncrement</a>()
                              throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -939,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>testLabelsWithAppend</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html#line.623">testLabelsWithAppend</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html#line.624">testLabelsWithAppend</a>()
                           throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -953,7 +953,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testUserShouldNotDoDDLOpOnLabelsTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html#line.651">testUserShouldNotDoDDLOpOnLabelsTable</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html#line.652">testUserShouldNotDoDDLOpOnLabelsTable</a>()
                                            throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -967,7 +967,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testMultipleVersions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html#line.692">testMultipleVersions</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html#line.693">testMultipleVersions</a>()
                           throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -981,7 +981,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testMutateRow</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html#line.784">testMutateRow</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html#line.785">testMutateRow</a>()
                    throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -995,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>testFlushedFileWithVisibilityTags</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html#line.820">testFlushedFileWithVisibilityTags</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html#line.821">testFlushedFileWithVisibilityTags</a>()
                                        throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1009,7 +1009,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createTableAndWriteDataWithLabels</h4>
-<pre>static&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html#line.852">createTableAndWriteDataWithLabels</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>static&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html#line.853">createTableAndWriteDataWithLabels</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                                               <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>...&nbsp;labelExps)
                                                                        throws <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></pre>
 <dl>
@@ -1024,7 +1024,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>addLabels</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html#line.866">addLabels</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html#line.867">addLabels</a>()
                       throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/testdevapidocs/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html b/testdevapidocs/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html
index 2f157f8..7dc226c 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html#line.60">TestVisibilityLabelsWithDefaultVisLabelService</a>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html#line.59">TestVisibilityLabelsWithDefaultVisLabelService</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html" title="class in org.apache.hadoop.hbase.security.visibility">TestVisibilityLabels</a></pre>
 </li>
 </ul>
@@ -240,7 +240,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/T
 <ul class="blockList">
 <li class="blockList">
 <h4>CLASS_RULE</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html#line.63">CLASS_RULE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html#line.62">CLASS_RULE</a></pre>
 </li>
 </ul>
 <a name="LOG">
@@ -249,7 +249,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/T
 <ul class="blockListLast">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html#line.66">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html#line.65">LOG</a></pre>
 </li>
 </ul>
 </li>
@@ -266,7 +266,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/T
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestVisibilityLabelsWithDefaultVisLabelService</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html#line.60">TestVisibilityLabelsWithDefaultVisLabelService</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html#line.59">TestVisibilityLabelsWithDefaultVisLabelService</a>()</pre>
 </li>
 </ul>
 </li>
@@ -283,7 +283,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/T
 <ul class="blockList">
 <li class="blockList">
 <h4>setupBeforeClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html#line.70">setupBeforeClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html#line.69">setupBeforeClass</a>()
                              throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -297,7 +297,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/T
 <ul class="blockList">
 <li class="blockList">
 <h4>testAddLabels</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html#line.87">testAddLabels</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html#line.86">testAddLabels</a>()
                    throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -311,7 +311,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/T
 <ul class="blockList">
 <li class="blockList">
 <h4>testAddVisibilityLabelsOnRSRestart</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html#line.118">testAddVisibilityLabelsOnRSRestart</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html#line.117">testAddVisibilityLabelsOnRSRestart</a>()
                                         throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -325,7 +325,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/T
 <ul class="blockList">
 <li class="blockList">
 <h4>testListLabels</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html#line.177">testListLabels</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html#line.176">testListLabels</a>()
                     throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -339,7 +339,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/T
 <ul class="blockList">
 <li class="blockList">
 <h4>testListLabelsWithRegEx</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html#line.208">testListLabelsWithRegEx</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html#line.207">testListLabelsWithRegEx</a>()
                              throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -353,7 +353,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/T
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testVisibilityLabelsOnWALReplay</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html#line.231">testVisibilityLabelsOnWALReplay</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html#line.230">testVisibilityLabelsOnWALReplay</a>()
                                      throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>


[05/18] hbase-site git commit: Published site at cebb725a9f4ab8dd9d3f306d21d53d6f56161c51.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/testdevapidocs/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html b/testdevapidocs/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html
index ee3a730..fc4b48b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static enum <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2942">TestVisibilityLabelsWithDeletes.DeleteMark</a>
+<pre>private static enum <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2922">TestVisibilityLabelsWithDeletes.DeleteMark</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html" title="enum in org.apache.hadoop.hbase.security.visibility">TestVisibilityLabelsWithDeletes.DeleteMark</a>&gt;</pre>
 </li>
 </ul>
@@ -219,7 +219,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>ROW</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html" title="enum in org.apache.hadoop.hbase.security.visibility">TestVisibilityLabelsWithDeletes.DeleteMark</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html#line.2943">ROW</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html" title="enum in org.apache.hadoop.hbase.security.visibility">TestVisibilityLabelsWithDeletes.DeleteMark</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html#line.2923">ROW</a></pre>
 </li>
 </ul>
 <a name="FAMILY">
@@ -228,7 +228,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>FAMILY</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html" title="enum in org.apache.hadoop.hbase.security.visibility">TestVisibilityLabelsWithDeletes.DeleteMark</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html#line.2943">FAMILY</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html" title="enum in org.apache.hadoop.hbase.security.visibility">TestVisibilityLabelsWithDeletes.DeleteMark</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html#line.2923">FAMILY</a></pre>
 </li>
 </ul>
 <a name="FAMILY_VERSION">
@@ -237,7 +237,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>FAMILY_VERSION</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html" title="enum in org.apache.hadoop.hbase.security.visibility">TestVisibilityLabelsWithDeletes.DeleteMark</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html#line.2943">FAMILY_VERSION</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html" title="enum in org.apache.hadoop.hbase.security.visibility">TestVisibilityLabelsWithDeletes.DeleteMark</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html#line.2923">FAMILY_VERSION</a></pre>
 </li>
 </ul>
 <a name="COLUMN">
@@ -246,7 +246,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>COLUMN</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html" title="enum in org.apache.hadoop.hbase.security.visibility">TestVisibilityLabelsWithDeletes.DeleteMark</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html#line.2943">COLUMN</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html" title="enum in org.apache.hadoop.hbase.security.visibility">TestVisibilityLabelsWithDeletes.DeleteMark</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html#line.2923">COLUMN</a></pre>
 </li>
 </ul>
 <a name="CELL">
@@ -255,7 +255,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CELL</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html" title="enum in org.apache.hadoop.hbase.security.visibility">TestVisibilityLabelsWithDeletes.DeleteMark</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html#line.2943">CELL</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html" title="enum in org.apache.hadoop.hbase.security.visibility">TestVisibilityLabelsWithDeletes.DeleteMark</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html#line.2923">CELL</a></pre>
 </li>
 </ul>
 </li>
@@ -272,7 +272,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>values</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html" title="enum in org.apache.hadoop.hbase.security.visibility">TestVisibilityLabelsWithDeletes.DeleteMark</a>[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html#line.2942">values</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html" title="enum in org.apache.hadoop.hbase.security.visibility">TestVisibilityLabelsWithDeletes.DeleteMark</a>[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html#line.2922">values</a>()</pre>
 <div class="block">Returns an array containing the constants of this enum type, in
 the order they are declared.  This method may be used to iterate
 over the constants as follows:
@@ -292,7 +292,7 @@ for (TestVisibilityLabelsWithDeletes.DeleteMark c : TestVisibilityLabelsWithDele
 <ul class="blockListLast">
 <li class="blockList">
 <h4>valueOf</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html" title="enum in org.apache.hadoop.hbase.security.visibility">TestVisibilityLabelsWithDeletes.DeleteMark</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html#line.2942">valueOf</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>&nbsp;name)</pre>
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html" title="enum in org.apache.hadoop.hbase.security.visibility">TestVisibilityLabelsWithDeletes.DeleteMark</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html#line.2922">valueOf</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>&nbsp;name)</pre>
 <div class="block">Returns the enum constant of this type with the specified name.
 The string must match <i>exactly</i> an identifier used to declare an
 enum constant in this type.  (Extraneous whitespace characters are 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/testdevapidocs/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html b/testdevapidocs/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html
index f44648d..1ade624 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html
@@ -617,7 +617,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteColumnsWithAndWithoutVisibilityLabels</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.348">testDeleteColumnsWithAndWithoutVisibilityLabels</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.344">testDeleteColumnsWithAndWithoutVisibilityLabels</a>()
                                                      throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -631,7 +631,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteFamiliesWithoutAndWithVisibilityLabels</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.400">testDeleteFamiliesWithoutAndWithVisibilityLabels</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.392">testDeleteFamiliesWithoutAndWithVisibilityLabels</a>()
                                                       throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -645,7 +645,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteFamiliesWithAndWithoutVisibilityLabels</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.452">testDeleteFamiliesWithAndWithoutVisibilityLabels</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.440">testDeleteFamiliesWithAndWithoutVisibilityLabels</a>()
                                                       throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -659,7 +659,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeletesWithoutAndWithVisibilityLabels</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.504">testDeletesWithoutAndWithVisibilityLabels</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.488">testDeletesWithoutAndWithVisibilityLabels</a>()
                                                throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -673,7 +673,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testVisibilityLabelsWithDeleteFamilyWithPutsReAppearing</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.558">testVisibilityLabelsWithDeleteFamilyWithPutsReAppearing</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.538">testVisibilityLabelsWithDeleteFamilyWithPutsReAppearing</a>()
                                                              throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -687,7 +687,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testVisibilityLabelsWithDeleteColumnsWithPutsReAppearing</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.628">testVisibilityLabelsWithDeleteColumnsWithPutsReAppearing</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.608">testVisibilityLabelsWithDeleteColumnsWithPutsReAppearing</a>()
                                                               throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -701,7 +701,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testVisibilityCombinations</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.698">testVisibilityCombinations</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.678">testVisibilityCombinations</a>()
                                 throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -715,7 +715,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testVisibilityLabelsWithDeleteColumnWithSpecificVersionWithPutsReAppearing</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.745">testVisibilityLabelsWithDeleteColumnWithSpecificVersionWithPutsReAppearing</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.725">testVisibilityLabelsWithDeleteColumnWithSpecificVersionWithPutsReAppearing</a>()
                                                                                 throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -729,7 +729,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testVisibilityLabelsWithDeleteFamilyNoMatchingVisExpWithMultipleVersionsNoTimestamp</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.800">testVisibilityLabelsWithDeleteFamilyNoMatchingVisExpWithMultipleVersionsNoTimestamp</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.780">testVisibilityLabelsWithDeleteFamilyNoMatchingVisExpWithMultipleVersionsNoTimestamp</a>()
                                                                                          throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -743,7 +743,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteFamilyAndDeleteColumnsWithAndWithoutVisibilityExp</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.853">testDeleteFamilyAndDeleteColumnsWithAndWithoutVisibilityExp</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.833">testDeleteFamilyAndDeleteColumnsWithAndWithoutVisibilityExp</a>()
                                                                  throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -757,7 +757,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>doPuts</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.913">doPuts</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
+<pre>private&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.893">doPuts</a>(org.apache.hadoop.hbase.TableName&nbsp;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>,
                                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a>,
                                                     org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException,
@@ -777,7 +777,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>doPutsWithDiffCols</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.958">doPutsWithDiffCols</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
+<pre>private&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.938">doPutsWithDiffCols</a>(org.apache.hadoop.hbase.TableName&nbsp;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>,
                                                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a>,
                                                                 org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException,
@@ -797,7 +797,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>doPutsWithoutVisibility</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.995">doPutsWithoutVisibility</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
+<pre>private&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.975">doPutsWithoutVisibility</a>(org.apache.hadoop.hbase.TableName&nbsp;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>,
                                                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a>,
                                                                      org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException,
@@ -817,7 +817,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteColumnWithSpecificTimeStampUsingMultipleVersionsUnMatchingVisExpression</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1032">testDeleteColumnWithSpecificTimeStampUsingMultipleVersionsUnMatchingVisExpression</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1012">testDeleteColumnWithSpecificTimeStampUsingMultipleVersionsUnMatchingVisExpression</a>()
                                                                                        throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -831,7 +831,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteColumnWithLatestTimeStampUsingMultipleVersions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1098">testDeleteColumnWithLatestTimeStampUsingMultipleVersions</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1078">testDeleteColumnWithLatestTimeStampUsingMultipleVersions</a>()
                                                               throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -845,7 +845,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteColumnWithLatestTimeStampWhenNoVersionMatches</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1157">testDeleteColumnWithLatestTimeStampWhenNoVersionMatches</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1137">testDeleteColumnWithLatestTimeStampWhenNoVersionMatches</a>()
                                                              throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -859,7 +859,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteColumnWithLatestTimeStampUsingMultipleVersionsAfterCompaction</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1244">testDeleteColumnWithLatestTimeStampUsingMultipleVersionsAfterCompaction</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1224">testDeleteColumnWithLatestTimeStampUsingMultipleVersionsAfterCompaction</a>()
                                                                              throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -873,7 +873,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteFamilyLatestTimeStampWithMulipleVersions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1311">testDeleteFamilyLatestTimeStampWithMulipleVersions</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1291">testDeleteFamilyLatestTimeStampWithMulipleVersions</a>()
                                                         throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -887,7 +887,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteColumnswithMultipleColumnsWithMultipleVersions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1360">testDeleteColumnswithMultipleColumnsWithMultipleVersions</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1340">testDeleteColumnswithMultipleColumnsWithMultipleVersions</a>()
                                                               throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -901,7 +901,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteColumnsWithDiffColsAndTags</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1418">testDeleteColumnsWithDiffColsAndTags</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1398">testDeleteColumnsWithDiffColsAndTags</a>()
                                           throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -915,7 +915,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteColumnsWithDiffColsAndTags1</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1461">testDeleteColumnsWithDiffColsAndTags1</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1441">testDeleteColumnsWithDiffColsAndTags1</a>()
                                            throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -929,7 +929,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteFamilyWithoutCellVisibilityWithMulipleVersions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1504">testDeleteFamilyWithoutCellVisibilityWithMulipleVersions</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1484">testDeleteFamilyWithoutCellVisibilityWithMulipleVersions</a>()
                                                               throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -943,7 +943,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteFamilyLatestTimeStampWithMulipleVersionsWithoutCellVisibilityInPuts</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1542">testDeleteFamilyLatestTimeStampWithMulipleVersionsWithoutCellVisibilityInPuts</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1522">testDeleteFamilyLatestTimeStampWithMulipleVersionsWithoutCellVisibilityInPuts</a>()
                                                                                    throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -957,7 +957,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteFamilySpecificTimeStampWithMulipleVersions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1605">testDeleteFamilySpecificTimeStampWithMulipleVersions</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1585">testDeleteFamilySpecificTimeStampWithMulipleVersions</a>()
                                                           throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -971,7 +971,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testScanAfterCompaction</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1660">testScanAfterCompaction</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1640">testScanAfterCompaction</a>()
                              throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -985,7 +985,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteFamilySpecificTimeStampWithMulipleVersionsDoneTwice</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1713">testDeleteFamilySpecificTimeStampWithMulipleVersionsDoneTwice</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1693">testDeleteFamilySpecificTimeStampWithMulipleVersionsDoneTwice</a>()
                                                                    throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -999,7 +999,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testMultipleDeleteFamilyVersionWithDiffLabels</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1814">testMultipleDeleteFamilyVersionWithDiffLabels</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1794">testMultipleDeleteFamilyVersionWithDiffLabels</a>()
                                                    throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1013,7 +1013,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testSpecificDeletesFollowedByDeleteFamily</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1878">testSpecificDeletesFollowedByDeleteFamily</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1858">testSpecificDeletesFollowedByDeleteFamily</a>()
                                                throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1027,7 +1027,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testSpecificDeletesFollowedByDeleteFamily1</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1965">testSpecificDeletesFollowedByDeleteFamily1</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.1945">testSpecificDeletesFollowedByDeleteFamily1</a>()
                                                 throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1041,7 +1041,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteColumnSpecificTimeStampWithMulipleVersionsDoneTwice</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2065">testDeleteColumnSpecificTimeStampWithMulipleVersionsDoneTwice</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2045">testDeleteColumnSpecificTimeStampWithMulipleVersionsDoneTwice</a>()
                                                                    throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1055,7 +1055,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteColumnSpecificTimeStampWithMulipleVersionsDoneTwice1</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2169">testDeleteColumnSpecificTimeStampWithMulipleVersionsDoneTwice1</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2149">testDeleteColumnSpecificTimeStampWithMulipleVersionsDoneTwice1</a>()
                                                                     throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1069,7 +1069,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteColumnSpecificTimeStampWithMulipleVersionsDoneTwice2</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2279">testDeleteColumnSpecificTimeStampWithMulipleVersionsDoneTwice2</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2259">testDeleteColumnSpecificTimeStampWithMulipleVersionsDoneTwice2</a>()
                                                                     throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1083,7 +1083,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteColumnAndDeleteFamilylSpecificTimeStampWithMulipleVersion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2396">testDeleteColumnAndDeleteFamilylSpecificTimeStampWithMulipleVersion</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2376">testDeleteColumnAndDeleteFamilylSpecificTimeStampWithMulipleVersion</a>()
                                                                          throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1097,7 +1097,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testDiffDeleteTypesForTheSameCellUsingMultipleVersions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2497">testDiffDeleteTypesForTheSameCellUsingMultipleVersions</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2477">testDiffDeleteTypesForTheSameCellUsingMultipleVersions</a>()
                                                             throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1111,7 +1111,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteColumnLatestWithNoCellVisibility</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2602">testDeleteColumnLatestWithNoCellVisibility</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2582">testDeleteColumnLatestWithNoCellVisibility</a>()
                                                 throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1125,7 +1125,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>scanAll</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2758">scanAll</a>(org.apache.hadoop.hbase.client.Result[]&nbsp;next)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2738">scanAll</a>(org.apache.hadoop.hbase.client.Result[]&nbsp;next)
               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>
@@ -1139,7 +1139,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testVisibilityExpressionWithNotEqualORCondition</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2793">testVisibilityExpressionWithNotEqualORCondition</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2773">testVisibilityExpressionWithNotEqualORCondition</a>()
                                                      throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1153,7 +1153,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteWithNoVisibilitiesForPutsAndDeletes</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2845">testDeleteWithNoVisibilitiesForPutsAndDeletes</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2825">testDeleteWithNoVisibilitiesForPutsAndDeletes</a>()
                                                    throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1167,7 +1167,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteWithFamilyDeletesOfSameTsButDifferentVisibilities</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2876">testDeleteWithFamilyDeletesOfSameTsButDifferentVisibilities</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2856">testDeleteWithFamilyDeletesOfSameTsButDifferentVisibilities</a>()
                                                                  throws <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></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1184,7 +1184,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/V
 <li class="blockList">
 <h4>createList</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/SafeVarargs.html?is-external=true" title="class or interface in java.lang">@SafeVarargs</a>
-public static&nbsp;&lt;T&gt;&nbsp;<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>&lt;T&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2938">createList</a>(T...&nbsp;ts)</pre>
+public static&nbsp;&lt;T&gt;&nbsp;<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>&lt;T&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2918">createList</a>(T...&nbsp;ts)</pre>
 </li>
 </ul>
 <a name="addDeleteMark-org.apache.hadoop.hbase.client.Delete-org.apache.hadoop.hbase.security.visibility.TestVisibilityLabelsWithDeletes.DeleteMark-long-">
@@ -1193,7 +1193,7 @@ public static&nbsp;&lt;T&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs
 <ul class="blockList">
 <li class="blockList">
 <h4>addDeleteMark</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.client.Delete&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2946">addDeleteMark</a>(org.apache.hadoop.hbase.client.Delete&nbsp;d,
+<pre>private static&nbsp;org.apache.hadoop.hbase.client.Delete&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2926">addDeleteMark</a>(org.apache.hadoop.hbase.client.Delete&nbsp;d,
                                                                    <a href="../../../../../../org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html" title="enum in org.apache.hadoop.hbase.security.visibility">TestVisibilityLabelsWithDeletes.DeleteMark</a>&nbsp;mark,
                                                                    long&nbsp;now)</pre>
 </li>
@@ -1204,7 +1204,7 @@ public static&nbsp;&lt;T&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteCellWithoutVisibility</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2969">testDeleteCellWithoutVisibility</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2949">testDeleteCellWithoutVisibility</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>,
                                             <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>
 <dl>
@@ -1220,7 +1220,7 @@ public static&nbsp;&lt;T&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteCellWithoutVisibility</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2975">testDeleteCellWithoutVisibility</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html" title="enum in org.apache.hadoop.hbase.security.visibility">TestVisibilityLabelsWithDeletes.DeleteMark</a>&nbsp;mark)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2955">testDeleteCellWithoutVisibility</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html" title="enum in org.apache.hadoop.hbase.security.visibility">TestVisibilityLabelsWithDeletes.DeleteMark</a>&nbsp;mark)
                                       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>
 <dl>
@@ -1236,7 +1236,7 @@ public static&nbsp;&lt;T&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteCellWithVisibility</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.3004">testDeleteCellWithVisibility</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2984">testDeleteCellWithVisibility</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>,
                                          <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>
 <dl>
@@ -1252,7 +1252,7 @@ public static&nbsp;&lt;T&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteCellWithVisibility</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.3011">testDeleteCellWithVisibility</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html" title="enum in org.apache.hadoop.hbase.security.visibility">TestVisibilityLabelsWithDeletes.DeleteMark</a>&nbsp;mark)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.2991">testDeleteCellWithVisibility</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html" title="enum in org.apache.hadoop.hbase.security.visibility">TestVisibilityLabelsWithDeletes.DeleteMark</a>&nbsp;mark)
                                    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>
 <dl>
@@ -1268,7 +1268,7 @@ public static&nbsp;&lt;T&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testDeleteCellWithVisibilityV2</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.3060">testDeleteCellWithVisibilityV2</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html" title="enum in org.apache.hadoop.hbase.security.visibility">TestVisibilityLabelsWithDeletes.DeleteMark</a>&nbsp;mark)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.html#line.3040">testDeleteCellWithVisibilityV2</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.DeleteMark.html" title="enum in org.apache.hadoop.hbase.security.visibility">TestVisibilityLabelsWithDeletes.DeleteMark</a>&nbsp;mark)
                                      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>
 <dl>


[11/18] hbase-site git commit: Published site at cebb725a9f4ab8dd9d3f306d21d53d6f56161c51.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/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 314b4e9..ba2baf3 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
@@ -45,766 +45,788 @@
 <span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.ServerName;<a name="line.37"></a>
 <span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.TableName;<a name="line.38"></a>
 <span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.master.RegionState.State;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.slf4j.Logger;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.slf4j.LoggerFactory;<a name="line.45"></a>
-<span class="sourceLineNo">046</span><a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.47"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.master.RegionState.State;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.slf4j.Logger;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.slf4j.LoggerFactory;<a name="line.47"></a>
 <span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>/**<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * RegionStates contains a set of Maps that describes the in-memory state of the AM, with<a name="line.50"></a>
-<span class="sourceLineNo">051</span> * the regions available in the system, the region in transition, the offline regions and<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * the servers holding regions.<a name="line.52"></a>
-<span class="sourceLineNo">053</span> */<a name="line.53"></a>
-<span class="sourceLineNo">054</span>@InterfaceAudience.Private<a name="line.54"></a>
-<span class="sourceLineNo">055</span>public class RegionStates {<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private static final Logger LOG = LoggerFactory.getLogger(RegionStates.class);<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  // This comparator sorts the RegionStates by time stamp then Region name.<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  // Comparing by timestamp alone can lead us to discard different RegionStates that happen<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  // to share a timestamp.<a name="line.60"></a>
-<span class="sourceLineNo">061</span>  private static class RegionStateStampComparator implements Comparator&lt;RegionState&gt; {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    @Override<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    public int compare(final RegionState l, final RegionState r) {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>      int stampCmp = Long.compare(l.getStamp(), r.getStamp());<a name="line.64"></a>
-<span class="sourceLineNo">065</span>      return stampCmp != 0 ? stampCmp : RegionInfo.COMPARATOR.compare(l.getRegion(), r.getRegion());<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    }<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>  public final static RegionStateStampComparator REGION_STATE_STAMP_COMPARATOR =<a name="line.69"></a>
-<span class="sourceLineNo">070</span>      new RegionStateStampComparator();<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  // TODO: Replace the ConcurrentSkipListMaps<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  /**<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * RegionName -- i.e. RegionInfo.getRegionName() -- as bytes to {@link RegionStateNode}<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   */<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private final ConcurrentSkipListMap&lt;byte[], RegionStateNode&gt; regionsMap =<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      new ConcurrentSkipListMap&lt;byte[], RegionStateNode&gt;(Bytes.BYTES_COMPARATOR);<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  private final ConcurrentSkipListMap&lt;RegionInfo, RegionStateNode&gt; regionInTransition =<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    new ConcurrentSkipListMap&lt;RegionInfo, RegionStateNode&gt;(RegionInfo.COMPARATOR);<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>   * Regions marked as offline on a read of hbase:meta. Unused or at least, once<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   * offlined, regions have no means of coming on line again. TODO.<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   */<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  private final ConcurrentSkipListMap&lt;RegionInfo, RegionStateNode&gt; regionOffline =<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    new ConcurrentSkipListMap&lt;RegionInfo, RegionStateNode&gt;();<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private final ConcurrentSkipListMap&lt;byte[], RegionFailedOpen&gt; regionFailedOpen =<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    new ConcurrentSkipListMap&lt;byte[], RegionFailedOpen&gt;(Bytes.BYTES_COMPARATOR);<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  private final ConcurrentHashMap&lt;ServerName, ServerStateNode&gt; serverMap =<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      new ConcurrentHashMap&lt;ServerName, ServerStateNode&gt;();<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>  public RegionStates() { }<a name="line.95"></a>
+<span class="sourceLineNo">049</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>/**<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * RegionStates contains a set of Maps that describes the in-memory state of the AM, with<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * the regions available in the system, the region in transition, the offline regions and<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * the servers holding regions.<a name="line.54"></a>
+<span class="sourceLineNo">055</span> */<a name="line.55"></a>
+<span class="sourceLineNo">056</span>@InterfaceAudience.Private<a name="line.56"></a>
+<span class="sourceLineNo">057</span>public class RegionStates {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  private static final Logger LOG = LoggerFactory.getLogger(RegionStates.class);<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>  // This comparator sorts the RegionStates by time stamp then Region name.<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  // Comparing by timestamp alone can lead us to discard different RegionStates that happen<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  // to share a timestamp.<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  private static class RegionStateStampComparator implements Comparator&lt;RegionState&gt; {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    @Override<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    public int compare(final RegionState l, final RegionState r) {<a name="line.65"></a>
+<span class="sourceLineNo">066</span>      int stampCmp = Long.compare(l.getStamp(), r.getStamp());<a name="line.66"></a>
+<span class="sourceLineNo">067</span>      return stampCmp != 0 ? stampCmp : RegionInfo.COMPARATOR.compare(l.getRegion(), r.getRegion());<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    }<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  }<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span>  public final static RegionStateStampComparator REGION_STATE_STAMP_COMPARATOR =<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      new RegionStateStampComparator();<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>  // TODO: Replace the ConcurrentSkipListMaps<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  /**<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   * RegionName -- i.e. RegionInfo.getRegionName() -- as bytes to {@link RegionStateNode}<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   */<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  private final ConcurrentSkipListMap&lt;byte[], RegionStateNode&gt; regionsMap =<a name="line.78"></a>
+<span class="sourceLineNo">079</span>      new ConcurrentSkipListMap&lt;byte[], RegionStateNode&gt;(Bytes.BYTES_COMPARATOR);<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>  private final ConcurrentSkipListMap&lt;RegionInfo, RegionStateNode&gt; regionInTransition =<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    new ConcurrentSkipListMap&lt;RegionInfo, RegionStateNode&gt;(RegionInfo.COMPARATOR);<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  /**<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   * Regions marked as offline on a read of hbase:meta. Unused or at least, once<a name="line.85"></a>
+<span class="sourceLineNo">086</span>   * offlined, regions have no means of coming on line again. TODO.<a name="line.86"></a>
+<span class="sourceLineNo">087</span>   */<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private final ConcurrentSkipListMap&lt;RegionInfo, RegionStateNode&gt; regionOffline =<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    new ConcurrentSkipListMap&lt;RegionInfo, RegionStateNode&gt;();<a name="line.89"></a>
+<span class="sourceLineNo">090</span><a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private final ConcurrentSkipListMap&lt;byte[], RegionFailedOpen&gt; regionFailedOpen =<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    new ConcurrentSkipListMap&lt;byte[], RegionFailedOpen&gt;(Bytes.BYTES_COMPARATOR);<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>  private final ConcurrentHashMap&lt;ServerName, ServerStateNode&gt; serverMap =<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      new ConcurrentHashMap&lt;ServerName, ServerStateNode&gt;();<a name="line.95"></a>
 <span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  public void clear() {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    regionsMap.clear();<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    regionInTransition.clear();<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    regionOffline.clear();<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    serverMap.clear();<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>  @VisibleForTesting<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  public boolean isRegionInRegionStates(final RegionInfo hri) {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    return (regionsMap.containsKey(hri.getRegionName()) || regionInTransition.containsKey(hri)<a name="line.106"></a>
-<span class="sourceLineNo">107</span>        || regionOffline.containsKey(hri));<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>  // ==========================================================================<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  //  RegionStateNode helpers<a name="line.111"></a>
+<span class="sourceLineNo">097</span>  public RegionStates() { }<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  public void clear() {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    regionsMap.clear();<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    regionInTransition.clear();<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    regionOffline.clear();<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    serverMap.clear();<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  }<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>  @VisibleForTesting<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  public boolean isRegionInRegionStates(final RegionInfo hri) {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    return (regionsMap.containsKey(hri.getRegionName()) || regionInTransition.containsKey(hri)<a name="line.108"></a>
+<span class="sourceLineNo">109</span>        || regionOffline.containsKey(hri));<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>  // ==========================================================================<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  @VisibleForTesting<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  RegionStateNode createRegionStateNode(RegionInfo regionInfo) {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    RegionStateNode newNode = new RegionStateNode(regionInfo, regionInTransition);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    RegionStateNode oldNode = regionsMap.putIfAbsent(regionInfo.getRegionName(), newNode);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    return oldNode != null ? oldNode : newNode;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  }<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span>  public RegionStateNode getOrCreateRegionStateNode(RegionInfo regionInfo) {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    RegionStateNode node = getRegionStateNodeFromName(regionInfo.getRegionName());<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    return node != null ? node : createRegionStateNode(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>  RegionStateNode getRegionStateNodeFromName(byte[] regionName) {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    return regionsMap.get(regionName);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  }<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span>  public RegionStateNode getRegionStateNode(RegionInfo regionInfo) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    return getRegionStateNodeFromName(regionInfo.getRegionName());<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  }<a name="line.131"></a>
-<span class="sourceLineNo">132</span><a name="line.132"></a>
-<span class="sourceLineNo">133</span>  public void deleteRegion(final RegionInfo regionInfo) {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    regionsMap.remove(regionInfo.getRegionName());<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    // See HBASE-20860<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    // After master restarts, merged regions' RIT state may not be cleaned,<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    // making sure they are cleaned here<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    if (regionInTransition.containsKey(regionInfo)) {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      regionInTransition.remove(regionInfo);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    // Remove from the offline regions map too if there.<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    if (this.regionOffline.containsKey(regionInfo)) {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      this.regionOffline.remove(regionInfo);<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><a name="line.147"></a>
-<span class="sourceLineNo">148</span>  public void deleteRegions(final List&lt;RegionInfo&gt; regionInfos) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    regionInfos.forEach(this::deleteRegion);<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  }<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span>  ArrayList&lt;RegionStateNode&gt; getTableRegionStateNodes(final TableName tableName) {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    final ArrayList&lt;RegionStateNode&gt; regions = new ArrayList&lt;RegionStateNode&gt;();<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      if (!node.getTable().equals(tableName)) break;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      regions.add(node);<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    }<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    return regions;<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>  ArrayList&lt;RegionState&gt; getTableRegionStates(final TableName tableName) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;();<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      if (!node.getTable().equals(tableName)) break;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      regions.add(node.toRegionState());<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    }<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    return regions;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>  ArrayList&lt;RegionInfo&gt; getTableRegionsInfo(final TableName tableName) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    final ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;RegionInfo&gt;();<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      if (!node.getTable().equals(tableName)) break;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      regions.add(node.getRegionInfo());<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    }<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    return regions;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  }<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>  Collection&lt;RegionStateNode&gt; getRegionStateNodes() {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    return regionsMap.values();<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  }<a name="line.181"></a>
-<span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>  public ArrayList&lt;RegionState&gt; getRegionStates() {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;(regionsMap.size());<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      regions.add(node.toRegionState());<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    return regions;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  }<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>  //  RegionState helpers<a name="line.192"></a>
+<span class="sourceLineNo">113</span>  //  RegionStateNode helpers<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  // ==========================================================================<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  @VisibleForTesting<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  RegionStateNode createRegionStateNode(RegionInfo regionInfo) {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    RegionStateNode newNode = new RegionStateNode(regionInfo, regionInTransition);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    RegionStateNode oldNode = regionsMap.putIfAbsent(regionInfo.getRegionName(), newNode);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    return oldNode != null ? oldNode : newNode;<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>  public RegionStateNode getOrCreateRegionStateNode(RegionInfo regionInfo) {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    RegionStateNode node = getRegionStateNodeFromName(regionInfo.getRegionName());<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    return node != null ? node : createRegionStateNode(regionInfo);<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>  RegionStateNode getRegionStateNodeFromName(byte[] regionName) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    return regionsMap.get(regionName);<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>  public RegionStateNode getRegionStateNode(RegionInfo regionInfo) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    return getRegionStateNodeFromName(regionInfo.getRegionName());<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>  public void deleteRegion(final RegionInfo regionInfo) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    regionsMap.remove(regionInfo.getRegionName());<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    // See HBASE-20860<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    // After master restarts, merged regions' RIT state may not be cleaned,<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    // making sure they are cleaned here<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    if (regionInTransition.containsKey(regionInfo)) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      regionInTransition.remove(regionInfo);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    // Remove from the offline regions map too if there.<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    if (this.regionOffline.containsKey(regionInfo)) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      this.regionOffline.remove(regionInfo);<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><a name="line.149"></a>
+<span class="sourceLineNo">150</span>  public void deleteRegions(final List&lt;RegionInfo&gt; regionInfos) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    regionInfos.forEach(this::deleteRegion);<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>  ArrayList&lt;RegionStateNode&gt; getTableRegionStateNodes(final TableName tableName) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    final ArrayList&lt;RegionStateNode&gt; regions = new ArrayList&lt;RegionStateNode&gt;();<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      if (!node.getTable().equals(tableName)) break;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      regions.add(node);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    }<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    return regions;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
+<span class="sourceLineNo">162</span><a name="line.162"></a>
+<span class="sourceLineNo">163</span>  ArrayList&lt;RegionState&gt; getTableRegionStates(final TableName tableName) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;();<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      if (!node.getTable().equals(tableName)) break;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      regions.add(node.toRegionState());<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    }<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    return regions;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  }<a name="line.170"></a>
+<span class="sourceLineNo">171</span><a name="line.171"></a>
+<span class="sourceLineNo">172</span>  ArrayList&lt;RegionInfo&gt; getTableRegionsInfo(final TableName tableName) {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    final ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;RegionInfo&gt;();<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      if (!node.getTable().equals(tableName)) break;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      regions.add(node.getRegionInfo());<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    }<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    return regions;<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>  Collection&lt;RegionStateNode&gt; getRegionStateNodes() {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    return regionsMap.values();<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>  public ArrayList&lt;RegionState&gt; getRegionStates() {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;(regionsMap.size());<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      regions.add(node.toRegionState());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    }<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    return regions;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  }<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
 <span class="sourceLineNo">193</span>  // ==========================================================================<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    return regionStateNode == null ? null : regionStateNode.toRegionState();<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>  public RegionState getRegionState(final String encodedRegionName) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    // TODO: Need a map &lt;encodedName, ...&gt; but it is just dispatch merge...<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        return node.toRegionState();<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      }<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    }<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    return null;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>  // ============================================================================================<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  //  TODO: helpers<a name="line.210"></a>
+<span class="sourceLineNo">194</span>  //  RegionState helpers<a name="line.194"></a>
+<span class="sourceLineNo">195</span>  // ==========================================================================<a name="line.195"></a>
+<span class="sourceLineNo">196</span>  public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.198"></a>
+<span class="sourceLineNo">199</span>  }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  public RegionState getRegionState(final String encodedRegionName) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    // TODO: Need a map &lt;encodedName, ...&gt; but it is just dispatch merge...<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>        return node.toRegionState();<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 null;<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>  // ============================================================================================<a name="line.211"></a>
-<span class="sourceLineNo">212</span>  public boolean hasTableRegionStates(final TableName tableName) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // TODO<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    return !getTableRegionStates(tableName).isEmpty();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  }<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>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   */<a name="line.219"></a>
-<span class="sourceLineNo">220</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(final TableName table) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    return getRegionsOfTable(table, false);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  }<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>  private HRegionLocation createRegionForReopen(RegionStateNode node) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    node.lock();<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    try {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      if (!include(node, false)) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        return null;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      }<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      if (node.isInState(State.OPEN)) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.231"></a>
-<span class="sourceLineNo">232</span>          node.getOpenSeqNum());<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      } else if (node.isInState(State.OPENING)) {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), -1);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      } else {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        return null;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      }<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    } finally {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      node.unlock();<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><a name="line.242"></a>
-<span class="sourceLineNo">243</span>  /**<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   * Get the regions to be reopened when modifying a table.<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   * &lt;p/&gt;<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   * Notice that the {@code openSeqNum} in the returned HRegionLocation is also used to indicate the<a name="line.246"></a>
-<span class="sourceLineNo">247</span>   * state of this region, positive means the region is in {@link State#OPEN}, -1 means<a name="line.247"></a>
-<span class="sourceLineNo">248</span>   * {@link State#OPENING}. And for regions in other states we do not need reopen them.<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   */<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  public List&lt;HRegionLocation&gt; getRegionsOfTableForReopen(TableName tableName) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    return getTableRegionStateNodes(tableName).stream().map(this::createRegionForReopen)<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      .filter(r -&gt; r != null).collect(Collectors.toList());<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>   * Check whether the region has been reopened. The meaning of the {@link HRegionLocation} is the<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * same with {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * &lt;p/&gt;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   * For a region which is in {@link State#OPEN} before, if the region state is changed or the open<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   * seq num is changed, we can confirm that it has been reopened.<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   * &lt;p/&gt;<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   * For a region which is in {@link State#OPENING} before, usually it will be in {@link State#OPEN}<a name="line.262"></a>
-<span class="sourceLineNo">263</span>   * now and we will schedule a MRP to reopen it. But there are several exceptions:<a name="line.263"></a>
-<span class="sourceLineNo">264</span>   * &lt;ul&gt;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>   * &lt;li&gt;The region is in state other than {@link State#OPEN} or {@link State#OPENING}.&lt;/li&gt;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>   * &lt;li&gt;The location of the region has been changed&lt;/li&gt;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * &lt;/ul&gt;<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * Of course the region could still be in {@link State#OPENING} state and still on the same<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   * server, then here we will still return a {@link HRegionLocation} for it, just like<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   * @param oldLoc the previous state/location of this region<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   * @return null if the region has been reopened, otherwise a new {@link HRegionLocation} which<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   *         means we still need to reopen the region.<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   * @see #getRegionsOfTableForReopen(TableName)<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   */<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public HRegionLocation checkReopened(HRegionLocation oldLoc) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    RegionStateNode node = getRegionStateNode(oldLoc.getRegion());<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    // HBASE-20921<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    // if the oldLoc's state node does not exist, that means the region is<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    // merged or split, no need to check it<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    if (node == null) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      return null;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    }<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    node.lock();<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    try {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      if (oldLoc.getSeqNum() &gt;= 0) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        // in OPEN state before<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        if (node.isInState(State.OPEN)) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          if (node.getOpenSeqNum() &gt; oldLoc.getSeqNum()) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>            // normal case, the region has been reopened<a name="line.290"></a>
-<span class="sourceLineNo">291</span>            return null;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>          } else {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>            // the open seq num does not change, need to reopen again<a name="line.293"></a>
-<span class="sourceLineNo">294</span>            return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.294"></a>
-<span class="sourceLineNo">295</span>              node.getOpenSeqNum());<a name="line.295"></a>
-<span class="sourceLineNo">296</span>          }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        } else {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>          // the state has been changed so we can make sure that the region has been reopened(not<a name="line.298"></a>
-<span class="sourceLineNo">299</span>          // finished maybe, but not a problem).<a name="line.299"></a>
-<span class="sourceLineNo">300</span>          return null;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        }<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      } else {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>        // in OPENING state before<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        if (!node.isInState(State.OPEN, State.OPENING)) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>          // not in OPEN or OPENING state, then we can make sure that the region has been<a name="line.305"></a>
-<span class="sourceLineNo">306</span>          // reopened(not finished maybe, but not a problem)<a name="line.306"></a>
-<span class="sourceLineNo">307</span>          return null;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>        } else {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>          if (!node.getRegionLocation().equals(oldLoc.getServerName())) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>            // the region has been moved, so we can make sure that the region has been reopened.<a name="line.310"></a>
-<span class="sourceLineNo">311</span>            return null;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>          }<a name="line.312"></a>
-<span class="sourceLineNo">313</span>          // normal case, we are still in OPENING state, or the reopen has been opened and the state<a name="line.313"></a>
-<span class="sourceLineNo">314</span>          // is changed to OPEN.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>          long openSeqNum = node.isInState(State.OPEN) ? node.getOpenSeqNum() : -1;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>          return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), openSeqNum);<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>    } finally {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      node.unlock();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  }<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>  /**<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   */<a name="line.326"></a>
-<span class="sourceLineNo">327</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, boolean offline) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    return getRegionsOfTable(table, state -&gt; include(state, 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>  /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   *         &lt;code&gt;offline&lt;/code&gt; to true. Does not include regions that are in the<a name="line.333"></a>
-<span class="sourceLineNo">334</span>   *         {@link State#SPLIT} state.<a name="line.334"></a>
-<span class="sourceLineNo">335</span>   */<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  private List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, Predicate&lt;RegionStateNode&gt; filter) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    return getTableRegionStateNodes(table).stream().filter(filter).map(n -&gt; n.getRegionInfo())<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      .collect(Collectors.toList());<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>  /**<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   * Utility. Whether to include region in list of regions. Default is to<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * weed out split and offline regions.<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   * @return True if we should include the &lt;code&gt;node&lt;/code&gt; (do not include<a name="line.344"></a>
-<span class="sourceLineNo">345</span>   * if split or offline unless &lt;code&gt;offline&lt;/code&gt; is set to true.<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   */<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  boolean include(final RegionStateNode node, final boolean offline) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    if (LOG.isTraceEnabled()) {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    if (node.isInState(State.SPLIT)) return false;<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    if (node.isInState(State.OFFLINE) &amp;&amp; !offline) return false;<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    final RegionInfo hri = node.getRegionInfo();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    return (!hri.isOffline() &amp;&amp; !hri.isSplit()) ||<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        ((hri.isOffline() || hri.isSplit()) &amp;&amp; offline);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>  }<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>   * Returns the set of regions hosted by the specified server<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   * @param serverName the server we are interested in<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   * @return set of RegionInfo hosted by the specified server<a name="line.361"></a>
-<span class="sourceLineNo">362</span>   */<a name="line.362"></a>
-<span class="sourceLineNo">363</span>  public List&lt;RegionInfo&gt; getServerRegionInfoSet(final ServerName serverName) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    ServerStateNode serverInfo = getServerNode(serverName);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    if (serverInfo == null) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      return Collections.emptyList();<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>    synchronized (serverInfo) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      return serverInfo.getRegionInfoList();<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    }<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>  // Split helpers<a name="line.375"></a>
-<span class="sourceLineNo">376</span>  // These methods will only be called in ServerCrashProcedure, and at the end of SCP we will remove<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  // the ServerStateNode by calling removeServer.<a name="line.377"></a>
-<span class="sourceLineNo">378</span>  // ============================================================================================<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>  private void setServerState(ServerName serverName, ServerState state) {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    synchronized (serverNode) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      serverNode.setState(state);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    }<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>  /**<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   * Call this when we start meta log splitting a crashed Server.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   * @see #metaLogSplit(ServerName)<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   */<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  public void metaLogSplitting(ServerName serverName) {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    setServerState(serverName, ServerState.SPLITTING_META);<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>  /**<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   * Called after we've split the meta logs on a crashed Server.<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * @see #metaLogSplitting(ServerName)<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   */<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  public void metaLogSplit(ServerName serverName) {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    setServerState(serverName, ServerState.SPLITTING_META_DONE);<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>  /**<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * Call this when we start log splitting for a crashed Server.<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * @see #logSplit(ServerName)<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   */<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  public void logSplitting(final ServerName serverName) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    setServerState(serverName, ServerState.SPLITTING);<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>  /**<a name="line.411"></a>
-<span class="sourceLineNo">412</span>   * Called after we've split all logs on a crashed Server.<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * @see #logSplitting(ServerName)<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   */<a name="line.414"></a>
-<span class="sourceLineNo">415</span>  public void logSplit(final ServerName serverName) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    setServerState(serverName, ServerState.OFFLINE);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>  }<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span>  public void updateRegionState(RegionInfo regionInfo, State state) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    regionNode.lock();<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    try {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      regionNode.setState(state);<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    } finally {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      regionNode.unlock();<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><a name="line.428"></a>
-<span class="sourceLineNo">429</span>  // ============================================================================================<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  //  TODO:<a name="line.430"></a>
+<span class="sourceLineNo">212</span>  //  TODO: helpers<a name="line.212"></a>
+<span class="sourceLineNo">213</span>  // ============================================================================================<a name="line.213"></a>
+<span class="sourceLineNo">214</span>  public boolean hasTableRegionStates(final TableName tableName) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    // TODO<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    return !getTableRegionStates(tableName).isEmpty();<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>  /**<a name="line.219"></a>
+<span class="sourceLineNo">220</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   */<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(final TableName table) {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    return getRegionsOfTable(table, false);<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>  private HRegionLocation createRegionForReopen(RegionStateNode node) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    node.lock();<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    try {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      if (!include(node, false)) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        return null;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      if (node.isInState(State.OPEN)) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.233"></a>
+<span class="sourceLineNo">234</span>          node.getOpenSeqNum());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      } else if (node.isInState(State.OPENING)) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), -1);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      } else {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>        return null;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    } finally {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      node.unlock();<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><a name="line.244"></a>
+<span class="sourceLineNo">245</span>  /**<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   * Get the regions to be reopened when modifying a table.<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   * &lt;p/&gt;<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   * Notice that the {@code openSeqNum} in the returned HRegionLocation is also used to indicate the<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * state of this region, positive means the region is in {@link State#OPEN}, -1 means<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * {@link State#OPENING}. And for regions in other states we do not need reopen them.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  public List&lt;HRegionLocation&gt; getRegionsOfTableForReopen(TableName tableName) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    return getTableRegionStateNodes(tableName).stream().map(this::createRegionForReopen)<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      .filter(r -&gt; r != null).collect(Collectors.toList());<a name="line.254"></a>
+<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>  /**<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   * Check whether the region has been reopened. The meaning of the {@link HRegionLocation} is the<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   * same with {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   * &lt;p/&gt;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   * For a region which is in {@link State#OPEN} before, if the region state is changed or the open<a name="line.261"></a>
+<span class="sourceLineNo">262</span>   * seq num is changed, we can confirm that it has been reopened.<a name="line.262"></a>
+<span class="sourceLineNo">263</span>   * &lt;p/&gt;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>   * For a region which is in {@link State#OPENING} before, usually it will be in {@link State#OPEN}<a name="line.264"></a>
+<span class="sourceLineNo">265</span>   * now and we will schedule a MRP to reopen it. But there are several exceptions:<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   * &lt;ul&gt;<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   * &lt;li&gt;The region is in state other than {@link State#OPEN} or {@link State#OPENING}.&lt;/li&gt;<a name="line.267"></a>
+<span class="sourceLineNo">268</span>   * &lt;li&gt;The location of the region has been changed&lt;/li&gt;<a name="line.268"></a>
+<span class="sourceLineNo">269</span>   * &lt;/ul&gt;<a name="line.269"></a>
+<span class="sourceLineNo">270</span>   * Of course the region could still be in {@link State#OPENING} state and still on the same<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * server, then here we will still return a {@link HRegionLocation} for it, just like<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   * @param oldLoc the previous state/location of this region<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   * @return null if the region has been reopened, otherwise a new {@link HRegionLocation} which<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   *         means we still need to reopen the region.<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * @see #getRegionsOfTableForReopen(TableName)<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   */<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  public HRegionLocation checkReopened(HRegionLocation oldLoc) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    RegionStateNode node = getRegionStateNode(oldLoc.getRegion());<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    // HBASE-20921<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    // if the oldLoc's state node does not exist, that means the region is<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    // merged or split, no need to check it<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    if (node == null) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      return null;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    }<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    node.lock();<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    try {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      if (oldLoc.getSeqNum() &gt;= 0) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        // in OPEN state before<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        if (node.isInState(State.OPEN)) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          if (node.getOpenSeqNum() &gt; oldLoc.getSeqNum()) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>            // normal case, the region has been reopened<a name="line.292"></a>
+<span class="sourceLineNo">293</span>            return null;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>          } else {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>            // the open seq num does not change, need to reopen again<a name="line.295"></a>
+<span class="sourceLineNo">296</span>            return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.296"></a>
+<span class="sourceLineNo">297</span>              node.getOpenSeqNum());<a name="line.297"></a>
+<span class="sourceLineNo">298</span>          }<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        } else {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>          // the state has been changed so we can make sure that the region has been reopened(not<a name="line.300"></a>
+<span class="sourceLineNo">301</span>          // finished maybe, but not a problem).<a name="line.301"></a>
+<span class="sourceLineNo">302</span>          return null;<a name="line.302"></a>
+<span class="sourceLineNo">303</span>        }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      } else {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        // in OPENING state before<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        if (!node.isInState(State.OPEN, State.OPENING)) {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>          // not in OPEN or OPENING state, then we can make sure that the region has been<a name="line.307"></a>
+<span class="sourceLineNo">308</span>          // reopened(not finished maybe, but not a problem)<a name="line.308"></a>
+<span class="sourceLineNo">309</span>          return null;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        } else {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>          if (!node.getRegionLocation().equals(oldLoc.getServerName())) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>            // the region has been moved, so we can make sure that the region has been reopened.<a name="line.312"></a>
+<span class="sourceLineNo">313</span>            return null;<a name="line.313"></a>
+<span class="sourceLineNo">314</span>          }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>          // normal case, we are still in OPENING state, or the reopen has been opened and the state<a name="line.315"></a>
+<span class="sourceLineNo">316</span>          // is changed to OPEN.<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          long openSeqNum = node.isInState(State.OPEN) ? node.getOpenSeqNum() : -1;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>          return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), openSeqNum);<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>    } finally {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      node.unlock();<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
+<span class="sourceLineNo">324</span>  }<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span>  /**<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   */<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, boolean offline) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    return getRegionsOfTable(table, state -&gt; include(state, offline));<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>   * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   *         &lt;code&gt;offline&lt;/code&gt; to true. Does not include regions that are in the<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   *         {@link State#SPLIT} state.<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   */<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  private List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, Predicate&lt;RegionStateNode&gt; filter) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    return getTableRegionStateNodes(table).stream().filter(filter).map(n -&gt; n.getRegionInfo())<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      .collect(Collectors.toList());<a name="line.340"></a>
+<span class="sourceLineNo">341</span>  }<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>  /**<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * Utility. Whether to include region in list of regions. Default is to<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   * weed out split and offline regions.<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * @return True if we should include the &lt;code&gt;node&lt;/code&gt; (do not include<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   * if split or offline unless &lt;code&gt;offline&lt;/code&gt; is set to true.<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   */<a name="line.348"></a>
+<span class="sourceLineNo">349</span>  boolean include(final RegionStateNode node, final boolean offline) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    if (LOG.isTraceEnabled()) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    }<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    if (node.isInState(State.SPLIT)) return false;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    if (node.isInState(State.OFFLINE) &amp;&amp; !offline) return false;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    final RegionInfo hri = node.getRegionInfo();<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    return (!hri.isOffline() &amp;&amp; !hri.isSplit()) ||<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        ((hri.isOffline() || hri.isSplit()) &amp;&amp; offline);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>  /**<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   * Returns the set of regions hosted by the specified server<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   * @param serverName the server we are interested in<a name="line.362"></a>
+<span class="sourceLineNo">363</span>   * @return set of RegionInfo hosted by the specified server<a name="line.363"></a>
+<span class="sourceLineNo">364</span>   */<a name="line.364"></a>
+<span class="sourceLineNo">365</span>  public List&lt;RegionInfo&gt; getServerRegionInfoSet(final ServerName serverName) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    ServerStateNode serverInfo = getServerNode(serverName);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    if (serverInfo == null) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      return Collections.emptyList();<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>    synchronized (serverInfo) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      return serverInfo.getRegionInfoList();<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><a name="line.375"></a>
+<span class="sourceLineNo">376</span>  // ============================================================================================<a name="line.376"></a>
+<span class="sourceLineNo">377</span>  // Split helpers<a name="line.377"></a>
+<span class="sourceLineNo">378</span>  // These methods will only be called in ServerCrashProcedure, and at the end of SCP we will remove<a name="line.378"></a>
+<span class="sourceLineNo">379</span>  // the ServerStateNode by calling removeServer.<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 void setServerState(ServerName serverName, ServerState state) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    synchronized (serverNode) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      serverNode.setState(state);<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>  /**<a name="line.389"></a>
+<span class="sourceLineNo">390</span>   * Call this when we start meta log splitting a crashed Server.<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * @see #metaLogSplit(ServerName)<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   */<a name="line.392"></a>
+<span class="sourceLineNo">393</span>  public void metaLogSplitting(ServerName serverName) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    setServerState(serverName, ServerState.SPLITTING_META);<a name="line.394"></a>
+<span class="sourceLineNo">395</span>  }<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>   * Called after we've split the meta logs on a crashed Server.<a name="line.398"></a>
+<span class="sourceLineNo">399</span>   * @see #metaLogSplitting(ServerName)<a name="line.399"></a>
+<span class="sourceLineNo">400</span>   */<a name="line.400"></a>
+<span class="sourceLineNo">401</span>  public void metaLogSplit(ServerName serverName) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>    setServerState(serverName, ServerState.SPLITTING_META_DONE);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>  }<a name="line.403"></a>
+<span class="sourceLineNo">404</span><a name="line.404"></a>
+<span class="sourceLineNo">405</span>  /**<a name="line.405"></a>
+<span class="sourceLineNo">406</span>   * Call this when we start log splitting for a crashed Server.<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   * @see #logSplit(ServerName)<a name="line.407"></a>
+<span class="sourceLineNo">408</span>   */<a name="line.408"></a>
+<span class="sourceLineNo">409</span>  public void logSplitting(final ServerName serverName) {<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    setServerState(serverName, ServerState.SPLITTING);<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  }<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>   * Called after we've split all logs on a crashed Server.<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   * @see #logSplitting(ServerName)<a name="line.415"></a>
+<span class="sourceLineNo">416</span>   */<a name="line.416"></a>
+<span class="sourceLineNo">417</span>  public void logSplit(final ServerName serverName) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    setServerState(serverName, ServerState.OFFLINE);<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>  public void updateRegionState(RegionInfo regionInfo, State state) {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    regionNode.lock();<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    try {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      regionNode.setState(state);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    } finally {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>      regionNode.unlock();<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>  }<a name="line.429"></a>
+<span class="sourceLineNo">430</span><a name="line.430"></a>
 <span class="sourceLineNo">431</span>  // ============================================================================================<a name="line.431"></a>
-<span class="sourceLineNo">432</span>  public List&lt;RegionInfo&gt; getAssignedRegions() {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    final List&lt;RegionInfo&gt; result = new ArrayList&lt;RegionInfo&gt;();<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      if (!node.isInTransition()) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>        result.add(node.getRegionInfo());<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    }<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    return result;<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>  public boolean isRegionInState(RegionInfo regionInfo, State... state) {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    RegionStateNode regionNode = getRegionStateNode(regionInfo);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    if (regionNode != null) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      regionNode.lock();<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      try {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>        return regionNode.isInState(state);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      } finally {<a name="line.448"></a>
-<span class="sourceLineNo">449</span>        regionNode.unlock();<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>    return false;<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>  public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    return isRegionInState(regionInfo, State.OPEN);<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>  /**<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   */<a name="line.461"></a>
-<span class="sourceLineNo">462</span>  public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>  }<a name="line.464"></a>
-<span class="sourceLineNo">465</span><a name="line.465"></a>
-<span class="sourceLineNo">466</span>  public Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getSnapShotOfAssignment(<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      final Collection&lt;RegionInfo&gt; regions) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    final Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; result = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    if (regions != null) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      for (RegionInfo hri : regions) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        final RegionStateNode node = getRegionStateNode(hri);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        if (node == null) {<a name="line.472"></a>
-<span class="sourceLineNo">473</span>          continue;<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        }<a name="line.474"></a>
-<span class="sourceLineNo">475</span>        createSnapshot(node, result);<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      }<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    } else {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      for (RegionStateNode node : regionsMap.values()) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        if (node == null) {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>          continue;<a name="line.480"></a>
-<span class="sourceLineNo">481</span>        }<a name="line.481"></a>
-<span class="sourceLineNo">482</span>        createSnapshot(node, result);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      }<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    return result;<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 void createSnapshot(RegionStateNode node, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; result) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    final ServerName serverName = node.getRegionLocation();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    if (serverName == null) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      return;<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>    List&lt;RegionInfo&gt; serverRegions = result.get(serverName);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    if (serverRegions == null) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      serverRegions = new ArrayList&lt;RegionInfo&gt;();<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      result.put(serverName, serverRegions);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    serverRegions.add(node.getRegionInfo());<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>  public Map&lt;RegionInfo, ServerName&gt; getRegionAssignments() {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    final HashMap&lt;RegionInfo, ServerName&gt; assignments = new HashMap&lt;RegionInfo, ServerName&gt;();<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    }<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    return assignments;<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>  public Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; getRegionByStateOfTable(TableName tableName) {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    final State[] states = State.values();<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    final Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; tableRegions =<a name="line.512"></a>
-<span class="sourceLineNo">513</span>        new HashMap&lt;State, List&lt;RegionInfo&gt;&gt;(states.length);<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    for (int i = 0; i &lt; states.length; ++i) {<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      tableRegions.put(states[i], new ArrayList&lt;RegionInfo&gt;());<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      if (node.getTable().equals(tableName)) {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      }<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    }<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    return tableRegions;<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>  public ServerName getRegionServerOfRegion(RegionInfo regionInfo) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    RegionStateNode regionNode = getRegionStateNode(regionInfo);<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    if (regionNode != null) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      regionNode.lock();<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      try {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>        ServerName server = regionNode.getRegionLocation();<a name="line.531"></a>
-<span class="sourceLineNo">532</span>        return server != null ? server : regionNode.getLastHost();<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      } finally {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>        regionNode.unlock();<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="s

<TRUNCATED>

[10/18] hbase-site git commit: Published site at cebb725a9f4ab8dd9d3f306d21d53d6f56161c51.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html
index d974429..e478f39 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html
@@ -42,32 +42,32 @@
 <span class="sourceLineNo">034</span>import java.util.TreeMap;<a name="line.34"></a>
 <span class="sourceLineNo">035</span>import java.util.function.Predicate;<a name="line.35"></a>
 <span class="sourceLineNo">036</span>import java.util.stream.Collectors;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.commons.lang3.NotImplementedException;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.conf.Configuration;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HConstants;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HDFSBlocksDistribution;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.ServerMetrics;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ServerName;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.TableName;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.RackManager;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster.Action.Type;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.slf4j.Logger;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.slf4j.LoggerFactory;<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hbase.thirdparty.com.google.common.collect.ArrayListMultimap;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.62"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.commons.lang3.NotImplementedException;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HConstants;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HDFSBlocksDistribution;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ServerMetrics;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.ServerName;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.TableName;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.RackManager;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster.Action.Type;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hbase.thirdparty.com.google.common.collect.ArrayListMultimap;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.slf4j.Logger;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.slf4j.LoggerFactory;<a name="line.62"></a>
 <span class="sourceLineNo">063</span><a name="line.63"></a>
 <span class="sourceLineNo">064</span>/**<a name="line.64"></a>
 <span class="sourceLineNo">065</span> * The base class for load balancers. It provides the the functions used to by<a name="line.65"></a>
@@ -1462,181 +1462,186 @@
 <span class="sourceLineNo">1454</span>    for (Map.Entry&lt;RegionInfo, ServerName&gt; entry : regions.entrySet()) {<a name="line.1454"></a>
 <span class="sourceLineNo">1455</span>      RegionInfo region = entry.getKey();<a name="line.1455"></a>
 <span class="sourceLineNo">1456</span>      ServerName oldServerName = entry.getValue();<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>      if (!hasRegionReplica &amp;&amp; !RegionReplicaUtil.isDefaultReplica(region)) {<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>        hasRegionReplica = true;<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>      }<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>      List&lt;ServerName&gt; localServers = new ArrayList&lt;&gt;();<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>      if (oldServerName != null) {<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>        localServers = serversByHostname.get(oldServerName.getHostnameLowerCase());<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>      }<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>      if (localServers.isEmpty()) {<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>        // No servers on the new cluster match up with this hostname, assign randomly, later.<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>        randomAssignRegions.add(region);<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>        if (oldServerName != null) {<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>          oldHostsNoLongerPresent.add(oldServerName.getHostnameLowerCase());<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>        }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>      } else if (localServers.size() == 1) {<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>        // the usual case - one new server on same host<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>        ServerName target = localServers.get(0);<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>        assignments.get(target).add(region);<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>        numRetainedAssigments++;<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      } else {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        // multiple new servers in the cluster on this same host<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>        if (localServers.contains(oldServerName)) {<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>          assignments.get(oldServerName).add(region);<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>          numRetainedAssigments++;<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>        } else {<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>          ServerName target = null;<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>          for (ServerName tmp : localServers) {<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>            if (tmp.getPort() == oldServerName.getPort()) {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>              target = tmp;<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>              assignments.get(tmp).add(region);<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>              numRetainedAssigments++;<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>              break;<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>            }<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>          }<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>          if (target == null) {<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>            randomAssignRegions.add(region);<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>          }<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>    // If servers from prior assignment aren't present, then lets do randomAssignment on regions.<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>    if (randomAssignRegions.size() &gt; 0) {<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>      Cluster cluster = createCluster(servers, regions.keySet(), hasRegionReplica);<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>      for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : assignments.entrySet()) {<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>        ServerName sn = entry.getKey();<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>        for (RegionInfo region : entry.getValue()) {<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>          cluster.doAssignRegion(region, sn);<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>        }<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>      }<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>      for (RegionInfo region : randomAssignRegions) {<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>        ServerName target = randomAssignment(cluster, region, servers);<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>        assignments.get(target).add(region);<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>        numRandomAssignments++;<a name="line.1509"></a>
+<span class="sourceLineNo">1457</span>      // In the current set of regions even if one has region replica let us go with<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>      // getting the entire snapshot<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>      if (this.services != null &amp;&amp; this.services.getAssignmentManager() != null) { // for tests<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>        if (!hasRegionReplica &amp;&amp; this.services.getAssignmentManager().getRegionStates()<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>            .isReplicaAvailableForRegion(region)) {<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>          hasRegionReplica = true;<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>        }<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>      }<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>      List&lt;ServerName&gt; localServers = new ArrayList&lt;&gt;();<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>      if (oldServerName != null) {<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>        localServers = serversByHostname.get(oldServerName.getHostnameLowerCase());<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>      }<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>      if (localServers.isEmpty()) {<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>        // No servers on the new cluster match up with this hostname, assign randomly, later.<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>        randomAssignRegions.add(region);<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>        if (oldServerName != null) {<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>          oldHostsNoLongerPresent.add(oldServerName.getHostnameLowerCase());<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>        }<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>      } else if (localServers.size() == 1) {<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>        // the usual case - one new server on same host<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>        ServerName target = localServers.get(0);<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>        assignments.get(target).add(region);<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>        numRetainedAssigments++;<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>      } else {<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>        // multiple new servers in the cluster on this same host<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>        if (localServers.contains(oldServerName)) {<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>          assignments.get(oldServerName).add(region);<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>          numRetainedAssigments++;<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>        } else {<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>          ServerName target = null;<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>          for (ServerName tmp : localServers) {<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>            if (tmp.getPort() == oldServerName.getPort()) {<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>              target = tmp;<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>              assignments.get(tmp).add(region);<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>              numRetainedAssigments++;<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>              break;<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>          if (target == null) {<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>            randomAssignRegions.add(region);<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>          }<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>        }<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>      }<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>    }<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span><a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>    // If servers from prior assignment aren't present, then lets do randomAssignment on regions.<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>    if (randomAssignRegions.size() &gt; 0) {<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>      Cluster cluster = createCluster(servers, regions.keySet(), hasRegionReplica);<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>      for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : assignments.entrySet()) {<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>        ServerName sn = entry.getKey();<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>        for (RegionInfo region : entry.getValue()) {<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>          cluster.doAssignRegion(region, sn);<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>        }<a name="line.1509"></a>
 <span class="sourceLineNo">1510</span>      }<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>    }<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span><a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>    String randomAssignMsg = "";<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    if (numRandomAssignments &gt; 0) {<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>      randomAssignMsg =<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>          numRandomAssignments + " regions were assigned "<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>              + "to random hosts, since the old hosts for these regions are no "<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>              + "longer present in the cluster. These hosts were:\n  "<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>              + Joiner.on("\n  ").join(oldHostsNoLongerPresent);<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>    LOG.info("Reassigned " + regions.size() + " regions. " + numRetainedAssigments<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>        + " retained the pre-restart assignment. " + randomAssignMsg);<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>    return assignments;<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>  }<a name="line.1525"></a>
+<span class="sourceLineNo">1511</span>      for (RegionInfo region : randomAssignRegions) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>        ServerName target = randomAssignment(cluster, region, servers);<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        assignments.get(target).add(region);<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>        numRandomAssignments++;<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>      }<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>    }<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span><a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>    String randomAssignMsg = "";<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    if (numRandomAssignments &gt; 0) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>      randomAssignMsg =<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          numRandomAssignments + " regions were assigned "<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>              + "to random hosts, since the old hosts for these regions are no "<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>              + "longer present in the cluster. These hosts were:\n  "<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>              + Joiner.on("\n  ").join(oldHostsNoLongerPresent);<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>    }<a name="line.1525"></a>
 <span class="sourceLineNo">1526</span><a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>  @Override<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>  public void initialize() throws HBaseIOException{<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>  }<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span><a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>  @Override<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>  public void regionOnline(RegionInfo regionInfo, ServerName sn) {<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>  }<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>  @Override<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>  public void regionOffline(RegionInfo regionInfo) {<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 boolean isStopped() {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>    return stopped;<a name="line.1541"></a>
+<span class="sourceLineNo">1527</span>    LOG.info("Reassigned " + regions.size() + " regions. " + numRetainedAssigments<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>        + " retained the pre-restart assignment. " + randomAssignMsg);<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>    return assignments;<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>  }<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span><a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>  @Override<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>  public void initialize() throws HBaseIOException{<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>  }<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span><a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>  @Override<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>  public void regionOnline(RegionInfo regionInfo, ServerName sn) {<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>  }<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span><a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>  @Override<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>  public void regionOffline(RegionInfo regionInfo) {<a name="line.1541"></a>
 <span class="sourceLineNo">1542</span>  }<a name="line.1542"></a>
 <span class="sourceLineNo">1543</span><a name="line.1543"></a>
 <span class="sourceLineNo">1544</span>  @Override<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>  public void stop(String why) {<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>    LOG.info("Load Balancer stop requested: "+why);<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>    stopped = true;<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>  /**<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>   * Used to assign a single region to a random server.<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>   */<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>  private ServerName randomAssignment(Cluster cluster, RegionInfo regionInfo,<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>      List&lt;ServerName&gt; servers) {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>    int numServers = servers.size(); // servers is not null, numServers &gt; 1<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>    ServerName sn = null;<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>    final int maxIterations = numServers * 4;<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>    int iterations = 0;<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>    List&lt;ServerName&gt; usedSNs = new ArrayList&lt;&gt;(servers.size());<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>    do {<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      int i = RANDOM.nextInt(numServers);<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>      sn = servers.get(i);<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      if (!usedSNs.contains(sn)) {<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        usedSNs.add(sn);<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      }<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>    } while (cluster.wouldLowerAvailability(regionInfo, sn)<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>        &amp;&amp; iterations++ &lt; maxIterations);<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>    if (iterations &gt;= maxIterations) {<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      // We have reached the max. Means the servers that we collected is still lowering the<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      // availability<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      for (ServerName unusedServer : servers) {<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>        if (!usedSNs.contains(unusedServer)) {<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>          // check if any other unused server is there for us to use.<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>          // If so use it. Else we have not other go but to go with one of them<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>          if (!cluster.wouldLowerAvailability(regionInfo, unusedServer)) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>            sn = unusedServer;<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>            break;<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>      }<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>    }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>    cluster.doAssignRegion(regionInfo, sn);<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    return sn;<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>  }<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span><a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>  /**<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>   * Round robin a list of regions to a list of servers<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>   */<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>  private void roundRobinAssignment(Cluster cluster, List&lt;RegionInfo&gt; regions,<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      List&lt;RegionInfo&gt; unassignedRegions, List&lt;ServerName&gt; servers,<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignments) {<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span><a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>    int numServers = servers.size();<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    int numRegions = regions.size();<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    int max = (int) Math.ceil((float) numRegions / numServers);<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    int serverIdx = 0;<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    if (numServers &gt; 1) {<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>      serverIdx = RANDOM.nextInt(numServers);<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>    }<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>    int regionIdx = 0;<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span><a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    for (int j = 0; j &lt; numServers; j++) {<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>      ServerName server = servers.get((j + serverIdx) % numServers);<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>      List&lt;RegionInfo&gt; serverRegions = new ArrayList&lt;&gt;(max);<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>      for (int i = regionIdx; i &lt; numRegions; i += numServers) {<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>        RegionInfo region = regions.get(i % numRegions);<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>        if (cluster.wouldLowerAvailability(region, server)) {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>          unassignedRegions.add(region);<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>        } else {<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>          serverRegions.add(region);<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>          cluster.doAssignRegion(region, server);<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>        }<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>      }<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>      assignments.put(server, serverRegions);<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>      regionIdx++;<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>  protected Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getRegionAssignmentsByServer(<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>    Collection&lt;RegionInfo&gt; regions) {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    if (this.services != null &amp;&amp; this.services.getAssignmentManager() != null) {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      return this.services.getAssignmentManager().getSnapShotOfAssignment(regions);<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>    } else {<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      return new HashMap&lt;&gt;();<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>    }<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>  }<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span><a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>  @Override<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>  public void onConfigurationChange(Configuration conf) {<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">1545</span>  public boolean isStopped() {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>    return stopped;<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>  @Override<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>  public void stop(String why) {<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>    LOG.info("Load Balancer stop requested: "+why);<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>    stopped = true;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>  }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span><a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>  /**<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>   * Used to assign a single region to a random server.<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>   */<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>  private ServerName randomAssignment(Cluster cluster, RegionInfo regionInfo,<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>      List&lt;ServerName&gt; servers) {<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>    int numServers = servers.size(); // servers is not null, numServers &gt; 1<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>    ServerName sn = null;<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>    final int maxIterations = numServers * 4;<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>    int iterations = 0;<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>    List&lt;ServerName&gt; usedSNs = new ArrayList&lt;&gt;(servers.size());<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>    do {<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>      int i = RANDOM.nextInt(numServers);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      sn = servers.get(i);<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>      if (!usedSNs.contains(sn)) {<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>        usedSNs.add(sn);<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>      }<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>    } while (cluster.wouldLowerAvailability(regionInfo, sn)<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>        &amp;&amp; iterations++ &lt; maxIterations);<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>    if (iterations &gt;= maxIterations) {<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>      // We have reached the max. Means the servers that we collected is still lowering the<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      // availability<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      for (ServerName unusedServer : servers) {<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>        if (!usedSNs.contains(unusedServer)) {<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>          // check if any other unused server is there for us to use.<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>          // If so use it. Else we have not other go but to go with one of them<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>          if (!cluster.wouldLowerAvailability(regionInfo, unusedServer)) {<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>            sn = unusedServer;<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>            break;<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>          }<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      }<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>    }<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>    cluster.doAssignRegion(regionInfo, sn);<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>    return sn;<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>  }<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>   * Round robin a list of regions to a list of servers<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>   */<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>  private void roundRobinAssignment(Cluster cluster, List&lt;RegionInfo&gt; regions,<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>      List&lt;RegionInfo&gt; unassignedRegions, List&lt;ServerName&gt; servers,<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignments) {<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span><a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>    int numServers = servers.size();<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    int numRegions = regions.size();<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    int max = (int) Math.ceil((float) numRegions / numServers);<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    int serverIdx = 0;<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    if (numServers &gt; 1) {<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>      serverIdx = RANDOM.nextInt(numServers);<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    }<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>    int regionIdx = 0;<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span><a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>    for (int j = 0; j &lt; numServers; j++) {<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>      ServerName server = servers.get((j + serverIdx) % numServers);<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>      List&lt;RegionInfo&gt; serverRegions = new ArrayList&lt;&gt;(max);<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>      for (int i = regionIdx; i &lt; numRegions; i += numServers) {<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>        RegionInfo region = regions.get(i % numRegions);<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>        if (cluster.wouldLowerAvailability(region, server)) {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>          unassignedRegions.add(region);<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>        } else {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>          serverRegions.add(region);<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>          cluster.doAssignRegion(region, server);<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>      assignments.put(server, serverRegions);<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>      regionIdx++;<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>  protected Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getRegionAssignmentsByServer(<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    Collection&lt;RegionInfo&gt; regions) {<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>    if (this.services != null &amp;&amp; this.services.getAssignmentManager() != null) {<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      return this.services.getAssignmentManager().getSnapShotOfAssignment(regions);<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>    } else {<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      return new HashMap&lt;&gt;();<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>  public void onConfigurationChange(Configuration conf) {<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html
index d974429..e478f39 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html
@@ -42,32 +42,32 @@
 <span class="sourceLineNo">034</span>import java.util.TreeMap;<a name="line.34"></a>
 <span class="sourceLineNo">035</span>import java.util.function.Predicate;<a name="line.35"></a>
 <span class="sourceLineNo">036</span>import java.util.stream.Collectors;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.commons.lang3.NotImplementedException;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.conf.Configuration;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HConstants;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HDFSBlocksDistribution;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.ServerMetrics;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ServerName;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.TableName;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.RackManager;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster.Action.Type;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.slf4j.Logger;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.slf4j.LoggerFactory;<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hbase.thirdparty.com.google.common.collect.ArrayListMultimap;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.62"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.commons.lang3.NotImplementedException;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HConstants;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HDFSBlocksDistribution;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ServerMetrics;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.ServerName;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.TableName;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.RackManager;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster.Action.Type;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hbase.thirdparty.com.google.common.collect.ArrayListMultimap;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.slf4j.Logger;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.slf4j.LoggerFactory;<a name="line.62"></a>
 <span class="sourceLineNo">063</span><a name="line.63"></a>
 <span class="sourceLineNo">064</span>/**<a name="line.64"></a>
 <span class="sourceLineNo">065</span> * The base class for load balancers. It provides the the functions used to by<a name="line.65"></a>
@@ -1462,181 +1462,186 @@
 <span class="sourceLineNo">1454</span>    for (Map.Entry&lt;RegionInfo, ServerName&gt; entry : regions.entrySet()) {<a name="line.1454"></a>
 <span class="sourceLineNo">1455</span>      RegionInfo region = entry.getKey();<a name="line.1455"></a>
 <span class="sourceLineNo">1456</span>      ServerName oldServerName = entry.getValue();<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>      if (!hasRegionReplica &amp;&amp; !RegionReplicaUtil.isDefaultReplica(region)) {<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>        hasRegionReplica = true;<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>      }<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>      List&lt;ServerName&gt; localServers = new ArrayList&lt;&gt;();<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>      if (oldServerName != null) {<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>        localServers = serversByHostname.get(oldServerName.getHostnameLowerCase());<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>      }<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>      if (localServers.isEmpty()) {<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>        // No servers on the new cluster match up with this hostname, assign randomly, later.<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>        randomAssignRegions.add(region);<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>        if (oldServerName != null) {<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>          oldHostsNoLongerPresent.add(oldServerName.getHostnameLowerCase());<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>        }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>      } else if (localServers.size() == 1) {<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>        // the usual case - one new server on same host<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>        ServerName target = localServers.get(0);<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>        assignments.get(target).add(region);<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>        numRetainedAssigments++;<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      } else {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        // multiple new servers in the cluster on this same host<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>        if (localServers.contains(oldServerName)) {<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>          assignments.get(oldServerName).add(region);<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>          numRetainedAssigments++;<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>        } else {<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>          ServerName target = null;<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>          for (ServerName tmp : localServers) {<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>            if (tmp.getPort() == oldServerName.getPort()) {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>              target = tmp;<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>              assignments.get(tmp).add(region);<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>              numRetainedAssigments++;<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>              break;<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>            }<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>          }<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>          if (target == null) {<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>            randomAssignRegions.add(region);<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>          }<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>    // If servers from prior assignment aren't present, then lets do randomAssignment on regions.<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>    if (randomAssignRegions.size() &gt; 0) {<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>      Cluster cluster = createCluster(servers, regions.keySet(), hasRegionReplica);<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>      for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : assignments.entrySet()) {<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>        ServerName sn = entry.getKey();<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>        for (RegionInfo region : entry.getValue()) {<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>          cluster.doAssignRegion(region, sn);<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>        }<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>      }<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>      for (RegionInfo region : randomAssignRegions) {<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>        ServerName target = randomAssignment(cluster, region, servers);<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>        assignments.get(target).add(region);<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>        numRandomAssignments++;<a name="line.1509"></a>
+<span class="sourceLineNo">1457</span>      // In the current set of regions even if one has region replica let us go with<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>      // getting the entire snapshot<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>      if (this.services != null &amp;&amp; this.services.getAssignmentManager() != null) { // for tests<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>        if (!hasRegionReplica &amp;&amp; this.services.getAssignmentManager().getRegionStates()<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>            .isReplicaAvailableForRegion(region)) {<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>          hasRegionReplica = true;<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>        }<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>      }<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>      List&lt;ServerName&gt; localServers = new ArrayList&lt;&gt;();<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>      if (oldServerName != null) {<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>        localServers = serversByHostname.get(oldServerName.getHostnameLowerCase());<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>      }<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>      if (localServers.isEmpty()) {<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>        // No servers on the new cluster match up with this hostname, assign randomly, later.<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>        randomAssignRegions.add(region);<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>        if (oldServerName != null) {<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>          oldHostsNoLongerPresent.add(oldServerName.getHostnameLowerCase());<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>        }<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>      } else if (localServers.size() == 1) {<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>        // the usual case - one new server on same host<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>        ServerName target = localServers.get(0);<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>        assignments.get(target).add(region);<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>        numRetainedAssigments++;<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>      } else {<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>        // multiple new servers in the cluster on this same host<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>        if (localServers.contains(oldServerName)) {<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>          assignments.get(oldServerName).add(region);<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>          numRetainedAssigments++;<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>        } else {<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>          ServerName target = null;<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>          for (ServerName tmp : localServers) {<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>            if (tmp.getPort() == oldServerName.getPort()) {<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>              target = tmp;<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>              assignments.get(tmp).add(region);<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>              numRetainedAssigments++;<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>              break;<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>          if (target == null) {<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>            randomAssignRegions.add(region);<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>          }<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>        }<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>      }<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>    }<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span><a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>    // If servers from prior assignment aren't present, then lets do randomAssignment on regions.<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>    if (randomAssignRegions.size() &gt; 0) {<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>      Cluster cluster = createCluster(servers, regions.keySet(), hasRegionReplica);<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>      for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : assignments.entrySet()) {<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>        ServerName sn = entry.getKey();<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>        for (RegionInfo region : entry.getValue()) {<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>          cluster.doAssignRegion(region, sn);<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>        }<a name="line.1509"></a>
 <span class="sourceLineNo">1510</span>      }<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>    }<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span><a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>    String randomAssignMsg = "";<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    if (numRandomAssignments &gt; 0) {<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>      randomAssignMsg =<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>          numRandomAssignments + " regions were assigned "<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>              + "to random hosts, since the old hosts for these regions are no "<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>              + "longer present in the cluster. These hosts were:\n  "<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>              + Joiner.on("\n  ").join(oldHostsNoLongerPresent);<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>    LOG.info("Reassigned " + regions.size() + " regions. " + numRetainedAssigments<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>        + " retained the pre-restart assignment. " + randomAssignMsg);<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>    return assignments;<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>  }<a name="line.1525"></a>
+<span class="sourceLineNo">1511</span>      for (RegionInfo region : randomAssignRegions) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>        ServerName target = randomAssignment(cluster, region, servers);<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        assignments.get(target).add(region);<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>        numRandomAssignments++;<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>      }<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>    }<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span><a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>    String randomAssignMsg = "";<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    if (numRandomAssignments &gt; 0) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>      randomAssignMsg =<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          numRandomAssignments + " regions were assigned "<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>              + "to random hosts, since the old hosts for these regions are no "<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>              + "longer present in the cluster. These hosts were:\n  "<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>              + Joiner.on("\n  ").join(oldHostsNoLongerPresent);<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>    }<a name="line.1525"></a>
 <span class="sourceLineNo">1526</span><a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>  @Override<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>  public void initialize() throws HBaseIOException{<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>  }<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span><a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>  @Override<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>  public void regionOnline(RegionInfo regionInfo, ServerName sn) {<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>  }<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>  @Override<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>  public void regionOffline(RegionInfo regionInfo) {<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 boolean isStopped() {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>    return stopped;<a name="line.1541"></a>
+<span class="sourceLineNo">1527</span>    LOG.info("Reassigned " + regions.size() + " regions. " + numRetainedAssigments<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>        + " retained the pre-restart assignment. " + randomAssignMsg);<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>    return assignments;<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>  }<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span><a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>  @Override<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>  public void initialize() throws HBaseIOException{<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>  }<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span><a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>  @Override<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>  public void regionOnline(RegionInfo regionInfo, ServerName sn) {<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>  }<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span><a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>  @Override<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>  public void regionOffline(RegionInfo regionInfo) {<a name="line.1541"></a>
 <span class="sourceLineNo">1542</span>  }<a name="line.1542"></a>
 <span class="sourceLineNo">1543</span><a name="line.1543"></a>
 <span class="sourceLineNo">1544</span>  @Override<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>  public void stop(String why) {<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>    LOG.info("Load Balancer stop requested: "+why);<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>    stopped = true;<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>  /**<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>   * Used to assign a single region to a random server.<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>   */<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>  private ServerName randomAssignment(Cluster cluster, RegionInfo regionInfo,<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>      List&lt;ServerName&gt; servers) {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>    int numServers = servers.size(); // servers is not null, numServers &gt; 1<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>    ServerName sn = null;<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>    final int maxIterations = numServers * 4;<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>    int iterations = 0;<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>    List&lt;ServerName&gt; usedSNs = new ArrayList&lt;&gt;(servers.size());<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>    do {<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      int i = RANDOM.nextInt(numServers);<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>      sn = servers.get(i);<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      if (!usedSNs.contains(sn)) {<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        usedSNs.add(sn);<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      }<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>    } while (cluster.wouldLowerAvailability(regionInfo, sn)<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>        &amp;&amp; iterations++ &lt; maxIterations);<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>    if (iterations &gt;= maxIterations) {<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      // We have reached the max. Means the servers that we collected is still lowering the<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      // availability<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      for (ServerName unusedServer : servers) {<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>        if (!usedSNs.contains(unusedServer)) {<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>          // check if any other unused server is there for us to use.<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>          // If so use it. Else we have not other go but to go with one of them<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>          if (!cluster.wouldLowerAvailability(regionInfo, unusedServer)) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>            sn = unusedServer;<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>            break;<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>      }<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>    }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>    cluster.doAssignRegion(regionInfo, sn);<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    return sn;<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>  }<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span><a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>  /**<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>   * Round robin a list of regions to a list of servers<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>   */<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>  private void roundRobinAssignment(Cluster cluster, List&lt;RegionInfo&gt; regions,<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      List&lt;RegionInfo&gt; unassignedRegions, List&lt;ServerName&gt; servers,<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignments) {<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span><a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>    int numServers = servers.size();<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    int numRegions = regions.size();<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    int max = (int) Math.ceil((float) numRegions / numServers);<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    int serverIdx = 0;<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    if (numServers &gt; 1) {<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>      serverIdx = RANDOM.nextInt(numServers);<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>    }<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>    int regionIdx = 0;<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span><a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    for (int j = 0; j &lt; numServers; j++) {<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>      ServerName server = servers.get((j + serverIdx) % numServers);<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>      List&lt;RegionInfo&gt; serverRegions = new ArrayList&lt;&gt;(max);<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>      for (int i = regionIdx; i &lt; numRegions; i += numServers) {<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>        RegionInfo region = regions.get(i % numRegions);<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>        if (cluster.wouldLowerAvailability(region, server)) {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>          unassignedRegions.add(region);<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>        } else {<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>          serverRegions.add(region);<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>          cluster.doAssignRegion(region, server);<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>        }<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>      }<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>      assignments.put(server, serverRegions);<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>      regionIdx++;<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>  protected Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getRegionAssignmentsByServer(<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>    Collection&lt;RegionInfo&gt; regions) {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    if (this.services != null &amp;&amp; this.services.getAssignmentManager() != null) {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      return this.services.getAssignmentManager().getSnapShotOfAssignment(regions);<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>    } else {<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      return new HashMap&lt;&gt;();<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>    }<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>  }<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span><a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>  @Override<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>  public void onConfigurationChange(Configuration conf) {<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">1545</span>  public boolean isStopped() {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>    return stopped;<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>  @Override<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>  public void stop(String why) {<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>    LOG.info("Load Balancer stop requested: "+why);<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>    stopped = true;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>  }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span><a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>  /**<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>   * Used to assign a single region to a random server.<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>   */<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>  private ServerName randomAssignment(Cluster cluster, RegionInfo regionInfo,<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>      List&lt;ServerName&gt; servers) {<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>    int numServers = servers.size(); // servers is not null, numServers &gt; 1<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>    ServerName sn = null;<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>    final int maxIterations = numServers * 4;<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>    int iterations = 0;<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>    List&lt;ServerName&gt; usedSNs = new ArrayList&lt;&gt;(servers.size());<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>    do {<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>      int i = RANDOM.nextInt(numServers);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      sn = servers.get(i);<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>      if (!usedSNs.contains(sn)) {<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>        usedSNs.add(sn);<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>      }<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>    } while (cluster.wouldLowerAvailability(regionInfo, sn)<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>        &amp;&amp; iterations++ &lt; maxIterations);<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>    if (iterations &gt;= maxIterations) {<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>      // We have reached the max. Means the servers that we collected is still lowering the<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      // availability<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      for (ServerName unusedServer : servers) {<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>        if (!usedSNs.contains(unusedServer)) {<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>          // check if any other unused server is there for us to use.<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>          // If so use it. Else we have not other go but to go with one of them<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>          if (!cluster.wouldLowerAvailability(regionInfo, unusedServer)) {<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>            sn = unusedServer;<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>            break;<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>          }<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      }<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>    }<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>    cluster.doAssignRegion(regionInfo, sn);<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>    return sn;<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>  }<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>   * Round robin a list of regions to a list of servers<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>   */<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>  private void roundRobinAssignment(Cluster cluster, List&lt;RegionInfo&gt; regions,<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>      List&lt;RegionInfo&gt; unassignedRegions, List&lt;ServerName&gt; servers,<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignments) {<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span><a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>    int numServers = servers.size();<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    int numRegions = regions.size();<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    int max = (int) Math.ceil((float) numRegions / numServers);<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    int serverIdx = 0;<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    if (numServers &gt; 1) {<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>      serverIdx = RANDOM.nextInt(numServers);<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    }<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>    int regionIdx = 0;<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span><a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>    for (int j = 0; j &lt; numServers; j++) {<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>      ServerName server = servers.get((j + serverIdx) % numServers);<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>      List&lt;RegionInfo&gt; serverRegions = new ArrayList&lt;&gt;(max);<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>      for (int i = regionIdx; i &lt; numRegions; i += numServers) {<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>        RegionInfo region = regions.get(i % numRegions);<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>        if (cluster.wouldLowerAvailability(region, server)) {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>          unassignedRegions.add(region);<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>        } else {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>          serverRegions.add(region);<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>          cluster.doAssignRegion(region, server);<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>      assignments.put(server, serverRegions);<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>      regionIdx++;<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>  protected Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getRegionAssignmentsByServer(<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    Collection&lt;RegionInfo&gt; regions) {<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>    if (this.services != null &amp;&amp; this.services.getAssignmentManager() != null) {<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      return this.services.getAssignmentManager().getSnapShotOfAssignment(regions);<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>    } else {<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      return new HashMap&lt;&gt;();<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>  public void onConfigurationChange(Configuration conf) {<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>
 
 
 


[04/18] hbase-site git commit: Published site at cebb725a9f4ab8dd9d3f306d21d53d6f56161c51.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/testdevapidocs/src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html
index 2e8f503..f0adcdb 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.html
@@ -431,464 +431,465 @@
 <span class="sourceLineNo">423</span>        try (Connection conn = ConnectionFactory.createConnection(conf)) {<a name="line.423"></a>
 <span class="sourceLineNo">424</span>          VisibilityClient.setAuths(conn, auths, user);<a name="line.424"></a>
 <span class="sourceLineNo">425</span>        } catch (Throwable e) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>        return null;<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      }<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    };<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    SUPERUSER.runAs(action);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    try (Table ht = TEST_UTIL.getConnection().getTable(LABELS_TABLE_NAME)) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      Scan scan = new Scan();<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      scan.setAuthorizations(new Authorizations(VisibilityUtils.SYSTEM_LABEL));<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      ResultScanner scanner = ht.getScanner(scan);<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      Result result = null;<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      List&lt;Result&gt; results = new ArrayList&lt;&gt;();<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      while ((result = scanner.next()) != null) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        results.add(result);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      }<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      List&lt;String&gt; auths = extractAuths(user, results);<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      assertTrue(auths.contains(SECRET));<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      assertTrue(auths.contains(CONFIDENTIAL));<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      assertEquals(2, auths.size());<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    }<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>    action = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      @Override<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      public Void run() throws Exception {<a name="line.448"></a>
-<span class="sourceLineNo">449</span>        GetAuthsResponse authsResponse = null;<a name="line.449"></a>
-<span class="sourceLineNo">450</span>        try (Connection conn = ConnectionFactory.createConnection(conf)) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>          authsResponse = VisibilityClient.getAuths(conn, user);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        } catch (Throwable e) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>          fail("Should not have failed");<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        }<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        List&lt;String&gt; authsList = new ArrayList&lt;&gt;(authsResponse.getAuthList().size());<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        for (ByteString authBS : authsResponse.getAuthList()) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>          authsList.add(Bytes.toString(authBS.toByteArray()));<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        }<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        assertEquals(2, authsList.size());<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        assertTrue(authsList.contains(SECRET));<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        assertTrue(authsList.contains(CONFIDENTIAL));<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        return null;<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    };<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    SUPERUSER.runAs(action);<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>    // Try doing setAuths once again and there should not be any duplicates<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    action = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      @Override<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      public Void run() throws Exception {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        String[] auths1 = { SECRET, CONFIDENTIAL };<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        GetAuthsResponse authsResponse = null;<a name="line.472"></a>
-<span class="sourceLineNo">473</span>        try (Connection conn = ConnectionFactory.createConnection(conf)) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>          VisibilityClient.setAuths(conn, auths1, user);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>          try {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>            authsResponse = VisibilityClient.getAuths(conn, user);<a name="line.476"></a>
-<span class="sourceLineNo">477</span>          } catch (Throwable e) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>            fail("Should not have failed");<a name="line.478"></a>
-<span class="sourceLineNo">479</span>          }<a name="line.479"></a>
-<span class="sourceLineNo">480</span>        } catch (Throwable e) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>        }<a name="line.481"></a>
-<span class="sourceLineNo">482</span>        List&lt;String&gt; authsList = new ArrayList&lt;&gt;(authsResponse.getAuthList().size());<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        for (ByteString authBS : authsResponse.getAuthList()) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>          authsList.add(Bytes.toString(authBS.toByteArray()));<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        }<a name="line.485"></a>
-<span class="sourceLineNo">486</span>        assertEquals(2, authsList.size());<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        assertTrue(authsList.contains(SECRET));<a name="line.487"></a>
-<span class="sourceLineNo">488</span>        assertTrue(authsList.contains(CONFIDENTIAL));<a name="line.488"></a>
-<span class="sourceLineNo">489</span>        return null;<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      }<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    };<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    SUPERUSER.runAs(action);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>  }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span>  protected List&lt;String&gt; extractAuths(String user, List&lt;Result&gt; results) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    List&lt;String&gt; auths = new ArrayList&lt;&gt;();<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    for (Result result : results) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      Cell labelCell = result.getColumnLatestCell(LABELS_TABLE_FAMILY, LABEL_QUALIFIER);<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      Cell userAuthCell = result.getColumnLatestCell(LABELS_TABLE_FAMILY, Bytes.toBytes(user));<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      if (userAuthCell != null) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        auths.add(Bytes.toString(labelCell.getValueArray(), labelCell.getValueOffset(),<a name="line.501"></a>
-<span class="sourceLineNo">502</span>            labelCell.getValueLength()));<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      }<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    }<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    return auths;<a name="line.505"></a>
-<span class="sourceLineNo">506</span>  }<a name="line.506"></a>
-<span class="sourceLineNo">507</span><a name="line.507"></a>
-<span class="sourceLineNo">508</span>  @Test<a name="line.508"></a>
-<span class="sourceLineNo">509</span>  public void testClearUserAuths() throws Throwable {<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    PrivilegedExceptionAction&lt;Void&gt; action = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      @Override<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      public Void run() throws Exception {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>        String[] auths = { SECRET, CONFIDENTIAL, PRIVATE };<a name="line.513"></a>
-<span class="sourceLineNo">514</span>        String user = "testUser";<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        try (Connection conn = ConnectionFactory.createConnection(conf)) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>          VisibilityClient.setAuths(conn, auths, user);<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        } catch (Throwable e) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>          fail("Should not have failed");<a name="line.518"></a>
-<span class="sourceLineNo">519</span>        }<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        // Removing the auths for SECRET and CONFIDENTIAL for the user.<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        // Passing a non existing auth also.<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        auths = new String[] { SECRET, PUBLIC, CONFIDENTIAL };<a name="line.522"></a>
-<span class="sourceLineNo">523</span>        VisibilityLabelsResponse response = null;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>        try (Connection conn = ConnectionFactory.createConnection(conf)) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>          response = VisibilityClient.clearAuths(conn, auths, user);<a name="line.525"></a>
-<span class="sourceLineNo">526</span>        } catch (Throwable e) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>          fail("Should not have failed");<a name="line.527"></a>
-<span class="sourceLineNo">528</span>        }<a name="line.528"></a>
-<span class="sourceLineNo">529</span>        List&lt;RegionActionResult&gt; resultList = response.getResultList();<a name="line.529"></a>
-<span class="sourceLineNo">530</span>        assertEquals(3, resultList.size());<a name="line.530"></a>
-<span class="sourceLineNo">531</span>        assertTrue(resultList.get(0).getException().getValue().isEmpty());<a name="line.531"></a>
-<span class="sourceLineNo">532</span>        assertEquals("org.apache.hadoop.hbase.DoNotRetryIOException",<a name="line.532"></a>
-<span class="sourceLineNo">533</span>            resultList.get(1).getException().getName());<a name="line.533"></a>
-<span class="sourceLineNo">534</span>        assertTrue(Bytes.toString(resultList.get(1).getException().getValue().toByteArray())<a name="line.534"></a>
-<span class="sourceLineNo">535</span>            .contains(<a name="line.535"></a>
-<span class="sourceLineNo">536</span>                "org.apache.hadoop.hbase.security.visibility.InvalidLabelException: "<a name="line.536"></a>
-<span class="sourceLineNo">537</span>                    + "Label 'public' is not set for the user testUser"));<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        assertTrue(resultList.get(2).getException().getValue().isEmpty());<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>             Table ht = connection.getTable(LABELS_TABLE_NAME)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>          ResultScanner scanner = ht.getScanner(new Scan());<a name="line.541"></a>
-<span class="sourceLineNo">542</span>          Result result = null;<a name="line.542"></a>
-<span class="sourceLineNo">543</span>          List&lt;Result&gt; results = new ArrayList&lt;&gt;();<a name="line.543"></a>
-<span class="sourceLineNo">544</span>          while ((result = scanner.next()) != null) {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>            results.add(result);<a name="line.545"></a>
-<span class="sourceLineNo">546</span>          }<a name="line.546"></a>
-<span class="sourceLineNo">547</span>          List&lt;String&gt; curAuths = extractAuths(user, results);<a name="line.547"></a>
-<span class="sourceLineNo">548</span>          assertTrue(curAuths.contains(PRIVATE));<a name="line.548"></a>
-<span class="sourceLineNo">549</span>          assertEquals(1, curAuths.size());<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>        GetAuthsResponse authsResponse = null;<a name="line.552"></a>
-<span class="sourceLineNo">553</span>        try (Connection conn = ConnectionFactory.createConnection(conf)) {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>          authsResponse = VisibilityClient.getAuths(conn, user);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>        } catch (Throwable e) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>          fail("Should not have failed");<a name="line.556"></a>
-<span class="sourceLineNo">557</span>        }<a name="line.557"></a>
-<span class="sourceLineNo">558</span>        List&lt;String&gt; authsList = new ArrayList&lt;&gt;(authsResponse.getAuthList().size());<a name="line.558"></a>
-<span class="sourceLineNo">559</span>        for (ByteString authBS : authsResponse.getAuthList()) {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>          authsList.add(Bytes.toString(authBS.toByteArray()));<a name="line.560"></a>
-<span class="sourceLineNo">561</span>        }<a name="line.561"></a>
-<span class="sourceLineNo">562</span>        assertEquals(1, authsList.size());<a name="line.562"></a>
-<span class="sourceLineNo">563</span>        assertTrue(authsList.contains(PRIVATE));<a name="line.563"></a>
-<span class="sourceLineNo">564</span>        return null;<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>    SUPERUSER.runAs(action);<a name="line.567"></a>
-<span class="sourceLineNo">568</span>  }<a name="line.568"></a>
-<span class="sourceLineNo">569</span><a name="line.569"></a>
-<span class="sourceLineNo">570</span>  @Test<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  public void testLabelsWithCheckAndPut() throws Throwable {<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    TableName tableName = TableName.valueOf(TEST_NAME.getMethodName());<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    try (Table table = TEST_UTIL.createTable(tableName, fam)) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>      byte[] row1 = Bytes.toBytes("row1");<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      Put put = new Put(row1);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      put.addColumn(fam, qual, HConstants.LATEST_TIMESTAMP, value);<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      put.setCellVisibility(new CellVisibility(SECRET + " &amp; " + CONFIDENTIAL));<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      table.checkAndMutate(row1, fam).qualifier(qual).ifNotExists().thenPut(put);<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      byte[] row2 = Bytes.toBytes("row2");<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      put = new Put(row2);<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      put.addColumn(fam, qual, HConstants.LATEST_TIMESTAMP, value);<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      put.setCellVisibility(new CellVisibility(SECRET));<a name="line.582"></a>
-<span class="sourceLineNo">583</span>      table.checkAndMutate(row2, fam).qualifier(qual).ifNotExists().thenPut(put);<a name="line.583"></a>
-<span class="sourceLineNo">584</span><a name="line.584"></a>
-<span class="sourceLineNo">585</span>      Scan scan = new Scan();<a name="line.585"></a>
-<span class="sourceLineNo">586</span>      scan.setAuthorizations(new Authorizations(SECRET));<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      ResultScanner scanner = table.getScanner(scan);<a name="line.587"></a>
-<span class="sourceLineNo">588</span>      Result result = scanner.next();<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      assertTrue(!result.isEmpty());<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      assertTrue(Bytes.equals(row2, result.getRow()));<a name="line.590"></a>
-<span class="sourceLineNo">591</span>      result = scanner.next();<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      assertNull(result);<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    }<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>  @Test<a name="line.596"></a>
-<span class="sourceLineNo">597</span>  public void testLabelsWithIncrement() throws Throwable {<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    TableName tableName = TableName.valueOf(TEST_NAME.getMethodName());<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    try (Table table = TEST_UTIL.createTable(tableName, fam)) {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      byte[] row1 = Bytes.toBytes("row1");<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      byte[] val = Bytes.toBytes(1L);<a name="line.601"></a>
-<span class="sourceLineNo">602</span>      Put put = new Put(row1);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      put.addColumn(fam, qual, HConstants.LATEST_TIMESTAMP, val);<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      put.setCellVisibility(new CellVisibility(SECRET + " &amp; " + CONFIDENTIAL));<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      table.put(put);<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      Get get = new Get(row1);<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      get.setAuthorizations(new Authorizations(SECRET));<a name="line.607"></a>
-<span class="sourceLineNo">608</span>      Result result = table.get(get);<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      assertTrue(result.isEmpty());<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      table.incrementColumnValue(row1, fam, qual, 2L);<a name="line.610"></a>
-<span class="sourceLineNo">611</span>      result = table.get(get);<a name="line.611"></a>
-<span class="sourceLineNo">612</span>      assertTrue(result.isEmpty());<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      Increment increment = new Increment(row1);<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      increment.addColumn(fam, qual, 2L);<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      increment.setCellVisibility(new CellVisibility(SECRET));<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      table.increment(increment);<a name="line.616"></a>
-<span class="sourceLineNo">617</span>      result = table.get(get);<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      assertTrue(!result.isEmpty());<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><a name="line.621"></a>
-<span class="sourceLineNo">622</span>  @Test<a name="line.622"></a>
-<span class="sourceLineNo">623</span>  public void testLabelsWithAppend() throws Throwable {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    TableName tableName = TableName.valueOf(TEST_NAME.getMethodName());<a name="line.624"></a>
-<span class="sourceLineNo">625</span>    try (Table table = TEST_UTIL.createTable(tableName, fam)) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>      byte[] row1 = Bytes.toBytes("row1");<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      byte[] val = Bytes.toBytes("a");<a name="line.627"></a>
-<span class="sourceLineNo">628</span>      Put put = new Put(row1);<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      put.addColumn(fam, qual, HConstants.LATEST_TIMESTAMP, val);<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      put.setCellVisibility(new CellVisibility(SECRET + " &amp; " + CONFIDENTIAL));<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      table.put(put);<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      Get get = new Get(row1);<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      get.setAuthorizations(new Authorizations(SECRET));<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      Result result = table.get(get);<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      assertTrue(result.isEmpty());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      Append append = new Append(row1);<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      append.addColumn(fam, qual, Bytes.toBytes("b"));<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      table.append(append);<a name="line.638"></a>
-<span class="sourceLineNo">639</span>      result = table.get(get);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      assertTrue(result.isEmpty());<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      append = new Append(row1);<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      append.addColumn(fam, qual, Bytes.toBytes("c"));<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      append.setCellVisibility(new CellVisibility(SECRET));<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      table.append(append);<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      result = table.get(get);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      assertTrue(!result.isEmpty());<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><a name="line.649"></a>
-<span class="sourceLineNo">650</span>  @Test<a name="line.650"></a>
-<span class="sourceLineNo">651</span>  public void testUserShouldNotDoDDLOpOnLabelsTable() throws Exception {<a name="line.651"></a>
-<span class="sourceLineNo">652</span>    Admin admin = TEST_UTIL.getAdmin();<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    try {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      admin.disableTable(LABELS_TABLE_NAME);<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      fail("Lables table should not get disabled by user.");<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    } catch (Exception e) {<a name="line.656"></a>
-<span class="sourceLineNo">657</span>    }<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    try {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>      admin.deleteTable(LABELS_TABLE_NAME);<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      fail("Lables table should not get disabled by user.");<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    } catch (Exception e) {<a name="line.661"></a>
-<span class="sourceLineNo">662</span>    }<a name="line.662"></a>
-<span class="sourceLineNo">663</span>    try {<a name="line.663"></a>
-<span class="sourceLineNo">664</span>      HColumnDescriptor hcd = new HColumnDescriptor("testFamily");<a name="line.664"></a>
-<span class="sourceLineNo">665</span>      admin.addColumnFamily(LABELS_TABLE_NAME, hcd);<a name="line.665"></a>
-<span class="sourceLineNo">666</span>      fail("Lables table should not get altered by user.");<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    } catch (Exception e) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    }<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    try {<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      admin.deleteColumnFamily(LABELS_TABLE_NAME, VisibilityConstants.LABELS_TABLE_FAMILY);<a name="line.670"></a>
-<span class="sourceLineNo">671</span>      fail("Lables table should not get altered by user.");<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    } catch (Exception e) {<a name="line.672"></a>
-<span class="sourceLineNo">673</span>    }<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    try {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>      HColumnDescriptor hcd = new HColumnDescriptor(VisibilityConstants.LABELS_TABLE_FAMILY);<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      hcd.setBloomFilterType(BloomType.ROWCOL);<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      admin.modifyColumnFamily(LABELS_TABLE_NAME, hcd);<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      fail("Lables table should not get altered by user.");<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    } catch (Exception e) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>    }<a name="line.680"></a>
-<span class="sourceLineNo">681</span>    try {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      HTableDescriptor htd = new HTableDescriptor(LABELS_TABLE_NAME);<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      htd.addFamily(new HColumnDescriptor("f1"));<a name="line.683"></a>
-<span class="sourceLineNo">684</span>      htd.addFamily(new HColumnDescriptor("f2"));<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      admin.modifyTable(LABELS_TABLE_NAME, htd);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      fail("Lables table should not get altered by user.");<a name="line.686"></a>
-<span class="sourceLineNo">687</span>    } catch (Exception e) {<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>  @Test<a name="line.691"></a>
-<span class="sourceLineNo">692</span>  public void testMultipleVersions() throws Exception {<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    final byte[] r1 = Bytes.toBytes("row1");<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    final byte[] r2 = Bytes.toBytes("row2");<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    final byte[] v1 = Bytes.toBytes("100");<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    final byte[] v2 = Bytes.toBytes("101");<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    final byte[] fam2 = Bytes.toBytes("info2");<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    final byte[] qual2 = Bytes.toBytes("qual2");<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    TableName tableName = TableName.valueOf(TEST_NAME.getMethodName());<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    HTableDescriptor desc = new HTableDescriptor(tableName);<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    HColumnDescriptor col = new HColumnDescriptor(fam);// Default max versions is 1.<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    desc.addFamily(col);<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    col = new HColumnDescriptor(fam2);<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    col.setMaxVersions(5);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    desc.addFamily(col);<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    TEST_UTIL.getAdmin().createTable(desc);<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      Put put = new Put(r1);<a name="line.708"></a>
-<span class="sourceLineNo">709</span>      put.addColumn(fam, qual, 3L, v1);<a name="line.709"></a>
-<span class="sourceLineNo">710</span>      put.addColumn(fam, qual2, 3L, v1);<a name="line.710"></a>
-<span class="sourceLineNo">711</span>      put.addColumn(fam2, qual, 3L, v1);<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      put.addColumn(fam2, qual2, 3L, v1);<a name="line.712"></a>
-<span class="sourceLineNo">713</span>      put.setCellVisibility(new CellVisibility(SECRET));<a name="line.713"></a>
-<span class="sourceLineNo">714</span>      table.put(put);<a name="line.714"></a>
-<span class="sourceLineNo">715</span>      put = new Put(r1);<a name="line.715"></a>
-<span class="sourceLineNo">716</span>      put.addColumn(fam, qual, 4L, v2);<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      put.addColumn(fam, qual2, 4L, v2);<a name="line.717"></a>
-<span class="sourceLineNo">718</span>      put.addColumn(fam2, qual, 4L, v2);<a name="line.718"></a>
-<span class="sourceLineNo">719</span>      put.addColumn(fam2, qual2, 4L, v2);<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      put.setCellVisibility(new CellVisibility(PRIVATE));<a name="line.720"></a>
-<span class="sourceLineNo">721</span>      table.put(put);<a name="line.721"></a>
-<span class="sourceLineNo">722</span><a name="line.722"></a>
-<span class="sourceLineNo">723</span>      put = new Put(r2);<a name="line.723"></a>
-<span class="sourceLineNo">724</span>      put.addColumn(fam, qual, 3L, v1);<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      put.addColumn(fam, qual2, 3L, v1);<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      put.addColumn(fam2, qual, 3L, v1);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      put.addColumn(fam2, qual2, 3L, v1);<a name="line.727"></a>
-<span class="sourceLineNo">728</span>      put.setCellVisibility(new CellVisibility(SECRET));<a name="line.728"></a>
-<span class="sourceLineNo">729</span>      table.put(put);<a name="line.729"></a>
-<span class="sourceLineNo">730</span>      put = new Put(r2);<a name="line.730"></a>
-<span class="sourceLineNo">731</span>      put.addColumn(fam, qual, 4L, v2);<a name="line.731"></a>
-<span class="sourceLineNo">732</span>      put.addColumn(fam, qual2, 4L, v2);<a name="line.732"></a>
-<span class="sourceLineNo">733</span>      put.addColumn(fam2, qual, 4L, v2);<a name="line.733"></a>
-<span class="sourceLineNo">734</span>      put.addColumn(fam2, qual2, 4L, v2);<a name="line.734"></a>
-<span class="sourceLineNo">735</span>      put.setCellVisibility(new CellVisibility(SECRET));<a name="line.735"></a>
-<span class="sourceLineNo">736</span>      table.put(put);<a name="line.736"></a>
-<span class="sourceLineNo">737</span><a name="line.737"></a>
-<span class="sourceLineNo">738</span>      Scan s = new Scan();<a name="line.738"></a>
-<span class="sourceLineNo">739</span>      s.setMaxVersions(1);<a name="line.739"></a>
-<span class="sourceLineNo">740</span>      s.setAuthorizations(new Authorizations(SECRET));<a name="line.740"></a>
-<span class="sourceLineNo">741</span>      ResultScanner scanner = table.getScanner(s);<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      Result result = scanner.next();<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      assertTrue(Bytes.equals(r1, result.getRow()));<a name="line.743"></a>
-<span class="sourceLineNo">744</span>      // for cf 'fam' max versions in HCD is 1. So the old version cells, which are having matching<a name="line.744"></a>
-<span class="sourceLineNo">745</span>      // CellVisibility with Authorizations, should not get considered in the label evaluation at<a name="line.745"></a>
-<span class="sourceLineNo">746</span>      // all.<a name="line.746"></a>
-<span class="sourceLineNo">747</span>      assertNull(result.getColumnLatestCell(fam, qual));<a name="line.747"></a>
-<span class="sourceLineNo">748</span>      assertNull(result.getColumnLatestCell(fam, qual2));<a name="line.748"></a>
-<span class="sourceLineNo">749</span>      // for cf 'fam2' max versions in HCD is &gt; 1. So we can consider the old version cells, which<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      // are having matching CellVisibility with Authorizations, in the label evaluation. It can<a name="line.750"></a>
-<span class="sourceLineNo">751</span>      // just skip those recent versions for which visibility is not there as per the new version's<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      // CellVisibility. The old versions which are having visibility can be send back<a name="line.752"></a>
-<span class="sourceLineNo">753</span>      Cell cell = result.getColumnLatestCell(fam2, qual);<a name="line.753"></a>
-<span class="sourceLineNo">754</span>      assertNotNull(cell);<a name="line.754"></a>
-<span class="sourceLineNo">755</span>      assertTrue(Bytes.equals(v1, 0, v1.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.755"></a>
-<span class="sourceLineNo">756</span>          cell.getValueLength()));<a name="line.756"></a>
-<span class="sourceLineNo">757</span>      cell = result.getColumnLatestCell(fam2, qual2);<a name="line.757"></a>
-<span class="sourceLineNo">758</span>      assertNotNull(cell);<a name="line.758"></a>
-<span class="sourceLineNo">759</span>      assertTrue(Bytes.equals(v1, 0, v1.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.759"></a>
-<span class="sourceLineNo">760</span>          cell.getValueLength()));<a name="line.760"></a>
-<span class="sourceLineNo">761</span><a name="line.761"></a>
-<span class="sourceLineNo">762</span>      result = scanner.next();<a name="line.762"></a>
-<span class="sourceLineNo">763</span>      assertTrue(Bytes.equals(r2, result.getRow()));<a name="line.763"></a>
-<span class="sourceLineNo">764</span>      cell = result.getColumnLatestCell(fam, qual);<a name="line.764"></a>
-<span class="sourceLineNo">765</span>      assertNotNull(cell);<a name="line.765"></a>
-<span class="sourceLineNo">766</span>      assertTrue(Bytes.equals(v2, 0, v2.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.766"></a>
-<span class="sourceLineNo">767</span>          cell.getValueLength()));<a name="line.767"></a>
-<span class="sourceLineNo">768</span>      cell = result.getColumnLatestCell(fam, qual2);<a name="line.768"></a>
-<span class="sourceLineNo">769</span>      assertNotNull(cell);<a name="line.769"></a>
-<span class="sourceLineNo">770</span>      assertTrue(Bytes.equals(v2, 0, v2.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.770"></a>
-<span class="sourceLineNo">771</span>          cell.getValueLength()));<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      cell = result.getColumnLatestCell(fam2, qual);<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      assertNotNull(cell);<a name="line.773"></a>
-<span class="sourceLineNo">774</span>      assertTrue(Bytes.equals(v2, 0, v2.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.774"></a>
-<span class="sourceLineNo">775</span>          cell.getValueLength()));<a name="line.775"></a>
-<span class="sourceLineNo">776</span>      cell = result.getColumnLatestCell(fam2, qual2);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>      assertNotNull(cell);<a name="line.777"></a>
-<span class="sourceLineNo">778</span>      assertTrue(Bytes.equals(v2, 0, v2.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.778"></a>
-<span class="sourceLineNo">779</span>          cell.getValueLength()));<a name="line.779"></a>
-<span class="sourceLineNo">780</span>    }<a name="line.780"></a>
-<span class="sourceLineNo">781</span>  }<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>  @Test<a name="line.783"></a>
-<span class="sourceLineNo">784</span>  public void testMutateRow() throws Exception {<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    final byte[] qual2 = Bytes.toBytes("qual2");<a name="line.785"></a>
-<span class="sourceLineNo">786</span>    TableName tableName = TableName.valueOf(TEST_NAME.getMethodName());<a name="line.786"></a>
-<span class="sourceLineNo">787</span>    HTableDescriptor desc = new HTableDescriptor(tableName);<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    HColumnDescriptor col = new HColumnDescriptor(fam);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    desc.addFamily(col);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    TEST_UTIL.getAdmin().createTable(desc);<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)){<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      Put p1 = new Put(row1);<a name="line.792"></a>
-<span class="sourceLineNo">793</span>      p1.addColumn(fam, qual, value);<a name="line.793"></a>
-<span class="sourceLineNo">794</span>      p1.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.794"></a>
-<span class="sourceLineNo">795</span><a name="line.795"></a>
-<span class="sourceLineNo">796</span>      Put p2 = new Put(row1);<a name="line.796"></a>
-<span class="sourceLineNo">797</span>      p2.addColumn(fam, qual2, value);<a name="line.797"></a>
-<span class="sourceLineNo">798</span>      p2.setCellVisibility(new CellVisibility(SECRET));<a name="line.798"></a>
-<span class="sourceLineNo">799</span><a name="line.799"></a>
-<span class="sourceLineNo">800</span>      RowMutations rm = new RowMutations(row1);<a name="line.800"></a>
-<span class="sourceLineNo">801</span>      rm.add(p1);<a name="line.801"></a>
-<span class="sourceLineNo">802</span>      rm.add(p2);<a name="line.802"></a>
-<span class="sourceLineNo">803</span><a name="line.803"></a>
-<span class="sourceLineNo">804</span>      table.mutateRow(rm);<a name="line.804"></a>
-<span class="sourceLineNo">805</span><a name="line.805"></a>
-<span class="sourceLineNo">806</span>      Get get = new Get(row1);<a name="line.806"></a>
-<span class="sourceLineNo">807</span>      get.setAuthorizations(new Authorizations(CONFIDENTIAL));<a name="line.807"></a>
-<span class="sourceLineNo">808</span>      Result result = table.get(get);<a name="line.808"></a>
-<span class="sourceLineNo">809</span>      assertTrue(result.containsColumn(fam, qual));<a name="line.809"></a>
-<span class="sourceLineNo">810</span>      assertFalse(result.containsColumn(fam, qual2));<a name="line.810"></a>
-<span class="sourceLineNo">811</span><a name="line.811"></a>
-<span class="sourceLineNo">812</span>      get.setAuthorizations(new Authorizations(SECRET));<a name="line.812"></a>
-<span class="sourceLineNo">813</span>      result = table.get(get);<a name="line.813"></a>
-<span class="sourceLineNo">814</span>      assertFalse(result.containsColumn(fam, qual));<a name="line.814"></a>
-<span class="sourceLineNo">815</span>      assertTrue(result.containsColumn(fam, qual2));<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>  @Test<a name="line.819"></a>
-<span class="sourceLineNo">820</span>  public void testFlushedFileWithVisibilityTags() throws Exception {<a name="line.820"></a>
-<span class="sourceLineNo">821</span>    final byte[] qual2 = Bytes.toBytes("qual2");<a name="line.821"></a>
-<span class="sourceLineNo">822</span>    TableName tableName = TableName.valueOf(TEST_NAME.getMethodName());<a name="line.822"></a>
-<span class="sourceLineNo">823</span>    HTableDescriptor desc = new HTableDescriptor(tableName);<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    HColumnDescriptor col = new HColumnDescriptor(fam);<a name="line.824"></a>
-<span class="sourceLineNo">825</span>    desc.addFamily(col);<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    TEST_UTIL.getAdmin().createTable(desc);<a name="line.826"></a>
-<span class="sourceLineNo">827</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.827"></a>
-<span class="sourceLineNo">828</span>      Put p1 = new Put(row1);<a name="line.828"></a>
-<span class="sourceLineNo">829</span>      p1.addColumn(fam, qual, value);<a name="line.829"></a>
-<span class="sourceLineNo">830</span>      p1.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.830"></a>
-<span class="sourceLineNo">831</span><a name="line.831"></a>
-<span class="sourceLineNo">832</span>      Put p2 = new Put(row1);<a name="line.832"></a>
-<span class="sourceLineNo">833</span>      p2.addColumn(fam, qual2, value);<a name="line.833"></a>
-<span class="sourceLineNo">834</span>      p2.setCellVisibility(new CellVisibility(SECRET));<a name="line.834"></a>
-<span class="sourceLineNo">835</span><a name="line.835"></a>
-<span class="sourceLineNo">836</span>      RowMutations rm = new RowMutations(row1);<a name="line.836"></a>
-<span class="sourceLineNo">837</span>      rm.add(p1);<a name="line.837"></a>
-<span class="sourceLineNo">838</span>      rm.add(p2);<a name="line.838"></a>
-<span class="sourceLineNo">839</span><a name="line.839"></a>
-<span class="sourceLineNo">840</span>      table.mutateRow(rm);<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    }<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    TEST_UTIL.getAdmin().flush(tableName);<a name="line.842"></a>
-<span class="sourceLineNo">843</span>    List&lt;HRegion&gt; regions = TEST_UTIL.getHBaseCluster().getRegions(tableName);<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    HStore store = regions.get(0).getStore(fam);<a name="line.844"></a>
-<span class="sourceLineNo">845</span>    Collection&lt;HStoreFile&gt; storefiles = store.getStorefiles();<a name="line.845"></a>
-<span class="sourceLineNo">846</span>    assertTrue(storefiles.size() &gt; 0);<a name="line.846"></a>
-<span class="sourceLineNo">847</span>    for (HStoreFile storeFile : storefiles) {<a name="line.847"></a>
-<span class="sourceLineNo">848</span>      assertTrue(storeFile.getReader().getHFileReader().getFileContext().isIncludesTags());<a name="line.848"></a>
-<span class="sourceLineNo">849</span>    }<a name="line.849"></a>
-<span class="sourceLineNo">850</span>  }<a name="line.850"></a>
-<span class="sourceLineNo">851</span><a name="line.851"></a>
-<span class="sourceLineNo">852</span>  static Table createTableAndWriteDataWithLabels(TableName tableName, String... labelExps)<a name="line.852"></a>
-<span class="sourceLineNo">853</span>      throws Exception {<a name="line.853"></a>
-<span class="sourceLineNo">854</span>    List&lt;Put&gt; puts = new ArrayList&lt;&gt;(labelExps.length);<a name="line.854"></a>
-<span class="sourceLineNo">855</span>    for (int i = 0; i &lt; labelExps.length; i++) {<a name="line.855"></a>
-<span class="sourceLineNo">856</span>      Put put = new Put(Bytes.toBytes("row" + (i+1)));<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      put.addColumn(fam, qual, HConstants.LATEST_TIMESTAMP, value);<a name="line.857"></a>
-<span class="sourceLineNo">858</span>      put.setCellVisibility(new CellVisibility(labelExps[i]));<a name="line.858"></a>
-<span class="sourceLineNo">859</span>      puts.add(put);<a name="line.859"></a>
-<span class="sourceLineNo">860</span>    }<a name="line.860"></a>
-<span class="sourceLineNo">861</span>    Table table = TEST_UTIL.createTable(tableName, fam);<a name="line.861"></a>
-<span class="sourceLineNo">862</span>    table.put(puts);<a name="line.862"></a>
-<span class="sourceLineNo">863</span>    return table;<a name="line.863"></a>
-<span class="sourceLineNo">864</span>  }<a name="line.864"></a>
-<span class="sourceLineNo">865</span><a name="line.865"></a>
-<span class="sourceLineNo">866</span>  public static void addLabels() throws Exception {<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    PrivilegedExceptionAction&lt;VisibilityLabelsResponse&gt; action =<a name="line.867"></a>
-<span class="sourceLineNo">868</span>        new PrivilegedExceptionAction&lt;VisibilityLabelsResponse&gt;() {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>      @Override<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      public VisibilityLabelsResponse run() throws Exception {<a name="line.870"></a>
-<span class="sourceLineNo">871</span>        String[] labels = { SECRET, TOPSECRET, CONFIDENTIAL, PUBLIC, PRIVATE, COPYRIGHT, ACCENT,<a name="line.871"></a>
-<span class="sourceLineNo">872</span>            UNICODE_VIS_TAG, UC1, UC2 };<a name="line.872"></a>
-<span class="sourceLineNo">873</span>        try (Connection conn = ConnectionFactory.createConnection(conf)) {<a name="line.873"></a>
-<span class="sourceLineNo">874</span>          VisibilityClient.addLabels(conn, labels);<a name="line.874"></a>
-<span class="sourceLineNo">875</span>        } catch (Throwable t) {<a name="line.875"></a>
-<span class="sourceLineNo">876</span>          throw new IOException(t);<a name="line.876"></a>
-<span class="sourceLineNo">877</span>        }<a name="line.877"></a>
-<span class="sourceLineNo">878</span>        return null;<a name="line.878"></a>
-<span class="sourceLineNo">879</span>      }<a name="line.879"></a>
-<span class="sourceLineNo">880</span>    };<a name="line.880"></a>
-<span class="sourceLineNo">881</span>    SUPERUSER.runAs(action);<a name="line.881"></a>
-<span class="sourceLineNo">882</span>  }<a name="line.882"></a>
-<span class="sourceLineNo">883</span>}<a name="line.883"></a>
+<span class="sourceLineNo">426</span>          throw new IOException(e);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>        }<a name="line.427"></a>
+<span class="sourceLineNo">428</span>        return null;<a name="line.428"></a>
+<span class="sourceLineNo">429</span>      }<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    };<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    SUPERUSER.runAs(action);<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    try (Table ht = TEST_UTIL.getConnection().getTable(LABELS_TABLE_NAME)) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      Scan scan = new Scan();<a name="line.433"></a>
+<span class="sourceLineNo">434</span>      scan.setAuthorizations(new Authorizations(VisibilityUtils.SYSTEM_LABEL));<a name="line.434"></a>
+<span class="sourceLineNo">435</span>      ResultScanner scanner = ht.getScanner(scan);<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      Result result = null;<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      List&lt;Result&gt; results = new ArrayList&lt;&gt;();<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      while ((result = scanner.next()) != null) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        results.add(result);<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      }<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      List&lt;String&gt; auths = extractAuths(user, results);<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      assertTrue(auths.contains(SECRET));<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      assertTrue(auths.contains(CONFIDENTIAL));<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      assertEquals(2, auths.size());<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    }<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span>    action = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      @Override<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      public Void run() throws Exception {<a name="line.449"></a>
+<span class="sourceLineNo">450</span>        GetAuthsResponse authsResponse = null;<a name="line.450"></a>
+<span class="sourceLineNo">451</span>        try (Connection conn = ConnectionFactory.createConnection(conf)) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          authsResponse = VisibilityClient.getAuths(conn, user);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>        } catch (Throwable e) {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>          throw new IOException(e);<a name="line.454"></a>
+<span class="sourceLineNo">455</span>        }<a name="line.455"></a>
+<span class="sourceLineNo">456</span>        List&lt;String&gt; authsList = new ArrayList&lt;&gt;(authsResponse.getAuthList().size());<a name="line.456"></a>
+<span class="sourceLineNo">457</span>        for (ByteString authBS : authsResponse.getAuthList()) {<a name="line.457"></a>
+<span class="sourceLineNo">458</span>          authsList.add(Bytes.toString(authBS.toByteArray()));<a name="line.458"></a>
+<span class="sourceLineNo">459</span>        }<a name="line.459"></a>
+<span class="sourceLineNo">460</span>        assertEquals(2, authsList.size());<a name="line.460"></a>
+<span class="sourceLineNo">461</span>        assertTrue(authsList.contains(SECRET));<a name="line.461"></a>
+<span class="sourceLineNo">462</span>        assertTrue(authsList.contains(CONFIDENTIAL));<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        return null;<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      }<a name="line.464"></a>
+<span class="sourceLineNo">465</span>    };<a name="line.465"></a>
+<span class="sourceLineNo">466</span>    SUPERUSER.runAs(action);<a name="line.466"></a>
+<span class="sourceLineNo">467</span><a name="line.467"></a>
+<span class="sourceLineNo">468</span>    // Try doing setAuths once again and there should not be any duplicates<a name="line.468"></a>
+<span class="sourceLineNo">469</span>    action = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      @Override<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      public Void run() throws Exception {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>        String[] auths1 = { SECRET, CONFIDENTIAL };<a name="line.472"></a>
+<span class="sourceLineNo">473</span>        GetAuthsResponse authsResponse = null;<a name="line.473"></a>
+<span class="sourceLineNo">474</span>        try (Connection conn = ConnectionFactory.createConnection(conf)) {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>          VisibilityClient.setAuths(conn, auths1, user);<a name="line.475"></a>
+<span class="sourceLineNo">476</span>          try {<a name="line.476"></a>
+<span class="sourceLineNo">477</span>            authsResponse = VisibilityClient.getAuths(conn, user);<a name="line.477"></a>
+<span class="sourceLineNo">478</span>          } catch (Throwable e) {<a name="line.478"></a>
+<span class="sourceLineNo">479</span>            throw new IOException(e);<a name="line.479"></a>
+<span class="sourceLineNo">480</span>          }<a name="line.480"></a>
+<span class="sourceLineNo">481</span>        } catch (Throwable e) {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>        }<a name="line.482"></a>
+<span class="sourceLineNo">483</span>        List&lt;String&gt; authsList = new ArrayList&lt;&gt;(authsResponse.getAuthList().size());<a name="line.483"></a>
+<span class="sourceLineNo">484</span>        for (ByteString authBS : authsResponse.getAuthList()) {<a name="line.484"></a>
+<span class="sourceLineNo">485</span>          authsList.add(Bytes.toString(authBS.toByteArray()));<a name="line.485"></a>
+<span class="sourceLineNo">486</span>        }<a name="line.486"></a>
+<span class="sourceLineNo">487</span>        assertEquals(2, authsList.size());<a name="line.487"></a>
+<span class="sourceLineNo">488</span>        assertTrue(authsList.contains(SECRET));<a name="line.488"></a>
+<span class="sourceLineNo">489</span>        assertTrue(authsList.contains(CONFIDENTIAL));<a name="line.489"></a>
+<span class="sourceLineNo">490</span>        return null;<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>    SUPERUSER.runAs(action);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>  }<a name="line.494"></a>
+<span class="sourceLineNo">495</span><a name="line.495"></a>
+<span class="sourceLineNo">496</span>  protected List&lt;String&gt; extractAuths(String user, List&lt;Result&gt; results) {<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    List&lt;String&gt; auths = new ArrayList&lt;&gt;();<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    for (Result result : results) {<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      Cell labelCell = result.getColumnLatestCell(LABELS_TABLE_FAMILY, LABEL_QUALIFIER);<a name="line.499"></a>
+<span class="sourceLineNo">500</span>      Cell userAuthCell = result.getColumnLatestCell(LABELS_TABLE_FAMILY, Bytes.toBytes(user));<a name="line.500"></a>
+<span class="sourceLineNo">501</span>      if (userAuthCell != null) {<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        auths.add(Bytes.toString(labelCell.getValueArray(), labelCell.getValueOffset(),<a name="line.502"></a>
+<span class="sourceLineNo">503</span>            labelCell.getValueLength()));<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 auths;<a name="line.506"></a>
+<span class="sourceLineNo">507</span>  }<a name="line.507"></a>
+<span class="sourceLineNo">508</span><a name="line.508"></a>
+<span class="sourceLineNo">509</span>  @Test<a name="line.509"></a>
+<span class="sourceLineNo">510</span>  public void testClearUserAuths() throws Throwable {<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    PrivilegedExceptionAction&lt;Void&gt; action = new PrivilegedExceptionAction&lt;Void&gt;() {<a name="line.511"></a>
+<span class="sourceLineNo">512</span>      @Override<a name="line.512"></a>
+<span class="sourceLineNo">513</span>      public Void run() throws Exception {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>        String[] auths = { SECRET, CONFIDENTIAL, PRIVATE };<a name="line.514"></a>
+<span class="sourceLineNo">515</span>        String user = "testUser";<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        try (Connection conn = ConnectionFactory.createConnection(conf)) {<a name="line.516"></a>
+<span class="sourceLineNo">517</span>          VisibilityClient.setAuths(conn, auths, user);<a name="line.517"></a>
+<span class="sourceLineNo">518</span>        } catch (Throwable e) {<a name="line.518"></a>
+<span class="sourceLineNo">519</span>          throw new IOException(e);<a name="line.519"></a>
+<span class="sourceLineNo">520</span>        }<a name="line.520"></a>
+<span class="sourceLineNo">521</span>        // Removing the auths for SECRET and CONFIDENTIAL for the user.<a name="line.521"></a>
+<span class="sourceLineNo">522</span>        // Passing a non existing auth also.<a name="line.522"></a>
+<span class="sourceLineNo">523</span>        auths = new String[] { SECRET, PUBLIC, CONFIDENTIAL };<a name="line.523"></a>
+<span class="sourceLineNo">524</span>        VisibilityLabelsResponse response = null;<a name="line.524"></a>
+<span class="sourceLineNo">525</span>        try (Connection conn = ConnectionFactory.createConnection(conf)) {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>          response = VisibilityClient.clearAuths(conn, auths, user);<a name="line.526"></a>
+<span class="sourceLineNo">527</span>        } catch (Throwable e) {<a name="line.527"></a>
+<span class="sourceLineNo">528</span>          fail("Should not have failed");<a name="line.528"></a>
+<span class="sourceLineNo">529</span>        }<a name="line.529"></a>
+<span class="sourceLineNo">530</span>        List&lt;RegionActionResult&gt; resultList = response.getResultList();<a name="line.530"></a>
+<span class="sourceLineNo">531</span>        assertEquals(3, resultList.size());<a name="line.531"></a>
+<span class="sourceLineNo">532</span>        assertTrue(resultList.get(0).getException().getValue().isEmpty());<a name="line.532"></a>
+<span class="sourceLineNo">533</span>        assertEquals("org.apache.hadoop.hbase.DoNotRetryIOException",<a name="line.533"></a>
+<span class="sourceLineNo">534</span>            resultList.get(1).getException().getName());<a name="line.534"></a>
+<span class="sourceLineNo">535</span>        assertTrue(Bytes.toString(resultList.get(1).getException().getValue().toByteArray())<a name="line.535"></a>
+<span class="sourceLineNo">536</span>            .contains(<a name="line.536"></a>
+<span class="sourceLineNo">537</span>                "org.apache.hadoop.hbase.security.visibility.InvalidLabelException: "<a name="line.537"></a>
+<span class="sourceLineNo">538</span>                    + "Label 'public' is not set for the user testUser"));<a name="line.538"></a>
+<span class="sourceLineNo">539</span>        assertTrue(resultList.get(2).getException().getValue().isEmpty());<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        try (Connection connection = ConnectionFactory.createConnection(conf);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>             Table ht = connection.getTable(LABELS_TABLE_NAME)) {<a name="line.541"></a>
+<span class="sourceLineNo">542</span>          ResultScanner scanner = ht.getScanner(new Scan());<a name="line.542"></a>
+<span class="sourceLineNo">543</span>          Result result = null;<a name="line.543"></a>
+<span class="sourceLineNo">544</span>          List&lt;Result&gt; results = new ArrayList&lt;&gt;();<a name="line.544"></a>
+<span class="sourceLineNo">545</span>          while ((result = scanner.next()) != null) {<a name="line.545"></a>
+<span class="sourceLineNo">546</span>            results.add(result);<a name="line.546"></a>
+<span class="sourceLineNo">547</span>          }<a name="line.547"></a>
+<span class="sourceLineNo">548</span>          List&lt;String&gt; curAuths = extractAuths(user, results);<a name="line.548"></a>
+<span class="sourceLineNo">549</span>          assertTrue(curAuths.contains(PRIVATE));<a name="line.549"></a>
+<span class="sourceLineNo">550</span>          assertEquals(1, curAuths.size());<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>        GetAuthsResponse authsResponse = null;<a name="line.553"></a>
+<span class="sourceLineNo">554</span>        try (Connection conn = ConnectionFactory.createConnection(conf)) {<a name="line.554"></a>
+<span class="sourceLineNo">555</span>          authsResponse = VisibilityClient.getAuths(conn, user);<a name="line.555"></a>
+<span class="sourceLineNo">556</span>        } catch (Throwable e) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>          throw new IOException(e);<a name="line.557"></a>
+<span class="sourceLineNo">558</span>        }<a name="line.558"></a>
+<span class="sourceLineNo">559</span>        List&lt;String&gt; authsList = new ArrayList&lt;&gt;(authsResponse.getAuthList().size());<a name="line.559"></a>
+<span class="sourceLineNo">560</span>        for (ByteString authBS : authsResponse.getAuthList()) {<a name="line.560"></a>
+<span class="sourceLineNo">561</span>          authsList.add(Bytes.toString(authBS.toByteArray()));<a name="line.561"></a>
+<span class="sourceLineNo">562</span>        }<a name="line.562"></a>
+<span class="sourceLineNo">563</span>        assertEquals(1, authsList.size());<a name="line.563"></a>
+<span class="sourceLineNo">564</span>        assertTrue(authsList.contains(PRIVATE));<a name="line.564"></a>
+<span class="sourceLineNo">565</span>        return null;<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      }<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    };<a name="line.567"></a>
+<span class="sourceLineNo">568</span>    SUPERUSER.runAs(action);<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>  @Test<a name="line.571"></a>
+<span class="sourceLineNo">572</span>  public void testLabelsWithCheckAndPut() throws Throwable {<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    TableName tableName = TableName.valueOf(TEST_NAME.getMethodName());<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    try (Table table = TEST_UTIL.createTable(tableName, fam)) {<a name="line.574"></a>
+<span class="sourceLineNo">575</span>      byte[] row1 = Bytes.toBytes("row1");<a name="line.575"></a>
+<span class="sourceLineNo">576</span>      Put put = new Put(row1);<a name="line.576"></a>
+<span class="sourceLineNo">577</span>      put.addColumn(fam, qual, HConstants.LATEST_TIMESTAMP, value);<a name="line.577"></a>
+<span class="sourceLineNo">578</span>      put.setCellVisibility(new CellVisibility(SECRET + " &amp; " + CONFIDENTIAL));<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      table.checkAndMutate(row1, fam).qualifier(qual).ifNotExists().thenPut(put);<a name="line.579"></a>
+<span class="sourceLineNo">580</span>      byte[] row2 = Bytes.toBytes("row2");<a name="line.580"></a>
+<span class="sourceLineNo">581</span>      put = new Put(row2);<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      put.addColumn(fam, qual, HConstants.LATEST_TIMESTAMP, value);<a name="line.582"></a>
+<span class="sourceLineNo">583</span>      put.setCellVisibility(new CellVisibility(SECRET));<a name="line.583"></a>
+<span class="sourceLineNo">584</span>      table.checkAndMutate(row2, fam).qualifier(qual).ifNotExists().thenPut(put);<a name="line.584"></a>
+<span class="sourceLineNo">585</span><a name="line.585"></a>
+<span class="sourceLineNo">586</span>      Scan scan = new Scan();<a name="line.586"></a>
+<span class="sourceLineNo">587</span>      scan.setAuthorizations(new Authorizations(SECRET));<a name="line.587"></a>
+<span class="sourceLineNo">588</span>      ResultScanner scanner = table.getScanner(scan);<a name="line.588"></a>
+<span class="sourceLineNo">589</span>      Result result = scanner.next();<a name="line.589"></a>
+<span class="sourceLineNo">590</span>      assertTrue(!result.isEmpty());<a name="line.590"></a>
+<span class="sourceLineNo">591</span>      assertTrue(Bytes.equals(row2, result.getRow()));<a name="line.591"></a>
+<span class="sourceLineNo">592</span>      result = scanner.next();<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      assertNull(result);<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>  @Test<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  public void testLabelsWithIncrement() throws Throwable {<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    TableName tableName = TableName.valueOf(TEST_NAME.getMethodName());<a name="line.599"></a>
+<span class="sourceLineNo">600</span>    try (Table table = TEST_UTIL.createTable(tableName, fam)) {<a name="line.600"></a>
+<span class="sourceLineNo">601</span>      byte[] row1 = Bytes.toBytes("row1");<a name="line.601"></a>
+<span class="sourceLineNo">602</span>      byte[] val = Bytes.toBytes(1L);<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      Put put = new Put(row1);<a name="line.603"></a>
+<span class="sourceLineNo">604</span>      put.addColumn(fam, qual, HConstants.LATEST_TIMESTAMP, val);<a name="line.604"></a>
+<span class="sourceLineNo">605</span>      put.setCellVisibility(new CellVisibility(SECRET + " &amp; " + CONFIDENTIAL));<a name="line.605"></a>
+<span class="sourceLineNo">606</span>      table.put(put);<a name="line.606"></a>
+<span class="sourceLineNo">607</span>      Get get = new Get(row1);<a name="line.607"></a>
+<span class="sourceLineNo">608</span>      get.setAuthorizations(new Authorizations(SECRET));<a name="line.608"></a>
+<span class="sourceLineNo">609</span>      Result result = table.get(get);<a name="line.609"></a>
+<span class="sourceLineNo">610</span>      assertTrue(result.isEmpty());<a name="line.610"></a>
+<span class="sourceLineNo">611</span>      table.incrementColumnValue(row1, fam, qual, 2L);<a name="line.611"></a>
+<span class="sourceLineNo">612</span>      result = table.get(get);<a name="line.612"></a>
+<span class="sourceLineNo">613</span>      assertTrue(result.isEmpty());<a name="line.613"></a>
+<span class="sourceLineNo">614</span>      Increment increment = new Increment(row1);<a name="line.614"></a>
+<span class="sourceLineNo">615</span>      increment.addColumn(fam, qual, 2L);<a name="line.615"></a>
+<span class="sourceLineNo">616</span>      increment.setCellVisibility(new CellVisibility(SECRET));<a name="line.616"></a>
+<span class="sourceLineNo">617</span>      table.increment(increment);<a name="line.617"></a>
+<span class="sourceLineNo">618</span>      result = table.get(get);<a name="line.618"></a>
+<span class="sourceLineNo">619</span>      assertTrue(!result.isEmpty());<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>  @Test<a name="line.623"></a>
+<span class="sourceLineNo">624</span>  public void testLabelsWithAppend() throws Throwable {<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    TableName tableName = TableName.valueOf(TEST_NAME.getMethodName());<a name="line.625"></a>
+<span class="sourceLineNo">626</span>    try (Table table = TEST_UTIL.createTable(tableName, fam)) {<a name="line.626"></a>
+<span class="sourceLineNo">627</span>      byte[] row1 = Bytes.toBytes("row1");<a name="line.627"></a>
+<span class="sourceLineNo">628</span>      byte[] val = Bytes.toBytes("a");<a name="line.628"></a>
+<span class="sourceLineNo">629</span>      Put put = new Put(row1);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>      put.addColumn(fam, qual, HConstants.LATEST_TIMESTAMP, val);<a name="line.630"></a>
+<span class="sourceLineNo">631</span>      put.setCellVisibility(new CellVisibility(SECRET + " &amp; " + CONFIDENTIAL));<a name="line.631"></a>
+<span class="sourceLineNo">632</span>      table.put(put);<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      Get get = new Get(row1);<a name="line.633"></a>
+<span class="sourceLineNo">634</span>      get.setAuthorizations(new Authorizations(SECRET));<a name="line.634"></a>
+<span class="sourceLineNo">635</span>      Result result = table.get(get);<a name="line.635"></a>
+<span class="sourceLineNo">636</span>      assertTrue(result.isEmpty());<a name="line.636"></a>
+<span class="sourceLineNo">637</span>      Append append = new Append(row1);<a name="line.637"></a>
+<span class="sourceLineNo">638</span>      append.addColumn(fam, qual, Bytes.toBytes("b"));<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      table.append(append);<a name="line.639"></a>
+<span class="sourceLineNo">640</span>      result = table.get(get);<a name="line.640"></a>
+<span class="sourceLineNo">641</span>      assertTrue(result.isEmpty());<a name="line.641"></a>
+<span class="sourceLineNo">642</span>      append = new Append(row1);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      append.addColumn(fam, qual, Bytes.toBytes("c"));<a name="line.643"></a>
+<span class="sourceLineNo">644</span>      append.setCellVisibility(new CellVisibility(SECRET));<a name="line.644"></a>
+<span class="sourceLineNo">645</span>      table.append(append);<a name="line.645"></a>
+<span class="sourceLineNo">646</span>      result = table.get(get);<a name="line.646"></a>
+<span class="sourceLineNo">647</span>      assertTrue(!result.isEmpty());<a name="line.647"></a>
+<span class="sourceLineNo">648</span>    }<a name="line.648"></a>
+<span class="sourceLineNo">649</span>  }<a name="line.649"></a>
+<span class="sourceLineNo">650</span><a name="line.650"></a>
+<span class="sourceLineNo">651</span>  @Test<a name="line.651"></a>
+<span class="sourceLineNo">652</span>  public void testUserShouldNotDoDDLOpOnLabelsTable() throws Exception {<a name="line.652"></a>
+<span class="sourceLineNo">653</span>    Admin admin = TEST_UTIL.getAdmin();<a name="line.653"></a>
+<span class="sourceLineNo">654</span>    try {<a name="line.654"></a>
+<span class="sourceLineNo">655</span>      admin.disableTable(LABELS_TABLE_NAME);<a name="line.655"></a>
+<span class="sourceLineNo">656</span>      fail("Lables table should not get disabled by user.");<a name="line.656"></a>
+<span class="sourceLineNo">657</span>    } catch (Exception e) {<a name="line.657"></a>
+<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
+<span class="sourceLineNo">659</span>    try {<a name="line.659"></a>
+<span class="sourceLineNo">660</span>      admin.deleteTable(LABELS_TABLE_NAME);<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      fail("Lables table should not get disabled by user.");<a name="line.661"></a>
+<span class="sourceLineNo">662</span>    } catch (Exception e) {<a name="line.662"></a>
+<span class="sourceLineNo">663</span>    }<a name="line.663"></a>
+<span class="sourceLineNo">664</span>    try {<a name="line.664"></a>
+<span class="sourceLineNo">665</span>      HColumnDescriptor hcd = new HColumnDescriptor("testFamily");<a name="line.665"></a>
+<span class="sourceLineNo">666</span>      admin.addColumnFamily(LABELS_TABLE_NAME, hcd);<a name="line.666"></a>
+<span class="sourceLineNo">667</span>      fail("Lables table should not get altered by user.");<a name="line.667"></a>
+<span class="sourceLineNo">668</span>    } catch (Exception e) {<a name="line.668"></a>
+<span class="sourceLineNo">669</span>    }<a name="line.669"></a>
+<span class="sourceLineNo">670</span>    try {<a name="line.670"></a>
+<span class="sourceLineNo">671</span>      admin.deleteColumnFamily(LABELS_TABLE_NAME, VisibilityConstants.LABELS_TABLE_FAMILY);<a name="line.671"></a>
+<span class="sourceLineNo">672</span>      fail("Lables table should not get altered by user.");<a name="line.672"></a>
+<span class="sourceLineNo">673</span>    } catch (Exception e) {<a name="line.673"></a>
+<span class="sourceLineNo">674</span>    }<a name="line.674"></a>
+<span class="sourceLineNo">675</span>    try {<a name="line.675"></a>
+<span class="sourceLineNo">676</span>      HColumnDescriptor hcd = new HColumnDescriptor(VisibilityConstants.LABELS_TABLE_FAMILY);<a name="line.676"></a>
+<span class="sourceLineNo">677</span>      hcd.setBloomFilterType(BloomType.ROWCOL);<a name="line.677"></a>
+<span class="sourceLineNo">678</span>      admin.modifyColumnFamily(LABELS_TABLE_NAME, hcd);<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      fail("Lables table should not get altered by user.");<a name="line.679"></a>
+<span class="sourceLineNo">680</span>    } catch (Exception e) {<a name="line.680"></a>
+<span class="sourceLineNo">681</span>    }<a name="line.681"></a>
+<span class="sourceLineNo">682</span>    try {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>      HTableDescriptor htd = new HTableDescriptor(LABELS_TABLE_NAME);<a name="line.683"></a>
+<span class="sourceLineNo">684</span>      htd.addFamily(new HColumnDescriptor("f1"));<a name="line.684"></a>
+<span class="sourceLineNo">685</span>      htd.addFamily(new HColumnDescriptor("f2"));<a name="line.685"></a>
+<span class="sourceLineNo">686</span>      admin.modifyTable(LABELS_TABLE_NAME, htd);<a name="line.686"></a>
+<span class="sourceLineNo">687</span>      fail("Lables table should not get altered by user.");<a name="line.687"></a>
+<span class="sourceLineNo">688</span>    } catch (Exception e) {<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>  @Test<a name="line.692"></a>
+<span class="sourceLineNo">693</span>  public void testMultipleVersions() throws Exception {<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    final byte[] r1 = Bytes.toBytes("row1");<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    final byte[] r2 = Bytes.toBytes("row2");<a name="line.695"></a>
+<span class="sourceLineNo">696</span>    final byte[] v1 = Bytes.toBytes("100");<a name="line.696"></a>
+<span class="sourceLineNo">697</span>    final byte[] v2 = Bytes.toBytes("101");<a name="line.697"></a>
+<span class="sourceLineNo">698</span>    final byte[] fam2 = Bytes.toBytes("info2");<a name="line.698"></a>
+<span class="sourceLineNo">699</span>    final byte[] qual2 = Bytes.toBytes("qual2");<a name="line.699"></a>
+<span class="sourceLineNo">700</span>    TableName tableName = TableName.valueOf(TEST_NAME.getMethodName());<a name="line.700"></a>
+<span class="sourceLineNo">701</span>    HTableDescriptor desc = new HTableDescriptor(tableName);<a name="line.701"></a>
+<span class="sourceLineNo">702</span>    HColumnDescriptor col = new HColumnDescriptor(fam);// Default max versions is 1.<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    desc.addFamily(col);<a name="line.703"></a>
+<span class="sourceLineNo">704</span>    col = new HColumnDescriptor(fam2);<a name="line.704"></a>
+<span class="sourceLineNo">705</span>    col.setMaxVersions(5);<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    desc.addFamily(col);<a name="line.706"></a>
+<span class="sourceLineNo">707</span>    TEST_UTIL.getAdmin().createTable(desc);<a name="line.707"></a>
+<span class="sourceLineNo">708</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.708"></a>
+<span class="sourceLineNo">709</span>      Put put = new Put(r1);<a name="line.709"></a>
+<span class="sourceLineNo">710</span>      put.addColumn(fam, qual, 3L, v1);<a name="line.710"></a>
+<span class="sourceLineNo">711</span>      put.addColumn(fam, qual2, 3L, v1);<a name="line.711"></a>
+<span class="sourceLineNo">712</span>      put.addColumn(fam2, qual, 3L, v1);<a name="line.712"></a>
+<span class="sourceLineNo">713</span>      put.addColumn(fam2, qual2, 3L, v1);<a name="line.713"></a>
+<span class="sourceLineNo">714</span>      put.setCellVisibility(new CellVisibility(SECRET));<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      table.put(put);<a name="line.715"></a>
+<span class="sourceLineNo">716</span>      put = new Put(r1);<a name="line.716"></a>
+<span class="sourceLineNo">717</span>      put.addColumn(fam, qual, 4L, v2);<a name="line.717"></a>
+<span class="sourceLineNo">718</span>      put.addColumn(fam, qual2, 4L, v2);<a name="line.718"></a>
+<span class="sourceLineNo">719</span>      put.addColumn(fam2, qual, 4L, v2);<a name="line.719"></a>
+<span class="sourceLineNo">720</span>      put.addColumn(fam2, qual2, 4L, v2);<a name="line.720"></a>
+<span class="sourceLineNo">721</span>      put.setCellVisibility(new CellVisibility(PRIVATE));<a name="line.721"></a>
+<span class="sourceLineNo">722</span>      table.put(put);<a name="line.722"></a>
+<span class="sourceLineNo">723</span><a name="line.723"></a>
+<span class="sourceLineNo">724</span>      put = new Put(r2);<a name="line.724"></a>
+<span class="sourceLineNo">725</span>      put.addColumn(fam, qual, 3L, v1);<a name="line.725"></a>
+<span class="sourceLineNo">726</span>      put.addColumn(fam, qual2, 3L, v1);<a name="line.726"></a>
+<span class="sourceLineNo">727</span>      put.addColumn(fam2, qual, 3L, v1);<a name="line.727"></a>
+<span class="sourceLineNo">728</span>      put.addColumn(fam2, qual2, 3L, v1);<a name="line.728"></a>
+<span class="sourceLineNo">729</span>      put.setCellVisibility(new CellVisibility(SECRET));<a name="line.729"></a>
+<span class="sourceLineNo">730</span>      table.put(put);<a name="line.730"></a>
+<span class="sourceLineNo">731</span>      put = new Put(r2);<a name="line.731"></a>
+<span class="sourceLineNo">732</span>      put.addColumn(fam, qual, 4L, v2);<a name="line.732"></a>
+<span class="sourceLineNo">733</span>      put.addColumn(fam, qual2, 4L, v2);<a name="line.733"></a>
+<span class="sourceLineNo">734</span>      put.addColumn(fam2, qual, 4L, v2);<a name="line.734"></a>
+<span class="sourceLineNo">735</span>      put.addColumn(fam2, qual2, 4L, v2);<a name="line.735"></a>
+<span class="sourceLineNo">736</span>      put.setCellVisibility(new CellVisibility(SECRET));<a name="line.736"></a>
+<span class="sourceLineNo">737</span>      table.put(put);<a name="line.737"></a>
+<span class="sourceLineNo">738</span><a name="line.738"></a>
+<span class="sourceLineNo">739</span>      Scan s = new Scan();<a name="line.739"></a>
+<span class="sourceLineNo">740</span>      s.setMaxVersions(1);<a name="line.740"></a>
+<span class="sourceLineNo">741</span>      s.setAuthorizations(new Authorizations(SECRET));<a name="line.741"></a>
+<span class="sourceLineNo">742</span>      ResultScanner scanner = table.getScanner(s);<a name="line.742"></a>
+<span class="sourceLineNo">743</span>      Result result = scanner.next();<a name="line.743"></a>
+<span class="sourceLineNo">744</span>      assertTrue(Bytes.equals(r1, result.getRow()));<a name="line.744"></a>
+<span class="sourceLineNo">745</span>      // for cf 'fam' max versions in HCD is 1. So the old version cells, which are having matching<a name="line.745"></a>
+<span class="sourceLineNo">746</span>      // CellVisibility with Authorizations, should not get considered in the label evaluation at<a name="line.746"></a>
+<span class="sourceLineNo">747</span>      // all.<a name="line.747"></a>
+<span class="sourceLineNo">748</span>      assertNull(result.getColumnLatestCell(fam, qual));<a name="line.748"></a>
+<span class="sourceLineNo">749</span>      assertNull(result.getColumnLatestCell(fam, qual2));<a name="line.749"></a>
+<span class="sourceLineNo">750</span>      // for cf 'fam2' max versions in HCD is &gt; 1. So we can consider the old version cells, which<a name="line.750"></a>
+<span class="sourceLineNo">751</span>      // are having matching CellVisibility with Authorizations, in the label evaluation. It can<a name="line.751"></a>
+<span class="sourceLineNo">752</span>      // just skip those recent versions for which visibility is not there as per the new version's<a name="line.752"></a>
+<span class="sourceLineNo">753</span>      // CellVisibility. The old versions which are having visibility can be send back<a name="line.753"></a>
+<span class="sourceLineNo">754</span>      Cell cell = result.getColumnLatestCell(fam2, qual);<a name="line.754"></a>
+<span class="sourceLineNo">755</span>      assertNotNull(cell);<a name="line.755"></a>
+<span class="sourceLineNo">756</span>      assertTrue(Bytes.equals(v1, 0, v1.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.756"></a>
+<span class="sourceLineNo">757</span>          cell.getValueLength()));<a name="line.757"></a>
+<span class="sourceLineNo">758</span>      cell = result.getColumnLatestCell(fam2, qual2);<a name="line.758"></a>
+<span class="sourceLineNo">759</span>      assertNotNull(cell);<a name="line.759"></a>
+<span class="sourceLineNo">760</span>      assertTrue(Bytes.equals(v1, 0, v1.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.760"></a>
+<span class="sourceLineNo">761</span>          cell.getValueLength()));<a name="line.761"></a>
+<span class="sourceLineNo">762</span><a name="line.762"></a>
+<span class="sourceLineNo">763</span>      result = scanner.next();<a name="line.763"></a>
+<span class="sourceLineNo">764</span>      assertTrue(Bytes.equals(r2, result.getRow()));<a name="line.764"></a>
+<span class="sourceLineNo">765</span>      cell = result.getColumnLatestCell(fam, qual);<a name="line.765"></a>
+<span class="sourceLineNo">766</span>      assertNotNull(cell);<a name="line.766"></a>
+<span class="sourceLineNo">767</span>      assertTrue(Bytes.equals(v2, 0, v2.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.767"></a>
+<span class="sourceLineNo">768</span>          cell.getValueLength()));<a name="line.768"></a>
+<span class="sourceLineNo">769</span>      cell = result.getColumnLatestCell(fam, qual2);<a name="line.769"></a>
+<span class="sourceLineNo">770</span>      assertNotNull(cell);<a name="line.770"></a>
+<span class="sourceLineNo">771</span>      assertTrue(Bytes.equals(v2, 0, v2.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.771"></a>
+<span class="sourceLineNo">772</span>          cell.getValueLength()));<a name="line.772"></a>
+<span class="sourceLineNo">773</span>      cell = result.getColumnLatestCell(fam2, qual);<a name="line.773"></a>
+<span class="sourceLineNo">774</span>      assertNotNull(cell);<a name="line.774"></a>
+<span class="sourceLineNo">775</span>      assertTrue(Bytes.equals(v2, 0, v2.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.775"></a>
+<span class="sourceLineNo">776</span>          cell.getValueLength()));<a name="line.776"></a>
+<span class="sourceLineNo">777</span>      cell = result.getColumnLatestCell(fam2, qual2);<a name="line.777"></a>
+<span class="sourceLineNo">778</span>      assertNotNull(cell);<a name="line.778"></a>
+<span class="sourceLineNo">779</span>      assertTrue(Bytes.equals(v2, 0, v2.length, cell.getValueArray(), cell.getValueOffset(),<a name="line.779"></a>
+<span class="sourceLineNo">780</span>          cell.getValueLength()));<a name="line.780"></a>
+<span class="sourceLineNo">781</span>    }<a name="line.781"></a>
+<span class="sourceLineNo">782</span>  }<a name="line.782"></a>
+<span class="sourceLineNo">783</span><a name="line.783"></a>
+<span class="sourceLineNo">784</span>  @Test<a name="line.784"></a>
+<span class="sourceLineNo">785</span>  public void testMutateRow() throws Exception {<a name="line.785"></a>
+<span class="sourceLineNo">786</span>    final byte[] qual2 = Bytes.toBytes("qual2");<a name="line.786"></a>
+<span class="sourceLineNo">787</span>    TableName tableName = TableName.valueOf(TEST_NAME.getMethodName());<a name="line.787"></a>
+<span class="sourceLineNo">788</span>    HTableDescriptor desc = new HTableDescriptor(tableName);<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    HColumnDescriptor col = new HColumnDescriptor(fam);<a name="line.789"></a>
+<span class="sourceLineNo">790</span>    desc.addFamily(col);<a name="line.790"></a>
+<span class="sourceLineNo">791</span>    TEST_UTIL.getAdmin().createTable(desc);<a name="line.791"></a>
+<span class="sourceLineNo">792</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)){<a name="line.792"></a>
+<span class="sourceLineNo">793</span>      Put p1 = new Put(row1);<a name="line.793"></a>
+<span class="sourceLineNo">794</span>      p1.addColumn(fam, qual, value);<a name="line.794"></a>
+<span class="sourceLineNo">795</span>      p1.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.795"></a>
+<span class="sourceLineNo">796</span><a name="line.796"></a>
+<span class="sourceLineNo">797</span>      Put p2 = new Put(row1);<a name="line.797"></a>
+<span class="sourceLineNo">798</span>      p2.addColumn(fam, qual2, value);<a name="line.798"></a>
+<span class="sourceLineNo">799</span>      p2.setCellVisibility(new CellVisibility(SECRET));<a name="line.799"></a>
+<span class="sourceLineNo">800</span><a name="line.800"></a>
+<span class="sourceLineNo">801</span>      RowMutations rm = new RowMutations(row1);<a name="line.801"></a>
+<span class="sourceLineNo">802</span>      rm.add(p1);<a name="line.802"></a>
+<span class="sourceLineNo">803</span>      rm.add(p2);<a name="line.803"></a>
+<span class="sourceLineNo">804</span><a name="line.804"></a>
+<span class="sourceLineNo">805</span>      table.mutateRow(rm);<a name="line.805"></a>
+<span class="sourceLineNo">806</span><a name="line.806"></a>
+<span class="sourceLineNo">807</span>      Get get = new Get(row1);<a name="line.807"></a>
+<span class="sourceLineNo">808</span>      get.setAuthorizations(new Authorizations(CONFIDENTIAL));<a name="line.808"></a>
+<span class="sourceLineNo">809</span>      Result result = table.get(get);<a name="line.809"></a>
+<span class="sourceLineNo">810</span>      assertTrue(result.containsColumn(fam, qual));<a name="line.810"></a>
+<span class="sourceLineNo">811</span>      assertFalse(result.containsColumn(fam, qual2));<a name="line.811"></a>
+<span class="sourceLineNo">812</span><a name="line.812"></a>
+<span class="sourceLineNo">813</span>      get.setAuthorizations(new Authorizations(SECRET));<a name="line.813"></a>
+<span class="sourceLineNo">814</span>      result = table.get(get);<a name="line.814"></a>
+<span class="sourceLineNo">815</span>      assertFalse(result.containsColumn(fam, qual));<a name="line.815"></a>
+<span class="sourceLineNo">816</span>      assertTrue(result.containsColumn(fam, qual2));<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><a name="line.819"></a>
+<span class="sourceLineNo">820</span>  @Test<a name="line.820"></a>
+<span class="sourceLineNo">821</span>  public void testFlushedFileWithVisibilityTags() throws Exception {<a name="line.821"></a>
+<span class="sourceLineNo">822</span>    final byte[] qual2 = Bytes.toBytes("qual2");<a name="line.822"></a>
+<span class="sourceLineNo">823</span>    TableName tableName = TableName.valueOf(TEST_NAME.getMethodName());<a name="line.823"></a>
+<span class="sourceLineNo">824</span>    HTableDescriptor desc = new HTableDescriptor(tableName);<a name="line.824"></a>
+<span class="sourceLineNo">825</span>    HColumnDescriptor col = new HColumnDescriptor(fam);<a name="line.825"></a>
+<span class="sourceLineNo">826</span>    desc.addFamily(col);<a name="line.826"></a>
+<span class="sourceLineNo">827</span>    TEST_UTIL.getAdmin().createTable(desc);<a name="line.827"></a>
+<span class="sourceLineNo">828</span>    try (Table table = TEST_UTIL.getConnection().getTable(tableName)) {<a name="line.828"></a>
+<span class="sourceLineNo">829</span>      Put p1 = new Put(row1);<a name="line.829"></a>
+<span class="sourceLineNo">830</span>      p1.addColumn(fam, qual, value);<a name="line.830"></a>
+<span class="sourceLineNo">831</span>      p1.setCellVisibility(new CellVisibility(CONFIDENTIAL));<a name="line.831"></a>
+<span class="sourceLineNo">832</span><a name="line.832"></a>
+<span class="sourceLineNo">833</span>      Put p2 = new Put(row1);<a name="line.833"></a>
+<span class=

<TRUNCATED>

[16/18] hbase-site git commit: Published site at cebb725a9f4ab8dd9d3f306d21d53d6f56161c51.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index 5eed94a..c41118b 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -26,7 +26,7 @@ under the License.
     <copyright>&#169;2007 - 2018 The Apache Software Foundation</copyright>
     <item>
       <title>File: 3740,
-             Errors: 15224,
+             Errors: 15225,
              Warnings: 0,
              Infos: 0
       </title>
@@ -51057,7 +51057,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  60
+                  61
                 </td>
               </tr>
                           <tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index e454d71..450a19e 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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       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-09-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-09-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index 7b51a22..b9210b4 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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-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-09-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-09-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 20fb7fd..0e1d032 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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -879,7 +879,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-09-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-09-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index 0659655..5627a24 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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-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-09-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-09-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index eee2a19..dd88938 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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -1005,7 +1005,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-09-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-09-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index 59cd7d8..e683e81 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3824,21 +3824,21 @@
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<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 Sep 17 14:44:40 UTC 2018"</code></td>
+<td class="colLast"><code>"Tue Sep 18 14:43:51 UTC 2018"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<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>"6d7bc0e98b25215e79f67f107fd0d3306dfcf352"</code></td>
+<td class="colLast"><code>"cebb725a9f4ab8dd9d3f306d21d53d6f56161c51"</code></td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.srcChecksum">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<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>"c84d66e08b953d4447102b307c654c63"</code></td>
+<td class="colLast"><code>"54606a0f9ede6bd4aaf8d5d2c89cbcf3"</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/ab597584/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index 0d1a56e..54b47c6 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -64560,6 +64560,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALManager.html#isReplayWALFinished-java.lang.String-">isReplayWALFinished(String)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALManager.html" title="class in org.apache.hadoop.hbase.master.replication">SyncReplicationReplayWALManager</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/RegionStates.html#isReplicaAvailableForRegion-org.apache.hadoop.hbase.client.RegionInfo-">isReplicaAvailableForRegion(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>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AsyncProcess.html#isReplicaGet-org.apache.hadoop.hbase.client.Row-">isReplicaGet(Row)</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AsyncProcess.html" title="class in org.apache.hadoop.hbase.client">AsyncProcess</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/RegionReplicaUtil.html#isReplicasForSameRegion-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-">isReplicasForSameRegion(RegionInfo, RegionInfo)</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/RegionReplicaUtil.html" title="class in org.apache.hadoop.hbase.client">RegionReplicaUtil</a></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/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 1e43e89..38f7cc7 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>&lt;E&gt; (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>&lt;T&gt;, 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/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>
+<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/devapidocs/org/apache/hadoop/hbase/client/class-use/RegionInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/class-use/RegionInfo.html b/devapidocs/org/apache/hadoop/hbase/client/class-use/RegionInfo.html
index 3d89e6b..245aee6 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/class-use/RegionInfo.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/class-use/RegionInfo.html
@@ -3118,6 +3118,10 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <td class="colLast"><span class="typeNameLabel">AssignmentManager.RegionInTransitionStat.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html#isRegionTwiceOverThreshold-org.apache.hadoop.hbase.client.RegionInfo-">isRegionTwiceOverThreshold</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">RegionStates.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#isReplicaAvailableForRegion-org.apache.hadoop.hbase.client.RegionInfo-">isReplicaAvailableForRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info)</code>&nbsp;</td>
+</tr>
+<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#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>&nbsp;child,
                   <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
@@ -3126,96 +3130,96 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <div class="block">When called here, the merge has happened.</div>
 </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#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>&nbsp;parent,
                  <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                  <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;daughterA,
                  <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;daughterB)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionStateStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#mergeRegions-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-">mergeRegions</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;child,
             <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hriA,
             <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hriB,
             <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#move-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-">move</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
     <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region,
     <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;targetServer)</code>&nbsp;</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#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>&nbsp;regionInfo)</code>&nbsp;</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#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>&nbsp;regionInfo)</code>&nbsp;</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#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>&nbsp;regionInfo,
             <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <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#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>&nbsp;regionInfo)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<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#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>&nbsp;regionInfo)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reopen-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.client.RegionInfo-">reopen</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
       <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<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#setMetaAssigned-org.apache.hadoop.hbase.client.RegionInfo-boolean-">setMetaAssigned</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;metaRegionInfo,
                boolean&nbsp;assigned)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionTransitionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#setRegionInfo-org.apache.hadoop.hbase.client.RegionInfo-">setRegionInfo</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>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#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>&nbsp;region)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionStateStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#splitRegion-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-">splitRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;parent,
            <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hriA,
            <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hriB,
            <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#unassign-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.client.RegionInfo-">unassign</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
         <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)</code>&nbsp;</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#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>&nbsp;regionInfo)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionStateStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#updateMetaLocation-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.master.RegionState.State-">updateMetaLocation</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                   <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                   <a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master">RegionState.State</a>&nbsp;state)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionStateStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#updateRegionLocation-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.master.RegionState.State-org.apache.hadoop.hbase.client.Put-">updateRegionLocation</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                     <a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master">RegionState.State</a>&nbsp;state,
                     <a href="../../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<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#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>&nbsp;serverName,
                            org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;state,
@@ -3223,7 +3227,7 @@ 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>&nbsp;hriA,
                            <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hriB)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <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#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>&nbsp;serverName,
                            org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;state,
@@ -3231,19 +3235,19 @@ 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>&nbsp;hriA,
                            <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hriB)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<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#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>&nbsp;regionInfo,
                  <a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master">RegionState.State</a>&nbsp;state)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <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#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>&nbsp;serverName,
                       org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;state,
                       <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                       long&nbsp;seqId)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionStateStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#updateUserRegionLocation-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.master.RegionState.State-org.apache.hadoop.hbase.ServerName-long-long-">updateUserRegionLocation</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                         <a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master">RegionState.State</a>&nbsp;state,
@@ -3251,7 +3255,7 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
                         long&nbsp;openSeqNum,
                         long&nbsp;pid)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionStateStore.RegionStateVisitor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateStore.RegionStateVisitor.html#visitRegionState-org.apache.hadoop.hbase.client.Result-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.master.RegionState.State-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.ServerName-long-">visitRegionState</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;result,
                 <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
@@ -3260,7 +3264,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>&nbsp;lastHost,
                 long&nbsp;openSeqNum)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>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#waitMetaAssigned-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.client.RegionInfo-">waitMetaAssigned</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
                 <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</code>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/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 1c0a69f..b5ebaef 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -555,24 +555,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>&lt;E&gt; (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>&lt;T&gt;, 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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
index ce950b0..ae0124e 100644
--- a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
@@ -104,8 +104,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>&lt;E&gt; (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>&lt;T&gt;, 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.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/EventType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">EventType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">ExecutorType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/EventType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">EventType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/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 ab795a0..6173ca9 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>&lt;E&gt; (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>&lt;T&gt;, 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/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/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/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/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>
+<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/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/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/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 a6e5222..e9eb172 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -274,12 +274,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>&lt;E&gt; (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>&lt;T&gt;, 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/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/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.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/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/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/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/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/ab597584/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 427b9f5..7557e4f 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
@@ -353,9 +353,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>&lt;E&gt; (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>&lt;T&gt;, 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/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>
-<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/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 730b7cf..2e21581 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>&lt;E&gt; (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>&lt;T&gt;, 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/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/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/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/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/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 b72ee1b..be3922b 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.668">RegionStates.RegionFailedOpen</a>
+<pre>public static final class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.670">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&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.669">regionNode</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.671">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&nbsp;<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.671">exception</a></pre>
+<pre>private volatile&nbsp;<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.673">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&nbsp;<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.672">retries</a></pre>
+<pre>private&nbsp;<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.674">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&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.674">RegionFailedOpen</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.676">RegionFailedOpen</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;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&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.678">getRegionStateNode</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.680">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&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.682">getRegionInfo</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.684">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&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.686">incrementAndGetRetries</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.688">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&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.690">getRetries</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.692">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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.694">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>&nbsp;exception)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.696">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>&nbsp;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&nbsp;<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>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.698">getException</a>()</pre>
+<pre>public&nbsp;<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>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.700">getException</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateStampComparator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateStampComparator.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateStampComparator.html
index 94d7d5e..1b64578 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateStampComparator.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateStampComparator.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.61">RegionStates.RegionStateStampComparator</a>
+<pre>private static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.63">RegionStates.RegionStateStampComparator</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/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&gt;</pre>
 </li>
@@ -197,7 +197,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparat
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RegionStateStampComparator</h4>
-<pre>private&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateStampComparator.html#line.61">RegionStateStampComparator</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateStampComparator.html#line.63">RegionStateStampComparator</a>()</pre>
 </li>
 </ul>
 </li>
@@ -214,7 +214,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparat
 <ul class="blockListLast">
 <li class="blockList">
 <h4>compare</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateStampComparator.html#line.63">compare</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&nbsp;l,
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateStampComparator.html#line.65">compare</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&nbsp;l,
                    <a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&nbsp;r)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>


[15/18] hbase-site git commit: Published site at cebb725a9f4ab8dd9d3f306d21d53d6f56161c51.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/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 3e20aba..f6da60a 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":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":9,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":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":9,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":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";
@@ -110,7 +110,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.55">RegionStates</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.57">RegionStates</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">RegionStates contains a set of Maps that describes the in-memory state of the AM, with
  the regions available in the system, the region in transition, the offline regions and
@@ -440,56 +440,60 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#isRegionOnline-org.apache.hadoop.hbase.client.RegionInfo-">isRegionOnline</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</code>&nbsp;</td>
 </tr>
 <tr id="i50" 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.html#isReplicaAvailableForRegion-org.apache.hadoop.hbase.client.RegionInfo-">isReplicaAvailableForRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info)</code>&nbsp;</td>
+</tr>
+<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#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>&nbsp;serverName)</code>
 <div class="block">Called after we've split all logs on a crashed Server.</div>
 </td>
 </tr>
-<tr id="i51" class="rowColor">
+<tr id="i52" 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>&nbsp;serverName)</code>
 <div class="block">Call this when we start log splitting for a crashed Server.</div>
 </td>
 </tr>
-<tr id="i52" class="altColor">
+<tr id="i53" 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#metaLogSplit-org.apache.hadoop.hbase.ServerName-">metaLogSplit</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Called after we've split the meta logs on a crashed Server.</div>
 </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#metaLogSplitting-org.apache.hadoop.hbase.ServerName-">metaLogSplitting</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Call this when we start meta log splitting a crashed Server.</div>
 </td>
 </tr>
-<tr id="i54" class="altColor">
+<tr id="i55" 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>&lt;byte[]&gt;&nbsp;regions)</code>&nbsp;</td>
 </tr>
-<tr id="i55" class="rowColor">
+<tr id="i56" 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>&nbsp;regionInfo)</code>&nbsp;</td>
 </tr>
-<tr id="i56" class="altColor">
+<tr id="i57" 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>&nbsp;regionInfo)</code>&nbsp;</td>
 </tr>
-<tr id="i57" class="rowColor">
+<tr id="i58" class="altColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">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.RegionStateNode-">removeRegionFromServer</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                       <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</code>&nbsp;</td>
 </tr>
-<tr id="i58" class="altColor">
+<tr id="i59" 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#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>&nbsp;serverName)</code>&nbsp;</td>
 </tr>
-<tr id="i59" class="rowColor">
+<tr id="i60" 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/RegionStates.html#setServerState-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.master.assignment.ServerState-">setServerState</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
               <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment">ServerState</a>&nbsp;state)</code>&nbsp;</td>
 </tr>
-<tr id="i60" class="altColor">
+<tr id="i61" 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>&nbsp;regionInfo,
                  <a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master">RegionState.State</a>&nbsp;state)</code>&nbsp;</td>
@@ -522,7 +526,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.56">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.58">LOG</a></pre>
 </li>
 </ul>
 <a name="REGION_STATE_STAMP_COMPARATOR">
@@ -531,7 +535,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&nbsp;<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.69">REGION_STATE_STAMP_COMPARATOR</a></pre>
+<pre>public static final&nbsp;<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.71">REGION_STATE_STAMP_COMPARATOR</a></pre>
 </li>
 </ul>
 <a name="regionsMap">
@@ -540,7 +544,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&nbsp;<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>&lt;byte[],<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.76">regionsMap</a></pre>
+<pre>private final&nbsp;<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>&lt;byte[],<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.78">regionsMap</a></pre>
 <div class="block">RegionName -- i.e. RegionInfo.getRegionName() -- as bytes to <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment"><code>RegionStateNode</code></a></div>
 </li>
 </ul>
@@ -550,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>regionInTransition</h4>
-<pre>private final&nbsp;<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>&lt;<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/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.79">regionInTransition</a></pre>
+<pre>private final&nbsp;<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>&lt;<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/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.81">regionInTransition</a></pre>
 </li>
 </ul>
 <a name="regionOffline">
@@ -559,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>regionOffline</h4>
-<pre>private final&nbsp;<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>&lt;<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/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.86">regionOffline</a></pre>
+<pre>private final&nbsp;<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>&lt;<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/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.88">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>
@@ -570,7 +574,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&nbsp;<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>&lt;byte[],<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionFailedOpen</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.89">regionFailedOpen</a></pre>
+<pre>private final&nbsp;<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>&lt;byte[],<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionFailedOpen</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.91">regionFailedOpen</a></pre>
 </li>
 </ul>
 <a name="serverMap">
@@ -579,7 +583,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&nbsp;<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>&lt;<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/ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">ServerStateNode</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.92">serverMap</a></pre>
+<pre>private final&nbsp;<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>&lt;<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/ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">ServerStateNode</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.94">serverMap</a></pre>
 </li>
 </ul>
 </li>
@@ -596,7 +600,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&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.95">RegionStates</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.97">RegionStates</a>()</pre>
 </li>
 </ul>
 </li>
@@ -613,7 +617,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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.97">clear</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.99">clear</a>()</pre>
 </li>
 </ul>
 <a name="isRegionInRegionStates-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -622,7 +626,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&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.105">isRegionInRegionStates</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.107">isRegionInRegionStates</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri)</pre>
 </li>
 </ul>
 <a name="createRegionStateNode-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -631,7 +635,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><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.114">createRegionStateNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
+<pre><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.116">createRegionStateNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
 </li>
 </ul>
 <a name="getOrCreateRegionStateNode-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -640,7 +644,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>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.120">getOrCreateRegionStateNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.122">getOrCreateRegionStateNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
 </li>
 </ul>
 <a name="getRegionStateNodeFromName-byte:A-">
@@ -649,7 +653,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/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.125">getRegionStateNodeFromName</a>(byte[]&nbsp;regionName)</pre>
+<pre><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.127">getRegionStateNodeFromName</a>(byte[]&nbsp;regionName)</pre>
 </li>
 </ul>
 <a name="getRegionStateNode-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -658,7 +662,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&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.129">getRegionStateNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.131">getRegionStateNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
 </li>
 </ul>
 <a name="deleteRegion-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -667,7 +671,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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.133">deleteRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.135">deleteRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
 </li>
 </ul>
 <a name="deleteRegions-java.util.List-">
@@ -676,7 +680,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteRegions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.148">deleteRegions</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regionInfos)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.150">deleteRegions</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regionInfos)</pre>
 </li>
 </ul>
 <a name="getTableRegionStateNodes-org.apache.hadoop.hbase.TableName-">
@@ -685,7 +689,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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.152">getTableRegionStateNodes</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.154">getTableRegionStateNodes</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 <a name="getTableRegionStates-org.apache.hadoop.hbase.TableName-">
@@ -694,7 +698,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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.161">getTableRegionStates</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.163">getTableRegionStates</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 <a name="getTableRegionsInfo-org.apache.hadoop.hbase.TableName-">
@@ -703,7 +707,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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.170">getTableRegionsInfo</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.172">getTableRegionsInfo</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 <a name="getRegionStateNodes--">
@@ -712,7 +716,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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.179">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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.181">getRegionStateNodes</a>()</pre>
 </li>
 </ul>
 <a name="getRegionStates--">
@@ -721,7 +725,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&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.183">getRegionStates</a>()</pre>
+<pre>public&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.185">getRegionStates</a>()</pre>
 </li>
 </ul>
 <a name="getRegionState-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -730,7 +734,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&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.194">getRegionState</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.196">getRegionState</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
 </li>
 </ul>
 <a name="getRegionState-java.lang.String-">
@@ -739,7 +743,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&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.199">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>&nbsp;encodedRegionName)</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.201">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>&nbsp;encodedRegionName)</pre>
 </li>
 </ul>
 <a name="hasTableRegionStates-org.apache.hadoop.hbase.TableName-">
@@ -748,7 +752,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&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.212">hasTableRegionStates</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.214">hasTableRegionStates</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 <a name="getRegionsOfTable-org.apache.hadoop.hbase.TableName-">
@@ -757,7 +761,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&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.220">getRegionsOfTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</pre>
+<pre>public&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.222">getRegionsOfTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;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 +774,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionForReopen</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.224">createRegionForReopen</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;node)</pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.226">createRegionForReopen</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;node)</pre>
 </li>
 </ul>
 <a name="getRegionsOfTableForReopen-org.apache.hadoop.hbase.TableName-">
@@ -779,7 +783,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionsOfTableForReopen</h4>
-<pre>public&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.250">getRegionsOfTableForReopen</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>public&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.252">getRegionsOfTableForReopen</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 <div class="block">Get the regions to be reopened when modifying a table.
  <p/>
  Notice that the <code>openSeqNum</code> in the returned HRegionLocation is also used to indicate the
@@ -793,7 +797,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>checkReopened</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.276">checkReopened</a>(<a href="../../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;oldLoc)</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.278">checkReopened</a>(<a href="../../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;oldLoc)</pre>
 <div class="block">Check whether the region has been reopened. The meaning of the <a href="../../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase"><code>HRegionLocation</code></a> is the
  same with <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#getRegionsOfTableForReopen-org.apache.hadoop.hbase.TableName-"><code>getRegionsOfTableForReopen(TableName)</code></a>.
  <p/>
@@ -826,7 +830,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&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.327">getRegionsOfTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+<pre>public&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.329">getRegionsOfTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
                                           boolean&nbsp;offline)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -840,7 +844,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>private&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.336">getRegionsOfTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+<pre>private&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.338">getRegionsOfTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
                                            <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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&gt;&nbsp;filter)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -856,7 +860,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&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.347">include</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;node,
+<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.349">include</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;node,
                 boolean&nbsp;offline)</pre>
 <div class="block">Utility. Whether to include region in list of regions. Default is to
  weed out split and offline regions.</div>
@@ -873,7 +877,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&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.363">getServerRegionInfoSet</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
+<pre>public&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.365">getServerRegionInfoSet</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
 <div class="block">Returns the set of regions hosted by the specified server</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -889,7 +893,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setServerState</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.380">setServerState</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.382">setServerState</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                             <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment">ServerState</a>&nbsp;state)</pre>
 </li>
 </ul>
@@ -899,7 +903,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>metaLogSplitting</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.391">metaLogSplitting</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.393">metaLogSplitting</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
 <div class="block">Call this when we start meta log splitting a crashed Server.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -913,7 +917,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>metaLogSplit</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.399">metaLogSplit</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.401">metaLogSplit</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
 <div class="block">Called after we've split the meta logs on a crashed Server.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -927,7 +931,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>logSplitting</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.407">logSplitting</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.409">logSplitting</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
 <div class="block">Call this when we start log splitting for a crashed Server.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -941,7 +945,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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.415">logSplit</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.417">logSplit</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;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>
@@ -955,7 +959,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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.419">updateRegionState</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.421">updateRegionState</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                               <a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master">RegionState.State</a>&nbsp;state)</pre>
 </li>
 </ul>
@@ -965,7 +969,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&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.432">getAssignedRegions</a>()</pre>
+<pre>public&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.434">getAssignedRegions</a>()</pre>
 </li>
 </ul>
 <a name="isRegionInState-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.master.RegionState.State...-">
@@ -974,7 +978,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&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.442">isRegionInState</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.444">isRegionInState</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                                <a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master">RegionState.State</a>...&nbsp;state)</pre>
 </li>
 </ul>
@@ -984,7 +988,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&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.455">isRegionOnline</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.457">isRegionOnline</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
 </li>
 </ul>
 <a name="isRegionOffline-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -993,7 +997,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&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.462">isRegionOffline</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.464">isRegionOffline</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>True if region is offline (In OFFLINE or CLOSED state).</dd>
@@ -1006,7 +1010,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&nbsp;<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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.466">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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionI
 nfo</a>&gt;&nbsp;regions)</pre>
+<pre>public&nbsp;<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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.468">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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionI
 nfo</a>&gt;&nbsp;regions)</pre>
 </li>
 </ul>
 <a name="createSnapshot-org.apache.hadoop.hbase.master.assignment.RegionStateNode-java.util.Map-">
@@ -1015,7 +1019,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createSnapshot</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.488">createSnapshot</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;node,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.490">createSnapshot</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;node,
                             <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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&nbsp;result)</pre>
 </li>
 </ul>
@@ -1025,7 +1029,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&nbsp;<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>&lt;<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>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.502">getRegionAssignments</a>()</pre>
+<pre>public&nbsp;<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>&lt;<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>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.504">getRegionAssignments</a>()</pre>
 </li>
 </ul>
 <a name="getRegionByStateOfTable-org.apache.hadoop.hbase.TableName-">
@@ -1034,7 +1038,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&nbsp;<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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.510">getRegionByStateOfTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>public&nbsp;<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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.512">getRegionByStateOfTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 <a name="getRegionServerOfRegion-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -1043,7 +1047,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&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.526">getRegionServerOfRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.528">getRegionServerOfRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
 </li>
 </ul>
 <a name="getAssignmentsByTable-boolean-">
@@ -1052,7 +1056,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&nbsp;<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>&lt;<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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.548">getAssignmentsByTable</a>(boolean&nbsp;forceByClus
 ter)</pre>
+<pre>public&nbsp;<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>&lt;<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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.550">getAssignmentsByTable</a>(boolean&nbsp;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
@@ -1071,7 +1075,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&nbsp;<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>&lt;<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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.565">getAssignmentsByTable</a>()</pre>
+<pre>public&nbsp;<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>&lt;<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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.567">getAssignmentsByTable</a>()</pre>
 </li>
 </ul>
 <a name="hasRegionsInTransition--">
@@ -1080,7 +1084,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&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.601">hasRegionsInTransition</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.603">hasRegionsInTransition</a>()</pre>
 </li>
 </ul>
 <a name="isRegionInTransition-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -1089,7 +1093,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&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.605">isRegionInTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.607">isRegionInTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
 </li>
 </ul>
 <a name="getRegionTransitionState-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -1098,7 +1102,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&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.610">getRegionTransitionState</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri)</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.612">getRegionTransitionState</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri)</pre>
 </li>
 </ul>
 <a name="getRegionsInTransition--">
@@ -1107,7 +1111,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&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.624">getRegionsInTransition</a>()</pre>
+<pre>public&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.626">getRegionsInTransition</a>()</pre>
 </li>
 </ul>
 <a name="getRegionsInTransitionCount--">
@@ -1116,7 +1120,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&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.631">getRegionsInTransitionCount</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.633">getRegionsInTransitionCount</a>()</pre>
 <div class="block">Get the number of regions in transition.</div>
 </li>
 </ul>
@@ -1126,7 +1130,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&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.635">getRegionsStateInTransition</a>()</pre>
+<pre>public&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.637">getRegionsStateInTransition</a>()</pre>
 </li>
 </ul>
 <a name="getRegionsInTransitionOrderedByTimestamp--">
@@ -1135,7 +1139,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&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.643">getRegionsInTransitionOrderedByTimestamp</a>()</pre>
+<pre>public&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.645">getRegionsInTransitionOrderedByTimestamp</a>()</pre>
 </li>
 </ul>
 <a name="addToOfflineRegions-org.apache.hadoop.hbase.master.assignment.RegionStateNode-">
@@ -1144,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>addToOfflineRegions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.655">addToOfflineRegions</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.657">addToOfflineRegions</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</pre>
 </li>
 </ul>
 <a name="removeFromOfflineRegions-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -1153,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>removeFromOfflineRegions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.661">removeFromOfflineRegions</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.663">removeFromOfflineRegions</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
 </li>
 </ul>
 <a name="addToFailedOpen-org.apache.hadoop.hbase.master.assignment.RegionStateNode-">
@@ -1162,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>addToFailedOpen</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionFailedOpen</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.703">addToFailedOpen</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionFailedOpen</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.705">addToFailedOpen</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</pre>
 </li>
 </ul>
 <a name="getFailedOpen-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -1171,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>getFailedOpen</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionFailedOpen</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.714">getFailedOpen</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionFailedOpen</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.716">getFailedOpen</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
 </li>
 </ul>
 <a name="removeFromFailedOpen-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -1180,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>removeFromFailedOpen</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.718">removeFromFailedOpen</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.720">removeFromFailedOpen</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
 </li>
 </ul>
 <a name="getRegionFailedOpen--">
@@ -1189,7 +1193,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&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.722">getRegionFailedOpen</a>()</pre>
+<pre>public&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.724">getRegionFailedOpen</a>()</pre>
 </li>
 </ul>
 <a name="getOrCreateServer-org.apache.hadoop.hbase.ServerName-">
@@ -1198,7 +1202,7 @@ 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&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">ServerStateNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.741">getOrCreateServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">ServerStateNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.743">getOrCreateServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;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>
@@ -1210,7 +1214,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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.751">removeServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.753">removeServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
 </li>
 </ul>
 <a name="getServerNode-org.apache.hadoop.hbase.ServerName-">
@@ -1219,7 +1223,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><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">ServerStateNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.755">getServerNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
+<pre><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">ServerStateNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.757">getServerNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
 </li>
 </ul>
 <a name="getAverageLoad--">
@@ -1228,7 +1232,7 @@ extends <a h

<TRUNCATED>

[07/18] hbase-site git commit: Published site at cebb725a9f4ab8dd9d3f306d21d53d6f56161c51.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html
index d974429..e478f39 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html
@@ -42,32 +42,32 @@
 <span class="sourceLineNo">034</span>import java.util.TreeMap;<a name="line.34"></a>
 <span class="sourceLineNo">035</span>import java.util.function.Predicate;<a name="line.35"></a>
 <span class="sourceLineNo">036</span>import java.util.stream.Collectors;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.commons.lang3.NotImplementedException;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.conf.Configuration;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HConstants;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HDFSBlocksDistribution;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.ServerMetrics;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ServerName;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.TableName;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.RackManager;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster.Action.Type;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.slf4j.Logger;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.slf4j.LoggerFactory;<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hbase.thirdparty.com.google.common.collect.ArrayListMultimap;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.62"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.commons.lang3.NotImplementedException;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HConstants;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HDFSBlocksDistribution;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ServerMetrics;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.ServerName;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.TableName;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.RackManager;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster.Action.Type;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hbase.thirdparty.com.google.common.collect.ArrayListMultimap;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.slf4j.Logger;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.slf4j.LoggerFactory;<a name="line.62"></a>
 <span class="sourceLineNo">063</span><a name="line.63"></a>
 <span class="sourceLineNo">064</span>/**<a name="line.64"></a>
 <span class="sourceLineNo">065</span> * The base class for load balancers. It provides the the functions used to by<a name="line.65"></a>
@@ -1462,181 +1462,186 @@
 <span class="sourceLineNo">1454</span>    for (Map.Entry&lt;RegionInfo, ServerName&gt; entry : regions.entrySet()) {<a name="line.1454"></a>
 <span class="sourceLineNo">1455</span>      RegionInfo region = entry.getKey();<a name="line.1455"></a>
 <span class="sourceLineNo">1456</span>      ServerName oldServerName = entry.getValue();<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>      if (!hasRegionReplica &amp;&amp; !RegionReplicaUtil.isDefaultReplica(region)) {<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>        hasRegionReplica = true;<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>      }<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>      List&lt;ServerName&gt; localServers = new ArrayList&lt;&gt;();<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>      if (oldServerName != null) {<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>        localServers = serversByHostname.get(oldServerName.getHostnameLowerCase());<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>      }<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>      if (localServers.isEmpty()) {<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>        // No servers on the new cluster match up with this hostname, assign randomly, later.<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>        randomAssignRegions.add(region);<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>        if (oldServerName != null) {<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>          oldHostsNoLongerPresent.add(oldServerName.getHostnameLowerCase());<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>        }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>      } else if (localServers.size() == 1) {<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>        // the usual case - one new server on same host<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>        ServerName target = localServers.get(0);<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>        assignments.get(target).add(region);<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>        numRetainedAssigments++;<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      } else {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        // multiple new servers in the cluster on this same host<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>        if (localServers.contains(oldServerName)) {<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>          assignments.get(oldServerName).add(region);<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>          numRetainedAssigments++;<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>        } else {<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>          ServerName target = null;<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>          for (ServerName tmp : localServers) {<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>            if (tmp.getPort() == oldServerName.getPort()) {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>              target = tmp;<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>              assignments.get(tmp).add(region);<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>              numRetainedAssigments++;<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>              break;<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>            }<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>          }<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>          if (target == null) {<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>            randomAssignRegions.add(region);<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>          }<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>    // If servers from prior assignment aren't present, then lets do randomAssignment on regions.<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>    if (randomAssignRegions.size() &gt; 0) {<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>      Cluster cluster = createCluster(servers, regions.keySet(), hasRegionReplica);<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>      for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : assignments.entrySet()) {<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>        ServerName sn = entry.getKey();<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>        for (RegionInfo region : entry.getValue()) {<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>          cluster.doAssignRegion(region, sn);<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>        }<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>      }<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>      for (RegionInfo region : randomAssignRegions) {<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>        ServerName target = randomAssignment(cluster, region, servers);<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>        assignments.get(target).add(region);<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>        numRandomAssignments++;<a name="line.1509"></a>
+<span class="sourceLineNo">1457</span>      // In the current set of regions even if one has region replica let us go with<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>      // getting the entire snapshot<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>      if (this.services != null &amp;&amp; this.services.getAssignmentManager() != null) { // for tests<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>        if (!hasRegionReplica &amp;&amp; this.services.getAssignmentManager().getRegionStates()<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>            .isReplicaAvailableForRegion(region)) {<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>          hasRegionReplica = true;<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>        }<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>      }<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>      List&lt;ServerName&gt; localServers = new ArrayList&lt;&gt;();<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>      if (oldServerName != null) {<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>        localServers = serversByHostname.get(oldServerName.getHostnameLowerCase());<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>      }<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>      if (localServers.isEmpty()) {<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>        // No servers on the new cluster match up with this hostname, assign randomly, later.<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>        randomAssignRegions.add(region);<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>        if (oldServerName != null) {<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>          oldHostsNoLongerPresent.add(oldServerName.getHostnameLowerCase());<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>        }<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>      } else if (localServers.size() == 1) {<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>        // the usual case - one new server on same host<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>        ServerName target = localServers.get(0);<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>        assignments.get(target).add(region);<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>        numRetainedAssigments++;<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>      } else {<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>        // multiple new servers in the cluster on this same host<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>        if (localServers.contains(oldServerName)) {<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>          assignments.get(oldServerName).add(region);<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>          numRetainedAssigments++;<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>        } else {<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>          ServerName target = null;<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>          for (ServerName tmp : localServers) {<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>            if (tmp.getPort() == oldServerName.getPort()) {<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>              target = tmp;<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>              assignments.get(tmp).add(region);<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>              numRetainedAssigments++;<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>              break;<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>          if (target == null) {<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>            randomAssignRegions.add(region);<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>          }<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>        }<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>      }<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>    }<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span><a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>    // If servers from prior assignment aren't present, then lets do randomAssignment on regions.<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>    if (randomAssignRegions.size() &gt; 0) {<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>      Cluster cluster = createCluster(servers, regions.keySet(), hasRegionReplica);<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>      for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : assignments.entrySet()) {<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>        ServerName sn = entry.getKey();<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>        for (RegionInfo region : entry.getValue()) {<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>          cluster.doAssignRegion(region, sn);<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>        }<a name="line.1509"></a>
 <span class="sourceLineNo">1510</span>      }<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>    }<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span><a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>    String randomAssignMsg = "";<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    if (numRandomAssignments &gt; 0) {<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>      randomAssignMsg =<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>          numRandomAssignments + " regions were assigned "<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>              + "to random hosts, since the old hosts for these regions are no "<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>              + "longer present in the cluster. These hosts were:\n  "<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>              + Joiner.on("\n  ").join(oldHostsNoLongerPresent);<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>    LOG.info("Reassigned " + regions.size() + " regions. " + numRetainedAssigments<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>        + " retained the pre-restart assignment. " + randomAssignMsg);<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>    return assignments;<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>  }<a name="line.1525"></a>
+<span class="sourceLineNo">1511</span>      for (RegionInfo region : randomAssignRegions) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>        ServerName target = randomAssignment(cluster, region, servers);<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        assignments.get(target).add(region);<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>        numRandomAssignments++;<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>      }<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>    }<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span><a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>    String randomAssignMsg = "";<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    if (numRandomAssignments &gt; 0) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>      randomAssignMsg =<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          numRandomAssignments + " regions were assigned "<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>              + "to random hosts, since the old hosts for these regions are no "<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>              + "longer present in the cluster. These hosts were:\n  "<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>              + Joiner.on("\n  ").join(oldHostsNoLongerPresent);<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>    }<a name="line.1525"></a>
 <span class="sourceLineNo">1526</span><a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>  @Override<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>  public void initialize() throws HBaseIOException{<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>  }<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span><a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>  @Override<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>  public void regionOnline(RegionInfo regionInfo, ServerName sn) {<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>  }<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>  @Override<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>  public void regionOffline(RegionInfo regionInfo) {<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 boolean isStopped() {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>    return stopped;<a name="line.1541"></a>
+<span class="sourceLineNo">1527</span>    LOG.info("Reassigned " + regions.size() + " regions. " + numRetainedAssigments<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>        + " retained the pre-restart assignment. " + randomAssignMsg);<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>    return assignments;<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>  }<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span><a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>  @Override<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>  public void initialize() throws HBaseIOException{<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>  }<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span><a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>  @Override<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>  public void regionOnline(RegionInfo regionInfo, ServerName sn) {<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>  }<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span><a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>  @Override<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>  public void regionOffline(RegionInfo regionInfo) {<a name="line.1541"></a>
 <span class="sourceLineNo">1542</span>  }<a name="line.1542"></a>
 <span class="sourceLineNo">1543</span><a name="line.1543"></a>
 <span class="sourceLineNo">1544</span>  @Override<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>  public void stop(String why) {<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>    LOG.info("Load Balancer stop requested: "+why);<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>    stopped = true;<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>  /**<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>   * Used to assign a single region to a random server.<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>   */<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>  private ServerName randomAssignment(Cluster cluster, RegionInfo regionInfo,<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>      List&lt;ServerName&gt; servers) {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>    int numServers = servers.size(); // servers is not null, numServers &gt; 1<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>    ServerName sn = null;<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>    final int maxIterations = numServers * 4;<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>    int iterations = 0;<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>    List&lt;ServerName&gt; usedSNs = new ArrayList&lt;&gt;(servers.size());<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>    do {<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      int i = RANDOM.nextInt(numServers);<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>      sn = servers.get(i);<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      if (!usedSNs.contains(sn)) {<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        usedSNs.add(sn);<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      }<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>    } while (cluster.wouldLowerAvailability(regionInfo, sn)<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>        &amp;&amp; iterations++ &lt; maxIterations);<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>    if (iterations &gt;= maxIterations) {<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      // We have reached the max. Means the servers that we collected is still lowering the<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      // availability<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      for (ServerName unusedServer : servers) {<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>        if (!usedSNs.contains(unusedServer)) {<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>          // check if any other unused server is there for us to use.<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>          // If so use it. Else we have not other go but to go with one of them<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>          if (!cluster.wouldLowerAvailability(regionInfo, unusedServer)) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>            sn = unusedServer;<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>            break;<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>      }<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>    }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>    cluster.doAssignRegion(regionInfo, sn);<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    return sn;<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>  }<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span><a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>  /**<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>   * Round robin a list of regions to a list of servers<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>   */<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>  private void roundRobinAssignment(Cluster cluster, List&lt;RegionInfo&gt; regions,<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      List&lt;RegionInfo&gt; unassignedRegions, List&lt;ServerName&gt; servers,<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignments) {<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span><a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>    int numServers = servers.size();<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    int numRegions = regions.size();<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    int max = (int) Math.ceil((float) numRegions / numServers);<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    int serverIdx = 0;<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    if (numServers &gt; 1) {<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>      serverIdx = RANDOM.nextInt(numServers);<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>    }<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>    int regionIdx = 0;<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span><a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    for (int j = 0; j &lt; numServers; j++) {<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>      ServerName server = servers.get((j + serverIdx) % numServers);<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>      List&lt;RegionInfo&gt; serverRegions = new ArrayList&lt;&gt;(max);<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>      for (int i = regionIdx; i &lt; numRegions; i += numServers) {<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>        RegionInfo region = regions.get(i % numRegions);<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>        if (cluster.wouldLowerAvailability(region, server)) {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>          unassignedRegions.add(region);<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>        } else {<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>          serverRegions.add(region);<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>          cluster.doAssignRegion(region, server);<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>        }<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>      }<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>      assignments.put(server, serverRegions);<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>      regionIdx++;<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>  protected Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getRegionAssignmentsByServer(<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>    Collection&lt;RegionInfo&gt; regions) {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    if (this.services != null &amp;&amp; this.services.getAssignmentManager() != null) {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      return this.services.getAssignmentManager().getSnapShotOfAssignment(regions);<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>    } else {<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      return new HashMap&lt;&gt;();<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>    }<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>  }<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span><a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>  @Override<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>  public void onConfigurationChange(Configuration conf) {<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">1545</span>  public boolean isStopped() {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>    return stopped;<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>  @Override<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>  public void stop(String why) {<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>    LOG.info("Load Balancer stop requested: "+why);<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>    stopped = true;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>  }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span><a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>  /**<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>   * Used to assign a single region to a random server.<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>   */<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>  private ServerName randomAssignment(Cluster cluster, RegionInfo regionInfo,<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>      List&lt;ServerName&gt; servers) {<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>    int numServers = servers.size(); // servers is not null, numServers &gt; 1<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>    ServerName sn = null;<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>    final int maxIterations = numServers * 4;<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>    int iterations = 0;<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>    List&lt;ServerName&gt; usedSNs = new ArrayList&lt;&gt;(servers.size());<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>    do {<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>      int i = RANDOM.nextInt(numServers);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      sn = servers.get(i);<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>      if (!usedSNs.contains(sn)) {<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>        usedSNs.add(sn);<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>      }<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>    } while (cluster.wouldLowerAvailability(regionInfo, sn)<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>        &amp;&amp; iterations++ &lt; maxIterations);<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>    if (iterations &gt;= maxIterations) {<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>      // We have reached the max. Means the servers that we collected is still lowering the<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      // availability<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      for (ServerName unusedServer : servers) {<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>        if (!usedSNs.contains(unusedServer)) {<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>          // check if any other unused server is there for us to use.<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>          // If so use it. Else we have not other go but to go with one of them<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>          if (!cluster.wouldLowerAvailability(regionInfo, unusedServer)) {<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>            sn = unusedServer;<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>            break;<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>          }<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      }<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>    }<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>    cluster.doAssignRegion(regionInfo, sn);<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>    return sn;<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>  }<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>   * Round robin a list of regions to a list of servers<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>   */<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>  private void roundRobinAssignment(Cluster cluster, List&lt;RegionInfo&gt; regions,<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>      List&lt;RegionInfo&gt; unassignedRegions, List&lt;ServerName&gt; servers,<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignments) {<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span><a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>    int numServers = servers.size();<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    int numRegions = regions.size();<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    int max = (int) Math.ceil((float) numRegions / numServers);<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    int serverIdx = 0;<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    if (numServers &gt; 1) {<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>      serverIdx = RANDOM.nextInt(numServers);<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    }<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>    int regionIdx = 0;<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span><a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>    for (int j = 0; j &lt; numServers; j++) {<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>      ServerName server = servers.get((j + serverIdx) % numServers);<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>      List&lt;RegionInfo&gt; serverRegions = new ArrayList&lt;&gt;(max);<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>      for (int i = regionIdx; i &lt; numRegions; i += numServers) {<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>        RegionInfo region = regions.get(i % numRegions);<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>        if (cluster.wouldLowerAvailability(region, server)) {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>          unassignedRegions.add(region);<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>        } else {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>          serverRegions.add(region);<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>          cluster.doAssignRegion(region, server);<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>      assignments.put(server, serverRegions);<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>      regionIdx++;<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>  protected Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getRegionAssignmentsByServer(<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    Collection&lt;RegionInfo&gt; regions) {<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>    if (this.services != null &amp;&amp; this.services.getAssignmentManager() != null) {<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      return this.services.getAssignmentManager().getSnapShotOfAssignment(regions);<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>    } else {<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      return new HashMap&lt;&gt;();<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>  public void onConfigurationChange(Configuration conf) {<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.DefaultRackManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.DefaultRackManager.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.DefaultRackManager.html
index d974429..e478f39 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.DefaultRackManager.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.DefaultRackManager.html
@@ -42,32 +42,32 @@
 <span class="sourceLineNo">034</span>import java.util.TreeMap;<a name="line.34"></a>
 <span class="sourceLineNo">035</span>import java.util.function.Predicate;<a name="line.35"></a>
 <span class="sourceLineNo">036</span>import java.util.stream.Collectors;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.commons.lang3.NotImplementedException;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.conf.Configuration;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HConstants;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HDFSBlocksDistribution;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.ServerMetrics;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ServerName;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.TableName;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.RackManager;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster.Action.Type;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.slf4j.Logger;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.slf4j.LoggerFactory;<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hbase.thirdparty.com.google.common.collect.ArrayListMultimap;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.62"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.commons.lang3.NotImplementedException;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HConstants;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HDFSBlocksDistribution;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ServerMetrics;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.ServerName;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.TableName;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.RackManager;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster.Action.Type;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hbase.thirdparty.com.google.common.collect.ArrayListMultimap;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.slf4j.Logger;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.slf4j.LoggerFactory;<a name="line.62"></a>
 <span class="sourceLineNo">063</span><a name="line.63"></a>
 <span class="sourceLineNo">064</span>/**<a name="line.64"></a>
 <span class="sourceLineNo">065</span> * The base class for load balancers. It provides the the functions used to by<a name="line.65"></a>
@@ -1462,181 +1462,186 @@
 <span class="sourceLineNo">1454</span>    for (Map.Entry&lt;RegionInfo, ServerName&gt; entry : regions.entrySet()) {<a name="line.1454"></a>
 <span class="sourceLineNo">1455</span>      RegionInfo region = entry.getKey();<a name="line.1455"></a>
 <span class="sourceLineNo">1456</span>      ServerName oldServerName = entry.getValue();<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>      if (!hasRegionReplica &amp;&amp; !RegionReplicaUtil.isDefaultReplica(region)) {<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>        hasRegionReplica = true;<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>      }<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>      List&lt;ServerName&gt; localServers = new ArrayList&lt;&gt;();<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>      if (oldServerName != null) {<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>        localServers = serversByHostname.get(oldServerName.getHostnameLowerCase());<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>      }<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>      if (localServers.isEmpty()) {<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>        // No servers on the new cluster match up with this hostname, assign randomly, later.<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>        randomAssignRegions.add(region);<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>        if (oldServerName != null) {<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>          oldHostsNoLongerPresent.add(oldServerName.getHostnameLowerCase());<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>        }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>      } else if (localServers.size() == 1) {<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>        // the usual case - one new server on same host<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>        ServerName target = localServers.get(0);<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>        assignments.get(target).add(region);<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>        numRetainedAssigments++;<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      } else {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        // multiple new servers in the cluster on this same host<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>        if (localServers.contains(oldServerName)) {<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>          assignments.get(oldServerName).add(region);<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>          numRetainedAssigments++;<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>        } else {<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>          ServerName target = null;<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>          for (ServerName tmp : localServers) {<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>            if (tmp.getPort() == oldServerName.getPort()) {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>              target = tmp;<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>              assignments.get(tmp).add(region);<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>              numRetainedAssigments++;<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>              break;<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>            }<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>          }<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>          if (target == null) {<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>            randomAssignRegions.add(region);<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>          }<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>    // If servers from prior assignment aren't present, then lets do randomAssignment on regions.<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>    if (randomAssignRegions.size() &gt; 0) {<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>      Cluster cluster = createCluster(servers, regions.keySet(), hasRegionReplica);<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>      for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : assignments.entrySet()) {<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>        ServerName sn = entry.getKey();<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>        for (RegionInfo region : entry.getValue()) {<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>          cluster.doAssignRegion(region, sn);<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>        }<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>      }<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>      for (RegionInfo region : randomAssignRegions) {<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>        ServerName target = randomAssignment(cluster, region, servers);<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>        assignments.get(target).add(region);<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>        numRandomAssignments++;<a name="line.1509"></a>
+<span class="sourceLineNo">1457</span>      // In the current set of regions even if one has region replica let us go with<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>      // getting the entire snapshot<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>      if (this.services != null &amp;&amp; this.services.getAssignmentManager() != null) { // for tests<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>        if (!hasRegionReplica &amp;&amp; this.services.getAssignmentManager().getRegionStates()<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>            .isReplicaAvailableForRegion(region)) {<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>          hasRegionReplica = true;<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>        }<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>      }<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>      List&lt;ServerName&gt; localServers = new ArrayList&lt;&gt;();<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>      if (oldServerName != null) {<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>        localServers = serversByHostname.get(oldServerName.getHostnameLowerCase());<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>      }<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>      if (localServers.isEmpty()) {<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>        // No servers on the new cluster match up with this hostname, assign randomly, later.<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>        randomAssignRegions.add(region);<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>        if (oldServerName != null) {<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>          oldHostsNoLongerPresent.add(oldServerName.getHostnameLowerCase());<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>        }<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>      } else if (localServers.size() == 1) {<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>        // the usual case - one new server on same host<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>        ServerName target = localServers.get(0);<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>        assignments.get(target).add(region);<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>        numRetainedAssigments++;<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>      } else {<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>        // multiple new servers in the cluster on this same host<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>        if (localServers.contains(oldServerName)) {<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>          assignments.get(oldServerName).add(region);<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>          numRetainedAssigments++;<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>        } else {<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>          ServerName target = null;<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>          for (ServerName tmp : localServers) {<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>            if (tmp.getPort() == oldServerName.getPort()) {<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>              target = tmp;<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>              assignments.get(tmp).add(region);<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>              numRetainedAssigments++;<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>              break;<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>          if (target == null) {<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>            randomAssignRegions.add(region);<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>          }<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>        }<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>      }<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>    }<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span><a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>    // If servers from prior assignment aren't present, then lets do randomAssignment on regions.<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>    if (randomAssignRegions.size() &gt; 0) {<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>      Cluster cluster = createCluster(servers, regions.keySet(), hasRegionReplica);<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>      for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : assignments.entrySet()) {<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>        ServerName sn = entry.getKey();<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>        for (RegionInfo region : entry.getValue()) {<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>          cluster.doAssignRegion(region, sn);<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>        }<a name="line.1509"></a>
 <span class="sourceLineNo">1510</span>      }<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>    }<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span><a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>    String randomAssignMsg = "";<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    if (numRandomAssignments &gt; 0) {<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>      randomAssignMsg =<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>          numRandomAssignments + " regions were assigned "<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>              + "to random hosts, since the old hosts for these regions are no "<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>              + "longer present in the cluster. These hosts were:\n  "<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>              + Joiner.on("\n  ").join(oldHostsNoLongerPresent);<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>    LOG.info("Reassigned " + regions.size() + " regions. " + numRetainedAssigments<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>        + " retained the pre-restart assignment. " + randomAssignMsg);<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>    return assignments;<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>  }<a name="line.1525"></a>
+<span class="sourceLineNo">1511</span>      for (RegionInfo region : randomAssignRegions) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>        ServerName target = randomAssignment(cluster, region, servers);<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        assignments.get(target).add(region);<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>        numRandomAssignments++;<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>      }<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>    }<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span><a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>    String randomAssignMsg = "";<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    if (numRandomAssignments &gt; 0) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>      randomAssignMsg =<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          numRandomAssignments + " regions were assigned "<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>              + "to random hosts, since the old hosts for these regions are no "<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>              + "longer present in the cluster. These hosts were:\n  "<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>              + Joiner.on("\n  ").join(oldHostsNoLongerPresent);<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>    }<a name="line.1525"></a>
 <span class="sourceLineNo">1526</span><a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>  @Override<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>  public void initialize() throws HBaseIOException{<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>  }<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span><a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>  @Override<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>  public void regionOnline(RegionInfo regionInfo, ServerName sn) {<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>  }<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>  @Override<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>  public void regionOffline(RegionInfo regionInfo) {<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 boolean isStopped() {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>    return stopped;<a name="line.1541"></a>
+<span class="sourceLineNo">1527</span>    LOG.info("Reassigned " + regions.size() + " regions. " + numRetainedAssigments<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>        + " retained the pre-restart assignment. " + randomAssignMsg);<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>    return assignments;<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>  }<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span><a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>  @Override<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>  public void initialize() throws HBaseIOException{<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>  }<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span><a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>  @Override<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>  public void regionOnline(RegionInfo regionInfo, ServerName sn) {<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>  }<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span><a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>  @Override<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>  public void regionOffline(RegionInfo regionInfo) {<a name="line.1541"></a>
 <span class="sourceLineNo">1542</span>  }<a name="line.1542"></a>
 <span class="sourceLineNo">1543</span><a name="line.1543"></a>
 <span class="sourceLineNo">1544</span>  @Override<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>  public void stop(String why) {<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>    LOG.info("Load Balancer stop requested: "+why);<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>    stopped = true;<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>  /**<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>   * Used to assign a single region to a random server.<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>   */<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>  private ServerName randomAssignment(Cluster cluster, RegionInfo regionInfo,<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>      List&lt;ServerName&gt; servers) {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>    int numServers = servers.size(); // servers is not null, numServers &gt; 1<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>    ServerName sn = null;<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>    final int maxIterations = numServers * 4;<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>    int iterations = 0;<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>    List&lt;ServerName&gt; usedSNs = new ArrayList&lt;&gt;(servers.size());<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>    do {<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      int i = RANDOM.nextInt(numServers);<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>      sn = servers.get(i);<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      if (!usedSNs.contains(sn)) {<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        usedSNs.add(sn);<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      }<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>    } while (cluster.wouldLowerAvailability(regionInfo, sn)<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>        &amp;&amp; iterations++ &lt; maxIterations);<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>    if (iterations &gt;= maxIterations) {<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      // We have reached the max. Means the servers that we collected is still lowering the<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      // availability<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      for (ServerName unusedServer : servers) {<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>        if (!usedSNs.contains(unusedServer)) {<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>          // check if any other unused server is there for us to use.<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>          // If so use it. Else we have not other go but to go with one of them<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>          if (!cluster.wouldLowerAvailability(regionInfo, unusedServer)) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>            sn = unusedServer;<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>            break;<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>      }<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>    }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>    cluster.doAssignRegion(regionInfo, sn);<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    return sn;<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>  }<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span><a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>  /**<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>   * Round robin a list of regions to a list of servers<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>   */<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>  private void roundRobinAssignment(Cluster cluster, List&lt;RegionInfo&gt; regions,<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      List&lt;RegionInfo&gt; unassignedRegions, List&lt;ServerName&gt; servers,<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignments) {<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span><a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>    int numServers = servers.size();<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    int numRegions = regions.size();<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    int max = (int) Math.ceil((float) numRegions / numServers);<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    int serverIdx = 0;<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    if (numServers &gt; 1) {<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>      serverIdx = RANDOM.nextInt(numServers);<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>    }<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>    int regionIdx = 0;<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span><a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    for (int j = 0; j &lt; numServers; j++) {<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>      ServerName server = servers.get((j + serverIdx) % numServers);<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>      List&lt;RegionInfo&gt; serverRegions = new ArrayList&lt;&gt;(max);<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>      for (int i = regionIdx; i &lt; numRegions; i += numServers) {<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>        RegionInfo region = regions.get(i % numRegions);<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>        if (cluster.wouldLowerAvailability(region, server)) {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>          unassignedRegions.add(region);<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>        } else {<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>          serverRegions.add(region);<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>          cluster.doAssignRegion(region, server);<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>        }<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>      }<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>      assignments.put(server, serverRegions);<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>      regionIdx++;<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>  protected Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getRegionAssignmentsByServer(<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>    Collection&lt;RegionInfo&gt; regions) {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    if (this.services != null &amp;&amp; this.services.getAssignmentManager() != null) {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      return this.services.getAssignmentManager().getSnapShotOfAssignment(regions);<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>    } else {<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      return new HashMap&lt;&gt;();<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>    }<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>  }<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span><a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>  @Override<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>  public void onConfigurationChange(Configuration conf) {<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">1545</span>  public boolean isStopped() {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>    return stopped;<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>  @Override<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>  public void stop(String why) {<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>    LOG.info("Load Balancer stop requested: "+why);<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>    stopped = true;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>  }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span><a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>  /**<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>   * Used to assign a single region to a random server.<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>   */<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>  private ServerName randomAssignment(Cluster cluster, RegionInfo regionInfo,<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>      List&lt;ServerName&gt; servers) {<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>    int numServers = servers.size(); // servers is not null, numServers &gt; 1<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>    ServerName sn = null;<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>    final int maxIterations = numServers * 4;<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>    int iterations = 0;<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>    List&lt;ServerName&gt; usedSNs = new ArrayList&lt;&gt;(servers.size());<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>    do {<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>      int i = RANDOM.nextInt(numServers);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      sn = servers.get(i);<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>      if (!usedSNs.contains(sn)) {<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>        usedSNs.add(sn);<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>      }<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>    } while (cluster.wouldLowerAvailability(regionInfo, sn)<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>        &amp;&amp; iterations++ &lt; maxIterations);<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>    if (iterations &gt;= maxIterations) {<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>      // We have reached the max. Means the servers that we collected is still lowering the<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      // availability<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      for (ServerName unusedServer : servers) {<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>        if (!usedSNs.contains(unusedServer)) {<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>          // check if any other unused server is there for us to use.<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>          // If so use it. Else we have not other go but to go with one of them<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>          if (!cluster.wouldLowerAvailability(regionInfo, unusedServer)) {<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>            sn = unusedServer;<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>            break;<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>          }<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      }<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>    }<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>    cluster.doAssignRegion(regionInfo, sn);<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>    return sn;<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>  }<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>   * Round robin a list of regions to a list of servers<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>   */<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>  private void roundRobinAssignment(Cluster cluster, List&lt;RegionInfo&gt; regions,<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>      List&lt;RegionInfo&gt; unassignedRegions, List&lt;ServerName&gt; servers,<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignments) {<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span><a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>    int numServers = servers.size();<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    int numRegions = regions.size();<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    int max = (int) Math.ceil((float) numRegions / numServers);<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    int serverIdx = 0;<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    if (numServers &gt; 1) {<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>      serverIdx = RANDOM.nextInt(numServers);<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    }<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>    int regionIdx = 0;<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span><a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>    for (int j = 0; j &lt; numServers; j++) {<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>      ServerName server = servers.get((j + serverIdx) % numServers);<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>      List&lt;RegionInfo&gt; serverRegions = new ArrayList&lt;&gt;(max);<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>      for (int i = regionIdx; i &lt; numRegions; i += numServers) {<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>        RegionInfo region = regions.get(i % numRegions);<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>        if (cluster.wouldLowerAvailability(region, server)) {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>          unassignedRegions.add(region);<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>        } else {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>          serverRegions.add(region);<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>          cluster.doAssignRegion(region, server);<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>      assignments.put(server, serverRegions);<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>      regionIdx++;<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>  protected Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getRegionAssignmentsByServer(<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    Collection&lt;RegionInfo&gt; regions) {<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>    if (this.services != null &amp;&amp; this.services.getAssignmentManager() != null) {<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      return this.services.getAssignmentManager().getSnapShotOfAssignment(regions);<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>    } else {<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      return new HashMap&lt;&gt;();<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>  public void onConfigurationChange(Configuration conf) {<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>
 
 
 


[13/18] hbase-site git commit: Published site at cebb725a9f4ab8dd9d3f306d21d53d6f56161c51.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/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 314b4e9..ba2baf3 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
@@ -45,766 +45,788 @@
 <span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.ServerName;<a name="line.37"></a>
 <span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.TableName;<a name="line.38"></a>
 <span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.master.RegionState.State;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.slf4j.Logger;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.slf4j.LoggerFactory;<a name="line.45"></a>
-<span class="sourceLineNo">046</span><a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.47"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.master.RegionState.State;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.slf4j.Logger;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.slf4j.LoggerFactory;<a name="line.47"></a>
 <span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>/**<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * RegionStates contains a set of Maps that describes the in-memory state of the AM, with<a name="line.50"></a>
-<span class="sourceLineNo">051</span> * the regions available in the system, the region in transition, the offline regions and<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * the servers holding regions.<a name="line.52"></a>
-<span class="sourceLineNo">053</span> */<a name="line.53"></a>
-<span class="sourceLineNo">054</span>@InterfaceAudience.Private<a name="line.54"></a>
-<span class="sourceLineNo">055</span>public class RegionStates {<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private static final Logger LOG = LoggerFactory.getLogger(RegionStates.class);<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  // This comparator sorts the RegionStates by time stamp then Region name.<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  // Comparing by timestamp alone can lead us to discard different RegionStates that happen<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  // to share a timestamp.<a name="line.60"></a>
-<span class="sourceLineNo">061</span>  private static class RegionStateStampComparator implements Comparator&lt;RegionState&gt; {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    @Override<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    public int compare(final RegionState l, final RegionState r) {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>      int stampCmp = Long.compare(l.getStamp(), r.getStamp());<a name="line.64"></a>
-<span class="sourceLineNo">065</span>      return stampCmp != 0 ? stampCmp : RegionInfo.COMPARATOR.compare(l.getRegion(), r.getRegion());<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    }<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>  public final static RegionStateStampComparator REGION_STATE_STAMP_COMPARATOR =<a name="line.69"></a>
-<span class="sourceLineNo">070</span>      new RegionStateStampComparator();<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  // TODO: Replace the ConcurrentSkipListMaps<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  /**<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * RegionName -- i.e. RegionInfo.getRegionName() -- as bytes to {@link RegionStateNode}<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   */<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private final ConcurrentSkipListMap&lt;byte[], RegionStateNode&gt; regionsMap =<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      new ConcurrentSkipListMap&lt;byte[], RegionStateNode&gt;(Bytes.BYTES_COMPARATOR);<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  private final ConcurrentSkipListMap&lt;RegionInfo, RegionStateNode&gt; regionInTransition =<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    new ConcurrentSkipListMap&lt;RegionInfo, RegionStateNode&gt;(RegionInfo.COMPARATOR);<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>   * Regions marked as offline on a read of hbase:meta. Unused or at least, once<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   * offlined, regions have no means of coming on line again. TODO.<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   */<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  private final ConcurrentSkipListMap&lt;RegionInfo, RegionStateNode&gt; regionOffline =<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    new ConcurrentSkipListMap&lt;RegionInfo, RegionStateNode&gt;();<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private final ConcurrentSkipListMap&lt;byte[], RegionFailedOpen&gt; regionFailedOpen =<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    new ConcurrentSkipListMap&lt;byte[], RegionFailedOpen&gt;(Bytes.BYTES_COMPARATOR);<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  private final ConcurrentHashMap&lt;ServerName, ServerStateNode&gt; serverMap =<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      new ConcurrentHashMap&lt;ServerName, ServerStateNode&gt;();<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>  public RegionStates() { }<a name="line.95"></a>
+<span class="sourceLineNo">049</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>/**<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * RegionStates contains a set of Maps that describes the in-memory state of the AM, with<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * the regions available in the system, the region in transition, the offline regions and<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * the servers holding regions.<a name="line.54"></a>
+<span class="sourceLineNo">055</span> */<a name="line.55"></a>
+<span class="sourceLineNo">056</span>@InterfaceAudience.Private<a name="line.56"></a>
+<span class="sourceLineNo">057</span>public class RegionStates {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  private static final Logger LOG = LoggerFactory.getLogger(RegionStates.class);<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>  // This comparator sorts the RegionStates by time stamp then Region name.<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  // Comparing by timestamp alone can lead us to discard different RegionStates that happen<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  // to share a timestamp.<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  private static class RegionStateStampComparator implements Comparator&lt;RegionState&gt; {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    @Override<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    public int compare(final RegionState l, final RegionState r) {<a name="line.65"></a>
+<span class="sourceLineNo">066</span>      int stampCmp = Long.compare(l.getStamp(), r.getStamp());<a name="line.66"></a>
+<span class="sourceLineNo">067</span>      return stampCmp != 0 ? stampCmp : RegionInfo.COMPARATOR.compare(l.getRegion(), r.getRegion());<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    }<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  }<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span>  public final static RegionStateStampComparator REGION_STATE_STAMP_COMPARATOR =<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      new RegionStateStampComparator();<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>  // TODO: Replace the ConcurrentSkipListMaps<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  /**<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   * RegionName -- i.e. RegionInfo.getRegionName() -- as bytes to {@link RegionStateNode}<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   */<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  private final ConcurrentSkipListMap&lt;byte[], RegionStateNode&gt; regionsMap =<a name="line.78"></a>
+<span class="sourceLineNo">079</span>      new ConcurrentSkipListMap&lt;byte[], RegionStateNode&gt;(Bytes.BYTES_COMPARATOR);<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>  private final ConcurrentSkipListMap&lt;RegionInfo, RegionStateNode&gt; regionInTransition =<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    new ConcurrentSkipListMap&lt;RegionInfo, RegionStateNode&gt;(RegionInfo.COMPARATOR);<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  /**<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   * Regions marked as offline on a read of hbase:meta. Unused or at least, once<a name="line.85"></a>
+<span class="sourceLineNo">086</span>   * offlined, regions have no means of coming on line again. TODO.<a name="line.86"></a>
+<span class="sourceLineNo">087</span>   */<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private final ConcurrentSkipListMap&lt;RegionInfo, RegionStateNode&gt; regionOffline =<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    new ConcurrentSkipListMap&lt;RegionInfo, RegionStateNode&gt;();<a name="line.89"></a>
+<span class="sourceLineNo">090</span><a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private final ConcurrentSkipListMap&lt;byte[], RegionFailedOpen&gt; regionFailedOpen =<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    new ConcurrentSkipListMap&lt;byte[], RegionFailedOpen&gt;(Bytes.BYTES_COMPARATOR);<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>  private final ConcurrentHashMap&lt;ServerName, ServerStateNode&gt; serverMap =<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      new ConcurrentHashMap&lt;ServerName, ServerStateNode&gt;();<a name="line.95"></a>
 <span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  public void clear() {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    regionsMap.clear();<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    regionInTransition.clear();<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    regionOffline.clear();<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    serverMap.clear();<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>  @VisibleForTesting<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  public boolean isRegionInRegionStates(final RegionInfo hri) {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    return (regionsMap.containsKey(hri.getRegionName()) || regionInTransition.containsKey(hri)<a name="line.106"></a>
-<span class="sourceLineNo">107</span>        || regionOffline.containsKey(hri));<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>  // ==========================================================================<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  //  RegionStateNode helpers<a name="line.111"></a>
+<span class="sourceLineNo">097</span>  public RegionStates() { }<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  public void clear() {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    regionsMap.clear();<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    regionInTransition.clear();<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    regionOffline.clear();<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    serverMap.clear();<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  }<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>  @VisibleForTesting<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  public boolean isRegionInRegionStates(final RegionInfo hri) {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    return (regionsMap.containsKey(hri.getRegionName()) || regionInTransition.containsKey(hri)<a name="line.108"></a>
+<span class="sourceLineNo">109</span>        || regionOffline.containsKey(hri));<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>  // ==========================================================================<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  @VisibleForTesting<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  RegionStateNode createRegionStateNode(RegionInfo regionInfo) {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    RegionStateNode newNode = new RegionStateNode(regionInfo, regionInTransition);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    RegionStateNode oldNode = regionsMap.putIfAbsent(regionInfo.getRegionName(), newNode);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    return oldNode != null ? oldNode : newNode;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  }<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span>  public RegionStateNode getOrCreateRegionStateNode(RegionInfo regionInfo) {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    RegionStateNode node = getRegionStateNodeFromName(regionInfo.getRegionName());<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    return node != null ? node : createRegionStateNode(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>  RegionStateNode getRegionStateNodeFromName(byte[] regionName) {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    return regionsMap.get(regionName);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  }<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span>  public RegionStateNode getRegionStateNode(RegionInfo regionInfo) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    return getRegionStateNodeFromName(regionInfo.getRegionName());<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  }<a name="line.131"></a>
-<span class="sourceLineNo">132</span><a name="line.132"></a>
-<span class="sourceLineNo">133</span>  public void deleteRegion(final RegionInfo regionInfo) {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    regionsMap.remove(regionInfo.getRegionName());<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    // See HBASE-20860<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    // After master restarts, merged regions' RIT state may not be cleaned,<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    // making sure they are cleaned here<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    if (regionInTransition.containsKey(regionInfo)) {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      regionInTransition.remove(regionInfo);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    // Remove from the offline regions map too if there.<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    if (this.regionOffline.containsKey(regionInfo)) {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      this.regionOffline.remove(regionInfo);<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><a name="line.147"></a>
-<span class="sourceLineNo">148</span>  public void deleteRegions(final List&lt;RegionInfo&gt; regionInfos) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    regionInfos.forEach(this::deleteRegion);<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  }<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span>  ArrayList&lt;RegionStateNode&gt; getTableRegionStateNodes(final TableName tableName) {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    final ArrayList&lt;RegionStateNode&gt; regions = new ArrayList&lt;RegionStateNode&gt;();<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      if (!node.getTable().equals(tableName)) break;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      regions.add(node);<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    }<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    return regions;<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>  ArrayList&lt;RegionState&gt; getTableRegionStates(final TableName tableName) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;();<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      if (!node.getTable().equals(tableName)) break;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      regions.add(node.toRegionState());<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    }<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    return regions;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>  ArrayList&lt;RegionInfo&gt; getTableRegionsInfo(final TableName tableName) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    final ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;RegionInfo&gt;();<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      if (!node.getTable().equals(tableName)) break;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      regions.add(node.getRegionInfo());<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    }<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    return regions;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  }<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>  Collection&lt;RegionStateNode&gt; getRegionStateNodes() {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    return regionsMap.values();<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  }<a name="line.181"></a>
-<span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>  public ArrayList&lt;RegionState&gt; getRegionStates() {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;(regionsMap.size());<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      regions.add(node.toRegionState());<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    return regions;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  }<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>  //  RegionState helpers<a name="line.192"></a>
+<span class="sourceLineNo">113</span>  //  RegionStateNode helpers<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  // ==========================================================================<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  @VisibleForTesting<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  RegionStateNode createRegionStateNode(RegionInfo regionInfo) {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    RegionStateNode newNode = new RegionStateNode(regionInfo, regionInTransition);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    RegionStateNode oldNode = regionsMap.putIfAbsent(regionInfo.getRegionName(), newNode);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    return oldNode != null ? oldNode : newNode;<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>  public RegionStateNode getOrCreateRegionStateNode(RegionInfo regionInfo) {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    RegionStateNode node = getRegionStateNodeFromName(regionInfo.getRegionName());<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    return node != null ? node : createRegionStateNode(regionInfo);<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>  RegionStateNode getRegionStateNodeFromName(byte[] regionName) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    return regionsMap.get(regionName);<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>  public RegionStateNode getRegionStateNode(RegionInfo regionInfo) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    return getRegionStateNodeFromName(regionInfo.getRegionName());<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>  public void deleteRegion(final RegionInfo regionInfo) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    regionsMap.remove(regionInfo.getRegionName());<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    // See HBASE-20860<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    // After master restarts, merged regions' RIT state may not be cleaned,<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    // making sure they are cleaned here<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    if (regionInTransition.containsKey(regionInfo)) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      regionInTransition.remove(regionInfo);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    // Remove from the offline regions map too if there.<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    if (this.regionOffline.containsKey(regionInfo)) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      this.regionOffline.remove(regionInfo);<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><a name="line.149"></a>
+<span class="sourceLineNo">150</span>  public void deleteRegions(final List&lt;RegionInfo&gt; regionInfos) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    regionInfos.forEach(this::deleteRegion);<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>  ArrayList&lt;RegionStateNode&gt; getTableRegionStateNodes(final TableName tableName) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    final ArrayList&lt;RegionStateNode&gt; regions = new ArrayList&lt;RegionStateNode&gt;();<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      if (!node.getTable().equals(tableName)) break;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      regions.add(node);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    }<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    return regions;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
+<span class="sourceLineNo">162</span><a name="line.162"></a>
+<span class="sourceLineNo">163</span>  ArrayList&lt;RegionState&gt; getTableRegionStates(final TableName tableName) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;();<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      if (!node.getTable().equals(tableName)) break;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      regions.add(node.toRegionState());<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    }<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    return regions;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  }<a name="line.170"></a>
+<span class="sourceLineNo">171</span><a name="line.171"></a>
+<span class="sourceLineNo">172</span>  ArrayList&lt;RegionInfo&gt; getTableRegionsInfo(final TableName tableName) {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    final ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;RegionInfo&gt;();<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      if (!node.getTable().equals(tableName)) break;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      regions.add(node.getRegionInfo());<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    }<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    return regions;<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>  Collection&lt;RegionStateNode&gt; getRegionStateNodes() {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    return regionsMap.values();<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>  public ArrayList&lt;RegionState&gt; getRegionStates() {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;(regionsMap.size());<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      regions.add(node.toRegionState());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    }<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    return regions;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  }<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
 <span class="sourceLineNo">193</span>  // ==========================================================================<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    return regionStateNode == null ? null : regionStateNode.toRegionState();<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>  public RegionState getRegionState(final String encodedRegionName) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    // TODO: Need a map &lt;encodedName, ...&gt; but it is just dispatch merge...<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        return node.toRegionState();<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      }<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    }<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    return null;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>  // ============================================================================================<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  //  TODO: helpers<a name="line.210"></a>
+<span class="sourceLineNo">194</span>  //  RegionState helpers<a name="line.194"></a>
+<span class="sourceLineNo">195</span>  // ==========================================================================<a name="line.195"></a>
+<span class="sourceLineNo">196</span>  public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.198"></a>
+<span class="sourceLineNo">199</span>  }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  public RegionState getRegionState(final String encodedRegionName) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    // TODO: Need a map &lt;encodedName, ...&gt; but it is just dispatch merge...<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>        return node.toRegionState();<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 null;<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>  // ============================================================================================<a name="line.211"></a>
-<span class="sourceLineNo">212</span>  public boolean hasTableRegionStates(final TableName tableName) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // TODO<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    return !getTableRegionStates(tableName).isEmpty();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  }<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>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   */<a name="line.219"></a>
-<span class="sourceLineNo">220</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(final TableName table) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    return getRegionsOfTable(table, false);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  }<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>  private HRegionLocation createRegionForReopen(RegionStateNode node) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    node.lock();<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    try {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      if (!include(node, false)) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        return null;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      }<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      if (node.isInState(State.OPEN)) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.231"></a>
-<span class="sourceLineNo">232</span>          node.getOpenSeqNum());<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      } else if (node.isInState(State.OPENING)) {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), -1);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      } else {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        return null;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      }<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    } finally {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      node.unlock();<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><a name="line.242"></a>
-<span class="sourceLineNo">243</span>  /**<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   * Get the regions to be reopened when modifying a table.<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   * &lt;p/&gt;<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   * Notice that the {@code openSeqNum} in the returned HRegionLocation is also used to indicate the<a name="line.246"></a>
-<span class="sourceLineNo">247</span>   * state of this region, positive means the region is in {@link State#OPEN}, -1 means<a name="line.247"></a>
-<span class="sourceLineNo">248</span>   * {@link State#OPENING}. And for regions in other states we do not need reopen them.<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   */<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  public List&lt;HRegionLocation&gt; getRegionsOfTableForReopen(TableName tableName) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    return getTableRegionStateNodes(tableName).stream().map(this::createRegionForReopen)<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      .filter(r -&gt; r != null).collect(Collectors.toList());<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>   * Check whether the region has been reopened. The meaning of the {@link HRegionLocation} is the<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * same with {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * &lt;p/&gt;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   * For a region which is in {@link State#OPEN} before, if the region state is changed or the open<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   * seq num is changed, we can confirm that it has been reopened.<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   * &lt;p/&gt;<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   * For a region which is in {@link State#OPENING} before, usually it will be in {@link State#OPEN}<a name="line.262"></a>
-<span class="sourceLineNo">263</span>   * now and we will schedule a MRP to reopen it. But there are several exceptions:<a name="line.263"></a>
-<span class="sourceLineNo">264</span>   * &lt;ul&gt;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>   * &lt;li&gt;The region is in state other than {@link State#OPEN} or {@link State#OPENING}.&lt;/li&gt;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>   * &lt;li&gt;The location of the region has been changed&lt;/li&gt;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * &lt;/ul&gt;<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * Of course the region could still be in {@link State#OPENING} state and still on the same<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   * server, then here we will still return a {@link HRegionLocation} for it, just like<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   * @param oldLoc the previous state/location of this region<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   * @return null if the region has been reopened, otherwise a new {@link HRegionLocation} which<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   *         means we still need to reopen the region.<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   * @see #getRegionsOfTableForReopen(TableName)<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   */<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public HRegionLocation checkReopened(HRegionLocation oldLoc) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    RegionStateNode node = getRegionStateNode(oldLoc.getRegion());<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    // HBASE-20921<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    // if the oldLoc's state node does not exist, that means the region is<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    // merged or split, no need to check it<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    if (node == null) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      return null;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    }<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    node.lock();<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    try {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      if (oldLoc.getSeqNum() &gt;= 0) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        // in OPEN state before<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        if (node.isInState(State.OPEN)) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          if (node.getOpenSeqNum() &gt; oldLoc.getSeqNum()) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>            // normal case, the region has been reopened<a name="line.290"></a>
-<span class="sourceLineNo">291</span>            return null;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>          } else {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>            // the open seq num does not change, need to reopen again<a name="line.293"></a>
-<span class="sourceLineNo">294</span>            return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.294"></a>
-<span class="sourceLineNo">295</span>              node.getOpenSeqNum());<a name="line.295"></a>
-<span class="sourceLineNo">296</span>          }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        } else {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>          // the state has been changed so we can make sure that the region has been reopened(not<a name="line.298"></a>
-<span class="sourceLineNo">299</span>          // finished maybe, but not a problem).<a name="line.299"></a>
-<span class="sourceLineNo">300</span>          return null;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        }<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      } else {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>        // in OPENING state before<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        if (!node.isInState(State.OPEN, State.OPENING)) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>          // not in OPEN or OPENING state, then we can make sure that the region has been<a name="line.305"></a>
-<span class="sourceLineNo">306</span>          // reopened(not finished maybe, but not a problem)<a name="line.306"></a>
-<span class="sourceLineNo">307</span>          return null;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>        } else {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>          if (!node.getRegionLocation().equals(oldLoc.getServerName())) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>            // the region has been moved, so we can make sure that the region has been reopened.<a name="line.310"></a>
-<span class="sourceLineNo">311</span>            return null;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>          }<a name="line.312"></a>
-<span class="sourceLineNo">313</span>          // normal case, we are still in OPENING state, or the reopen has been opened and the state<a name="line.313"></a>
-<span class="sourceLineNo">314</span>          // is changed to OPEN.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>          long openSeqNum = node.isInState(State.OPEN) ? node.getOpenSeqNum() : -1;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>          return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), openSeqNum);<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>    } finally {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      node.unlock();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  }<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>  /**<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   */<a name="line.326"></a>
-<span class="sourceLineNo">327</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, boolean offline) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    return getRegionsOfTable(table, state -&gt; include(state, 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>  /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   *         &lt;code&gt;offline&lt;/code&gt; to true. Does not include regions that are in the<a name="line.333"></a>
-<span class="sourceLineNo">334</span>   *         {@link State#SPLIT} state.<a name="line.334"></a>
-<span class="sourceLineNo">335</span>   */<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  private List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, Predicate&lt;RegionStateNode&gt; filter) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    return getTableRegionStateNodes(table).stream().filter(filter).map(n -&gt; n.getRegionInfo())<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      .collect(Collectors.toList());<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>  /**<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   * Utility. Whether to include region in list of regions. Default is to<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * weed out split and offline regions.<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   * @return True if we should include the &lt;code&gt;node&lt;/code&gt; (do not include<a name="line.344"></a>
-<span class="sourceLineNo">345</span>   * if split or offline unless &lt;code&gt;offline&lt;/code&gt; is set to true.<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   */<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  boolean include(final RegionStateNode node, final boolean offline) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    if (LOG.isTraceEnabled()) {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    if (node.isInState(State.SPLIT)) return false;<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    if (node.isInState(State.OFFLINE) &amp;&amp; !offline) return false;<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    final RegionInfo hri = node.getRegionInfo();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    return (!hri.isOffline() &amp;&amp; !hri.isSplit()) ||<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        ((hri.isOffline() || hri.isSplit()) &amp;&amp; offline);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>  }<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>   * Returns the set of regions hosted by the specified server<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   * @param serverName the server we are interested in<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   * @return set of RegionInfo hosted by the specified server<a name="line.361"></a>
-<span class="sourceLineNo">362</span>   */<a name="line.362"></a>
-<span class="sourceLineNo">363</span>  public List&lt;RegionInfo&gt; getServerRegionInfoSet(final ServerName serverName) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    ServerStateNode serverInfo = getServerNode(serverName);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    if (serverInfo == null) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      return Collections.emptyList();<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>    synchronized (serverInfo) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      return serverInfo.getRegionInfoList();<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    }<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>  // Split helpers<a name="line.375"></a>
-<span class="sourceLineNo">376</span>  // These methods will only be called in ServerCrashProcedure, and at the end of SCP we will remove<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  // the ServerStateNode by calling removeServer.<a name="line.377"></a>
-<span class="sourceLineNo">378</span>  // ============================================================================================<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>  private void setServerState(ServerName serverName, ServerState state) {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    synchronized (serverNode) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      serverNode.setState(state);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    }<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>  /**<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   * Call this when we start meta log splitting a crashed Server.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   * @see #metaLogSplit(ServerName)<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   */<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  public void metaLogSplitting(ServerName serverName) {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    setServerState(serverName, ServerState.SPLITTING_META);<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>  /**<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   * Called after we've split the meta logs on a crashed Server.<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * @see #metaLogSplitting(ServerName)<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   */<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  public void metaLogSplit(ServerName serverName) {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    setServerState(serverName, ServerState.SPLITTING_META_DONE);<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>  /**<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * Call this when we start log splitting for a crashed Server.<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * @see #logSplit(ServerName)<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   */<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  public void logSplitting(final ServerName serverName) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    setServerState(serverName, ServerState.SPLITTING);<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>  /**<a name="line.411"></a>
-<span class="sourceLineNo">412</span>   * Called after we've split all logs on a crashed Server.<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * @see #logSplitting(ServerName)<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   */<a name="line.414"></a>
-<span class="sourceLineNo">415</span>  public void logSplit(final ServerName serverName) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    setServerState(serverName, ServerState.OFFLINE);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>  }<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span>  public void updateRegionState(RegionInfo regionInfo, State state) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    regionNode.lock();<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    try {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      regionNode.setState(state);<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    } finally {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      regionNode.unlock();<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><a name="line.428"></a>
-<span class="sourceLineNo">429</span>  // ============================================================================================<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  //  TODO:<a name="line.430"></a>
+<span class="sourceLineNo">212</span>  //  TODO: helpers<a name="line.212"></a>
+<span class="sourceLineNo">213</span>  // ============================================================================================<a name="line.213"></a>
+<span class="sourceLineNo">214</span>  public boolean hasTableRegionStates(final TableName tableName) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    // TODO<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    return !getTableRegionStates(tableName).isEmpty();<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>  /**<a name="line.219"></a>
+<span class="sourceLineNo">220</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   */<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(final TableName table) {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    return getRegionsOfTable(table, false);<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>  private HRegionLocation createRegionForReopen(RegionStateNode node) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    node.lock();<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    try {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      if (!include(node, false)) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        return null;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      if (node.isInState(State.OPEN)) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.233"></a>
+<span class="sourceLineNo">234</span>          node.getOpenSeqNum());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      } else if (node.isInState(State.OPENING)) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), -1);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      } else {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>        return null;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    } finally {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      node.unlock();<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><a name="line.244"></a>
+<span class="sourceLineNo">245</span>  /**<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   * Get the regions to be reopened when modifying a table.<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   * &lt;p/&gt;<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   * Notice that the {@code openSeqNum} in the returned HRegionLocation is also used to indicate the<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * state of this region, positive means the region is in {@link State#OPEN}, -1 means<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * {@link State#OPENING}. And for regions in other states we do not need reopen them.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  public List&lt;HRegionLocation&gt; getRegionsOfTableForReopen(TableName tableName) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    return getTableRegionStateNodes(tableName).stream().map(this::createRegionForReopen)<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      .filter(r -&gt; r != null).collect(Collectors.toList());<a name="line.254"></a>
+<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>  /**<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   * Check whether the region has been reopened. The meaning of the {@link HRegionLocation} is the<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   * same with {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   * &lt;p/&gt;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   * For a region which is in {@link State#OPEN} before, if the region state is changed or the open<a name="line.261"></a>
+<span class="sourceLineNo">262</span>   * seq num is changed, we can confirm that it has been reopened.<a name="line.262"></a>
+<span class="sourceLineNo">263</span>   * &lt;p/&gt;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>   * For a region which is in {@link State#OPENING} before, usually it will be in {@link State#OPEN}<a name="line.264"></a>
+<span class="sourceLineNo">265</span>   * now and we will schedule a MRP to reopen it. But there are several exceptions:<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   * &lt;ul&gt;<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   * &lt;li&gt;The region is in state other than {@link State#OPEN} or {@link State#OPENING}.&lt;/li&gt;<a name="line.267"></a>
+<span class="sourceLineNo">268</span>   * &lt;li&gt;The location of the region has been changed&lt;/li&gt;<a name="line.268"></a>
+<span class="sourceLineNo">269</span>   * &lt;/ul&gt;<a name="line.269"></a>
+<span class="sourceLineNo">270</span>   * Of course the region could still be in {@link State#OPENING} state and still on the same<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * server, then here we will still return a {@link HRegionLocation} for it, just like<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   * @param oldLoc the previous state/location of this region<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   * @return null if the region has been reopened, otherwise a new {@link HRegionLocation} which<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   *         means we still need to reopen the region.<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * @see #getRegionsOfTableForReopen(TableName)<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   */<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  public HRegionLocation checkReopened(HRegionLocation oldLoc) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    RegionStateNode node = getRegionStateNode(oldLoc.getRegion());<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    // HBASE-20921<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    // if the oldLoc's state node does not exist, that means the region is<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    // merged or split, no need to check it<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    if (node == null) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      return null;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    }<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    node.lock();<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    try {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      if (oldLoc.getSeqNum() &gt;= 0) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        // in OPEN state before<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        if (node.isInState(State.OPEN)) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          if (node.getOpenSeqNum() &gt; oldLoc.getSeqNum()) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>            // normal case, the region has been reopened<a name="line.292"></a>
+<span class="sourceLineNo">293</span>            return null;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>          } else {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>            // the open seq num does not change, need to reopen again<a name="line.295"></a>
+<span class="sourceLineNo">296</span>            return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.296"></a>
+<span class="sourceLineNo">297</span>              node.getOpenSeqNum());<a name="line.297"></a>
+<span class="sourceLineNo">298</span>          }<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        } else {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>          // the state has been changed so we can make sure that the region has been reopened(not<a name="line.300"></a>
+<span class="sourceLineNo">301</span>          // finished maybe, but not a problem).<a name="line.301"></a>
+<span class="sourceLineNo">302</span>          return null;<a name="line.302"></a>
+<span class="sourceLineNo">303</span>        }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      } else {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        // in OPENING state before<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        if (!node.isInState(State.OPEN, State.OPENING)) {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>          // not in OPEN or OPENING state, then we can make sure that the region has been<a name="line.307"></a>
+<span class="sourceLineNo">308</span>          // reopened(not finished maybe, but not a problem)<a name="line.308"></a>
+<span class="sourceLineNo">309</span>          return null;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        } else {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>          if (!node.getRegionLocation().equals(oldLoc.getServerName())) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>            // the region has been moved, so we can make sure that the region has been reopened.<a name="line.312"></a>
+<span class="sourceLineNo">313</span>            return null;<a name="line.313"></a>
+<span class="sourceLineNo">314</span>          }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>          // normal case, we are still in OPENING state, or the reopen has been opened and the state<a name="line.315"></a>
+<span class="sourceLineNo">316</span>          // is changed to OPEN.<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          long openSeqNum = node.isInState(State.OPEN) ? node.getOpenSeqNum() : -1;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>          return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), openSeqNum);<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>    } finally {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      node.unlock();<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
+<span class="sourceLineNo">324</span>  }<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span>  /**<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   */<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, boolean offline) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    return getRegionsOfTable(table, state -&gt; include(state, offline));<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>   * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   *         &lt;code&gt;offline&lt;/code&gt; to true. Does not include regions that are in the<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   *         {@link State#SPLIT} state.<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   */<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  private List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, Predicate&lt;RegionStateNode&gt; filter) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    return getTableRegionStateNodes(table).stream().filter(filter).map(n -&gt; n.getRegionInfo())<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      .collect(Collectors.toList());<a name="line.340"></a>
+<span class="sourceLineNo">341</span>  }<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>  /**<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * Utility. Whether to include region in list of regions. Default is to<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   * weed out split and offline regions.<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * @return True if we should include the &lt;code&gt;node&lt;/code&gt; (do not include<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   * if split or offline unless &lt;code&gt;offline&lt;/code&gt; is set to true.<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   */<a name="line.348"></a>
+<span class="sourceLineNo">349</span>  boolean include(final RegionStateNode node, final boolean offline) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    if (LOG.isTraceEnabled()) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    }<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    if (node.isInState(State.SPLIT)) return false;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    if (node.isInState(State.OFFLINE) &amp;&amp; !offline) return false;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    final RegionInfo hri = node.getRegionInfo();<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    return (!hri.isOffline() &amp;&amp; !hri.isSplit()) ||<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        ((hri.isOffline() || hri.isSplit()) &amp;&amp; offline);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>  /**<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   * Returns the set of regions hosted by the specified server<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   * @param serverName the server we are interested in<a name="line.362"></a>
+<span class="sourceLineNo">363</span>   * @return set of RegionInfo hosted by the specified server<a name="line.363"></a>
+<span class="sourceLineNo">364</span>   */<a name="line.364"></a>
+<span class="sourceLineNo">365</span>  public List&lt;RegionInfo&gt; getServerRegionInfoSet(final ServerName serverName) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    ServerStateNode serverInfo = getServerNode(serverName);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    if (serverInfo == null) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      return Collections.emptyList();<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>    synchronized (serverInfo) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      return serverInfo.getRegionInfoList();<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><a name="line.375"></a>
+<span class="sourceLineNo">376</span>  // ============================================================================================<a name="line.376"></a>
+<span class="sourceLineNo">377</span>  // Split helpers<a name="line.377"></a>
+<span class="sourceLineNo">378</span>  // These methods will only be called in ServerCrashProcedure, and at the end of SCP we will remove<a name="line.378"></a>
+<span class="sourceLineNo">379</span>  // the ServerStateNode by calling removeServer.<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 void setServerState(ServerName serverName, ServerState state) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    synchronized (serverNode) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      serverNode.setState(state);<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>  /**<a name="line.389"></a>
+<span class="sourceLineNo">390</span>   * Call this when we start meta log splitting a crashed Server.<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * @see #metaLogSplit(ServerName)<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   */<a name="line.392"></a>
+<span class="sourceLineNo">393</span>  public void metaLogSplitting(ServerName serverName) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    setServerState(serverName, ServerState.SPLITTING_META);<a name="line.394"></a>
+<span class="sourceLineNo">395</span>  }<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>   * Called after we've split the meta logs on a crashed Server.<a name="line.398"></a>
+<span class="sourceLineNo">399</span>   * @see #metaLogSplitting(ServerName)<a name="line.399"></a>
+<span class="sourceLineNo">400</span>   */<a name="line.400"></a>
+<span class="sourceLineNo">401</span>  public void metaLogSplit(ServerName serverName) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>    setServerState(serverName, ServerState.SPLITTING_META_DONE);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>  }<a name="line.403"></a>
+<span class="sourceLineNo">404</span><a name="line.404"></a>
+<span class="sourceLineNo">405</span>  /**<a name="line.405"></a>
+<span class="sourceLineNo">406</span>   * Call this when we start log splitting for a crashed Server.<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   * @see #logSplit(ServerName)<a name="line.407"></a>
+<span class="sourceLineNo">408</span>   */<a name="line.408"></a>
+<span class="sourceLineNo">409</span>  public void logSplitting(final ServerName serverName) {<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    setServerState(serverName, ServerState.SPLITTING);<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  }<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>   * Called after we've split all logs on a crashed Server.<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   * @see #logSplitting(ServerName)<a name="line.415"></a>
+<span class="sourceLineNo">416</span>   */<a name="line.416"></a>
+<span class="sourceLineNo">417</span>  public void logSplit(final ServerName serverName) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    setServerState(serverName, ServerState.OFFLINE);<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>  public void updateRegionState(RegionInfo regionInfo, State state) {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    regionNode.lock();<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    try {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      regionNode.setState(state);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    } finally {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>      regionNode.unlock();<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>  }<a name="line.429"></a>
+<span class="sourceLineNo">430</span><a name="line.430"></a>
 <span class="sourceLineNo">431</span>  // ============================================================================================<a name="line.431"></a>
-<span class="sourceLineNo">432</span>  public List&lt;RegionInfo&gt; getAssignedRegions() {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    final List&lt;RegionInfo&gt; result = new ArrayList&lt;RegionInfo&gt;();<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      if (!node.isInTransition()) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>        result.add(node.getRegionInfo());<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    }<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    return result;<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>  public boolean isRegionInState(RegionInfo regionInfo, State... state) {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    RegionStateNode regionNode = getRegionStateNode(regionInfo);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    if (regionNode != null) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      regionNode.lock();<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      try {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>        return regionNode.isInState(state);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      } finally {<a name="line.448"></a>
-<span class="sourceLineNo">449</span>        regionNode.unlock();<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>    return false;<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>  public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    return isRegionInState(regionInfo, State.OPEN);<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>  /**<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   */<a name="line.461"></a>
-<span class="sourceLineNo">462</span>  public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>  }<a name="line.464"></a>
-<span class="sourceLineNo">465</span><a name="line.465"></a>
-<span class="sourceLineNo">466</span>  public Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getSnapShotOfAssignment(<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      final Collection&lt;RegionInfo&gt; regions) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    final Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; result = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    if (regions != null) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      for (RegionInfo hri : regions) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        final RegionStateNode node = getRegionStateNode(hri);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        if (node == null) {<a name="line.472"></a>
-<span class="sourceLineNo">473</span>          continue;<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        }<a name="line.474"></a>
-<span class="sourceLineNo">475</span>        createSnapshot(node, result);<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      }<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    } else {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      for (RegionStateNode node : regionsMap.values()) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        if (node == null) {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>          continue;<a name="line.480"></a>
-<span class="sourceLineNo">481</span>        }<a name="line.481"></a>
-<span class="sourceLineNo">482</span>        createSnapshot(node, result);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      }<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    return result;<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 void createSnapshot(RegionStateNode node, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; result) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    final ServerName serverName = node.getRegionLocation();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    if (serverName == null) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      return;<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>    List&lt;RegionInfo&gt; serverRegions = result.get(serverName);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    if (serverRegions == null) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      serverRegions = new ArrayList&lt;RegionInfo&gt;();<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      result.put(serverName, serverRegions);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    serverRegions.add(node.getRegionInfo());<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>  public Map&lt;RegionInfo, ServerName&gt; getRegionAssignments() {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    final HashMap&lt;RegionInfo, ServerName&gt; assignments = new HashMap&lt;RegionInfo, ServerName&gt;();<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    }<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    return assignments;<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>  public Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; getRegionByStateOfTable(TableName tableName) {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    final State[] states = State.values();<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    final Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; tableRegions =<a name="line.512"></a>
-<span class="sourceLineNo">513</span>        new HashMap&lt;State, List&lt;RegionInfo&gt;&gt;(states.length);<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    for (int i = 0; i &lt; states.length; ++i) {<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      tableRegions.put(states[i], new ArrayList&lt;RegionInfo&gt;());<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      if (node.getTable().equals(tableName)) {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      }<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    }<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    return tableRegions;<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>  public ServerName getRegionServerOfRegion(RegionInfo regionInfo) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    RegionStateNode regionNode = getRegionStateNode(regionInfo);<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    if (regionNode != null) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      regionNode.lock();<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      try {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>        ServerName server = regionNode.getRegionLocation();<a name="line.531"></a>
-<span class="sourceLineNo">532</span>        return server != null ? server : regionNode.getLastHost();<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      } finally {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>        regionNode.unlock();<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      }<a name="line.535"></

<TRUNCATED>

[03/18] hbase-site git commit: Published site at cebb725a9f4ab8dd9d3f306d21d53d6f56161c51.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/testdevapidocs/src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html
index 6c84f24..1b61e34 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.html
@@ -30,232 +30,231 @@
 <span class="sourceLineNo">022</span>import static org.junit.Assert.assertEquals;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import static org.junit.Assert.assertFalse;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import static org.junit.Assert.assertTrue;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import static org.junit.Assert.fail;<a name="line.25"></a>
-<span class="sourceLineNo">026</span><a name="line.26"></a>
-<span class="sourceLineNo">027</span>import com.google.protobuf.ByteString;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.io.IOException;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.security.PrivilegedExceptionAction;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.List;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.TableName;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.client.Result;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.Table;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.NameBytesPair;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.protobuf.generated.VisibilityLabelsProtos.ListLabelsResponse;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.protobuf.generated.VisibilityLabelsProtos.VisibilityLabelsResponse;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.security.User;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.testclassification.SecurityTests;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.junit.Assert;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.junit.BeforeClass;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.junit.ClassRule;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.junit.Test;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.junit.experimental.categories.Category;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.slf4j.Logger;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.slf4j.LoggerFactory;<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>@Category({SecurityTests.class, MediumTests.class})<a name="line.59"></a>
-<span class="sourceLineNo">060</span>public class TestVisibilityLabelsWithDefaultVisLabelService extends TestVisibilityLabels {<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  @ClassRule<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.63"></a>
-<span class="sourceLineNo">064</span>      HBaseClassTestRule.forClass(TestVisibilityLabelsWithDefaultVisLabelService.class);<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span>  private static final Logger LOG = LoggerFactory.getLogger(<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    TestVisibilityLabelsWithDefaultVisLabelService.class);<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>  @BeforeClass<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  public static void setupBeforeClass() throws Exception {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    // setup configuration<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    conf = TEST_UTIL.getConfiguration();<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    VisibilityTestUtil.enableVisiblityLabels(conf);<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    conf.setClass(VisibilityUtils.VISIBILITY_LABEL_GENERATOR_CLASS, SimpleScanLabelGenerator.class,<a name="line.74"></a>
-<span class="sourceLineNo">075</span>        ScanLabelGenerator.class);<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    conf.set("hbase.superuser", "admin");<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    TEST_UTIL.startMiniCluster(2);<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    SUPERUSER = User.createUserForTesting(conf, "admin", new String[] { "supergroup" });<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    USER1 = User.createUserForTesting(conf, "user1", new String[] {});<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>    // Wait for the labels table to become available<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    TEST_UTIL.waitTableEnabled(LABELS_TABLE_NAME.getName(), 50000);<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    addLabels();<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>  @Test<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  public void testAddLabels() throws Throwable {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    PrivilegedExceptionAction&lt;VisibilityLabelsResponse&gt; action =<a name="line.88"></a>
-<span class="sourceLineNo">089</span>        new PrivilegedExceptionAction&lt;VisibilityLabelsResponse&gt;() {<a name="line.89"></a>
-<span class="sourceLineNo">090</span>      @Override<a name="line.90"></a>
-<span class="sourceLineNo">091</span>      public VisibilityLabelsResponse run() throws Exception {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>        String[] labels = { "L1", SECRET, "L2", "invalid~", "L3" };<a name="line.92"></a>
-<span class="sourceLineNo">093</span>        VisibilityLabelsResponse response = null;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>        try (Connection conn = ConnectionFactory.createConnection(conf)) {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>          response = VisibilityClient.addLabels(conn, labels);<a name="line.95"></a>
-<span class="sourceLineNo">096</span>        } catch (Throwable e) {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>          fail("Should not have thrown exception");<a name="line.97"></a>
-<span class="sourceLineNo">098</span>        }<a name="line.98"></a>
-<span class="sourceLineNo">099</span>        List&lt;RegionActionResult&gt; resultList = response.getResultList();<a name="line.99"></a>
-<span class="sourceLineNo">100</span>        assertEquals(5, resultList.size());<a name="line.100"></a>
-<span class="sourceLineNo">101</span>        assertTrue(resultList.get(0).getException().getValue().isEmpty());<a name="line.101"></a>
-<span class="sourceLineNo">102</span>        assertEquals("org.apache.hadoop.hbase.DoNotRetryIOException", resultList.get(1)<a name="line.102"></a>
-<span class="sourceLineNo">103</span>            .getException().getName());<a name="line.103"></a>
-<span class="sourceLineNo">104</span>        assertTrue(Bytes.toString(resultList.get(1).getException().getValue().toByteArray())<a name="line.104"></a>
-<span class="sourceLineNo">105</span>            .contains(<a name="line.105"></a>
-<span class="sourceLineNo">106</span>                "org.apache.hadoop.hbase.security.visibility.LabelAlreadyExistsException: "<a name="line.106"></a>
-<span class="sourceLineNo">107</span>                    + "Label 'secret' already exists"));<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        assertTrue(resultList.get(2).getException().getValue().isEmpty());<a name="line.108"></a>
-<span class="sourceLineNo">109</span>        assertTrue(resultList.get(3).getException().getValue().isEmpty());<a name="line.109"></a>
-<span class="sourceLineNo">110</span>        assertTrue(resultList.get(4).getException().getValue().isEmpty());<a name="line.110"></a>
-<span class="sourceLineNo">111</span>        return null;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>      }<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    };<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    SUPERUSER.runAs(action);<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>  @Test<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  public void testAddVisibilityLabelsOnRSRestart() throws Exception {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    List&lt;RegionServerThread&gt; regionServerThreads = TEST_UTIL.getHBaseCluster()<a name="line.119"></a>
-<span class="sourceLineNo">120</span>        .getRegionServerThreads();<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    for (RegionServerThread rsThread : regionServerThreads) {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      rsThread.getRegionServer().abort("Aborting ");<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    }<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    // Start one new RS<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    RegionServerThread rs = TEST_UTIL.getHBaseCluster().startRegionServer();<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    waitForLabelsRegionAvailability(rs.getRegionServer());<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    final AtomicBoolean vcInitialized = new AtomicBoolean(true);<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    do {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      PrivilegedExceptionAction&lt;VisibilityLabelsResponse&gt; action =<a name="line.129"></a>
-<span class="sourceLineNo">130</span>          new PrivilegedExceptionAction&lt;VisibilityLabelsResponse&gt;() {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>        @Override<a name="line.131"></a>
-<span class="sourceLineNo">132</span>        public VisibilityLabelsResponse run() throws Exception {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>          String[] labels = { SECRET, CONFIDENTIAL, PRIVATE, "ABC", "XYZ" };<a name="line.133"></a>
-<span class="sourceLineNo">134</span>          try (Connection conn = ConnectionFactory.createConnection(conf)) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>            VisibilityLabelsResponse resp = VisibilityClient.addLabels(conn, labels);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>            List&lt;RegionActionResult&gt; results = resp.getResultList();<a name="line.136"></a>
-<span class="sourceLineNo">137</span>            if (results.get(0).hasException()) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>              NameBytesPair pair = results.get(0).getException();<a name="line.138"></a>
-<span class="sourceLineNo">139</span>              Throwable t = ProtobufUtil.toException(pair);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>              LOG.debug("Got exception writing labels", t);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>              if (t instanceof VisibilityControllerNotReadyException) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>                vcInitialized.set(false);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>                LOG.warn("VisibilityController was not yet initialized");<a name="line.143"></a>
-<span class="sourceLineNo">144</span>                Threads.sleep(10);<a name="line.144"></a>
-<span class="sourceLineNo">145</span>              } else {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>                vcInitialized.set(true);<a name="line.146"></a>
-<span class="sourceLineNo">147</span>              }<a name="line.147"></a>
-<span class="sourceLineNo">148</span>            } else LOG.debug("new labels added: " + resp);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>          } catch (Throwable t) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>            throw new IOException(t);<a name="line.150"></a>
-<span class="sourceLineNo">151</span>          }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>          return null;<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>      SUPERUSER.runAs(action);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    } while (!vcInitialized.get());<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    // Scan the visibility label<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    Scan s = new Scan();<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    s.setAuthorizations(new Authorizations(VisibilityUtils.SYSTEM_LABEL));<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span>    int i = 0;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    try (Table ht = TEST_UTIL.getConnection().getTable(LABELS_TABLE_NAME);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>         ResultScanner scanner = ht.getScanner(s)) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      while (true) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        Result next = scanner.next();<a name="line.165"></a>
-<span class="sourceLineNo">166</span>        if (next == null) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>          break;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>        }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>        i++;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    }<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    // One label is the "system" label.<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    Assert.assertEquals("The count should be 13", 13, i);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  }<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>  @Test<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  public void testListLabels() throws Throwable {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    PrivilegedExceptionAction&lt;ListLabelsResponse&gt; action =<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        new PrivilegedExceptionAction&lt;ListLabelsResponse&gt;() {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      @Override<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      public ListLabelsResponse run() throws Exception {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        ListLabelsResponse response = null;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>        try (Connection conn = ConnectionFactory.createConnection(conf)) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>          response = VisibilityClient.listLabels(conn, null);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        } catch (Throwable e) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>          fail("Should not have thrown exception");<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        }<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        // The addLabels() in setup added:<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        // { SECRET, TOPSECRET, CONFIDENTIAL, PUBLIC, PRIVATE, COPYRIGHT, ACCENT,<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        //  UNICODE_VIS_TAG, UC1, UC2 };<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        // The previous tests added 2 more labels: ABC, XYZ<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        // The 'system' label is excluded.<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        List&lt;ByteString&gt; labels = response.getLabelList();<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        assertEquals(12, labels.size());<a name="line.194"></a>
-<span class="sourceLineNo">195</span>        assertTrue(labels.contains(ByteString.copyFrom(SECRET.getBytes())));<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        assertTrue(labels.contains(ByteString.copyFrom(TOPSECRET.getBytes())));<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        assertTrue(labels.contains(ByteString.copyFrom(CONFIDENTIAL.getBytes())));<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        assertTrue(labels.contains(ByteString.copyFrom("ABC".getBytes())));<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        assertTrue(labels.contains(ByteString.copyFrom("XYZ".getBytes())));<a name="line.199"></a>
-<span class="sourceLineNo">200</span>        assertFalse(labels.contains(ByteString.copyFrom(SYSTEM_LABEL.getBytes())));<a name="line.200"></a>
-<span class="sourceLineNo">201</span>        return null;<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>    SUPERUSER.runAs(action);<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>  @Test<a name="line.207"></a>
-<span class="sourceLineNo">208</span>  public void testListLabelsWithRegEx() throws Throwable {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    PrivilegedExceptionAction&lt;ListLabelsResponse&gt; action =<a name="line.209"></a>
-<span class="sourceLineNo">210</span>        new PrivilegedExceptionAction&lt;ListLabelsResponse&gt;() {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      @Override<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      public ListLabelsResponse run() throws Exception {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        ListLabelsResponse response = null;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        try (Connection conn = ConnectionFactory.createConnection(conf)) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          response = VisibilityClient.listLabels(conn, ".*secret");<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        } catch (Throwable e) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          fail("Should not have thrown exception");<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        // Only return the labels that end with 'secret'<a name="line.219"></a>
-<span class="sourceLineNo">220</span>        List&lt;ByteString&gt; labels = response.getLabelList();<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        assertEquals(2, labels.size());<a name="line.221"></a>
-<span class="sourceLineNo">222</span>        assertTrue(labels.contains(ByteString.copyFrom(SECRET.getBytes())));<a name="line.222"></a>
-<span class="sourceLineNo">223</span>        assertTrue(labels.contains(ByteString.copyFrom(TOPSECRET.getBytes())));<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        return null;<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>    SUPERUSER.runAs(action);<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>  @Test<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  public void testVisibilityLabelsOnWALReplay() throws Exception {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    final TableName tableName = TableName.valueOf(TEST_NAME.getMethodName());<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    try (Table table = createTableAndWriteDataWithLabels(tableName,<a name="line.233"></a>
-<span class="sourceLineNo">234</span>        "(" + SECRET + "|" + CONFIDENTIAL + ")", PRIVATE)) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      List&lt;RegionServerThread&gt; regionServerThreads = TEST_UTIL.getHBaseCluster()<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          .getRegionServerThreads();<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      for (RegionServerThread rsThread : regionServerThreads) {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        rsThread.getRegionServer().abort("Aborting ");<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      }<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      // Start one new RS<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      RegionServerThread rs = TEST_UTIL.getHBaseCluster().startRegionServer();<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      waitForLabelsRegionAvailability(rs.getRegionServer());<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      Scan s = new Scan();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      s.setAuthorizations(new Authorizations(SECRET));<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      ResultScanner scanner = table.getScanner(s);<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      Result[] next = scanner.next(3);<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      assertTrue(next.length == 1);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    }<a name="line.248"></a>
-<span class="sourceLineNo">249</span>  }<a name="line.249"></a>
-<span class="sourceLineNo">250</span>}<a name="line.250"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>import com.google.protobuf.ByteString;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.io.IOException;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.security.PrivilegedExceptionAction;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.List;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.TableName;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.client.Result;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.Table;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.NameBytesPair;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.protobuf.generated.VisibilityLabelsProtos.ListLabelsResponse;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.protobuf.generated.VisibilityLabelsProtos.VisibilityLabelsResponse;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.security.User;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.testclassification.SecurityTests;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.junit.Assert;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.junit.BeforeClass;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.junit.ClassRule;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.junit.Test;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.junit.experimental.categories.Category;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.slf4j.Logger;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.slf4j.LoggerFactory;<a name="line.56"></a>
+<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">058</span>@Category({SecurityTests.class, MediumTests.class})<a name="line.58"></a>
+<span class="sourceLineNo">059</span>public class TestVisibilityLabelsWithDefaultVisLabelService extends TestVisibilityLabels {<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  @ClassRule<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.62"></a>
+<span class="sourceLineNo">063</span>      HBaseClassTestRule.forClass(TestVisibilityLabelsWithDefaultVisLabelService.class);<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private static final Logger LOG = LoggerFactory.getLogger(<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    TestVisibilityLabelsWithDefaultVisLabelService.class);<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>  @BeforeClass<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  public static void setupBeforeClass() throws Exception {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    // setup configuration<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    conf = TEST_UTIL.getConfiguration();<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    VisibilityTestUtil.enableVisiblityLabels(conf);<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    conf.setClass(VisibilityUtils.VISIBILITY_LABEL_GENERATOR_CLASS, SimpleScanLabelGenerator.class,<a name="line.73"></a>
+<span class="sourceLineNo">074</span>        ScanLabelGenerator.class);<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    conf.set("hbase.superuser", "admin");<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    TEST_UTIL.startMiniCluster(2);<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    SUPERUSER = User.createUserForTesting(conf, "admin", new String[] { "supergroup" });<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    USER1 = User.createUserForTesting(conf, "user1", new String[] {});<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>    // Wait for the labels table to become available<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    TEST_UTIL.waitTableEnabled(LABELS_TABLE_NAME.getName(), 50000);<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    addLabels();<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  }<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span>  @Test<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  public void testAddLabels() throws Throwable {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    PrivilegedExceptionAction&lt;VisibilityLabelsResponse&gt; action =<a name="line.87"></a>
+<span class="sourceLineNo">088</span>        new PrivilegedExceptionAction&lt;VisibilityLabelsResponse&gt;() {<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      @Override<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      public VisibilityLabelsResponse run() throws Exception {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>        String[] labels = { "L1", SECRET, "L2", "invalid~", "L3" };<a name="line.91"></a>
+<span class="sourceLineNo">092</span>        VisibilityLabelsResponse response = null;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>        try (Connection conn = ConnectionFactory.createConnection(conf)) {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>          response = VisibilityClient.addLabels(conn, labels);<a name="line.94"></a>
+<span class="sourceLineNo">095</span>        } catch (Throwable e) {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>          throw new IOException(e);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>        }<a name="line.97"></a>
+<span class="sourceLineNo">098</span>        List&lt;RegionActionResult&gt; resultList = response.getResultList();<a name="line.98"></a>
+<span class="sourceLineNo">099</span>        assertEquals(5, resultList.size());<a name="line.99"></a>
+<span class="sourceLineNo">100</span>        assertTrue(resultList.get(0).getException().getValue().isEmpty());<a name="line.100"></a>
+<span class="sourceLineNo">101</span>        assertEquals("org.apache.hadoop.hbase.DoNotRetryIOException", resultList.get(1)<a name="line.101"></a>
+<span class="sourceLineNo">102</span>            .getException().getName());<a name="line.102"></a>
+<span class="sourceLineNo">103</span>        assertTrue(Bytes.toString(resultList.get(1).getException().getValue().toByteArray())<a name="line.103"></a>
+<span class="sourceLineNo">104</span>            .contains(<a name="line.104"></a>
+<span class="sourceLineNo">105</span>                "org.apache.hadoop.hbase.security.visibility.LabelAlreadyExistsException: "<a name="line.105"></a>
+<span class="sourceLineNo">106</span>                    + "Label 'secret' already exists"));<a name="line.106"></a>
+<span class="sourceLineNo">107</span>        assertTrue(resultList.get(2).getException().getValue().isEmpty());<a name="line.107"></a>
+<span class="sourceLineNo">108</span>        assertTrue(resultList.get(3).getException().getValue().isEmpty());<a name="line.108"></a>
+<span class="sourceLineNo">109</span>        assertTrue(resultList.get(4).getException().getValue().isEmpty());<a name="line.109"></a>
+<span class="sourceLineNo">110</span>        return null;<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>    SUPERUSER.runAs(action);<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>  @Test<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  public void testAddVisibilityLabelsOnRSRestart() throws Exception {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    List&lt;RegionServerThread&gt; regionServerThreads = TEST_UTIL.getHBaseCluster()<a name="line.118"></a>
+<span class="sourceLineNo">119</span>        .getRegionServerThreads();<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    for (RegionServerThread rsThread : regionServerThreads) {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      rsThread.getRegionServer().abort("Aborting ");<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    }<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    // Start one new RS<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    RegionServerThread rs = TEST_UTIL.getHBaseCluster().startRegionServer();<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    waitForLabelsRegionAvailability(rs.getRegionServer());<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    final AtomicBoolean vcInitialized = new AtomicBoolean(true);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    do {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      PrivilegedExceptionAction&lt;VisibilityLabelsResponse&gt; action =<a name="line.128"></a>
+<span class="sourceLineNo">129</span>          new PrivilegedExceptionAction&lt;VisibilityLabelsResponse&gt;() {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>        @Override<a name="line.130"></a>
+<span class="sourceLineNo">131</span>        public VisibilityLabelsResponse run() throws Exception {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>          String[] labels = { SECRET, CONFIDENTIAL, PRIVATE, "ABC", "XYZ" };<a name="line.132"></a>
+<span class="sourceLineNo">133</span>          try (Connection conn = ConnectionFactory.createConnection(conf)) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>            VisibilityLabelsResponse resp = VisibilityClient.addLabels(conn, labels);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>            List&lt;RegionActionResult&gt; results = resp.getResultList();<a name="line.135"></a>
+<span class="sourceLineNo">136</span>            if (results.get(0).hasException()) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>              NameBytesPair pair = results.get(0).getException();<a name="line.137"></a>
+<span class="sourceLineNo">138</span>              Throwable t = ProtobufUtil.toException(pair);<a name="line.138"></a>
+<span class="sourceLineNo">139</span>              LOG.debug("Got exception writing labels", t);<a name="line.139"></a>
+<span class="sourceLineNo">140</span>              if (t instanceof VisibilityControllerNotReadyException) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>                vcInitialized.set(false);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>                LOG.warn("VisibilityController was not yet initialized");<a name="line.142"></a>
+<span class="sourceLineNo">143</span>                Threads.sleep(10);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>              } else {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>                vcInitialized.set(true);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>              }<a name="line.146"></a>
+<span class="sourceLineNo">147</span>            } else LOG.debug("new labels added: " + resp);<a name="line.147"></a>
+<span class="sourceLineNo">148</span>          } catch (Throwable t) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>            throw new IOException(t);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>          }<a name="line.150"></a>
+<span class="sourceLineNo">151</span>          return 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>      SUPERUSER.runAs(action);<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    } while (!vcInitialized.get());<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    // Scan the visibility label<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    Scan s = new Scan();<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    s.setAuthorizations(new Authorizations(VisibilityUtils.SYSTEM_LABEL));<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>    int i = 0;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    try (Table ht = TEST_UTIL.getConnection().getTable(LABELS_TABLE_NAME);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>         ResultScanner scanner = ht.getScanner(s)) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      while (true) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        Result next = scanner.next();<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        if (next == null) {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>          break;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>        }<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        i++;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      }<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    // One label is the "system" label.<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    Assert.assertEquals("The count should be 13", 13, i);<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">175</span>  @Test<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  public void testListLabels() throws Throwable {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    PrivilegedExceptionAction&lt;ListLabelsResponse&gt; action =<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        new PrivilegedExceptionAction&lt;ListLabelsResponse&gt;() {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      @Override<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      public ListLabelsResponse run() throws Exception {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        ListLabelsResponse response = null;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>        try (Connection conn = ConnectionFactory.createConnection(conf)) {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>          response = VisibilityClient.listLabels(conn, null);<a name="line.183"></a>
+<span class="sourceLineNo">184</span>        } catch (Throwable e) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>          throw new IOException(e);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>        }<a name="line.186"></a>
+<span class="sourceLineNo">187</span>        // The addLabels() in setup added:<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        // { SECRET, TOPSECRET, CONFIDENTIAL, PUBLIC, PRIVATE, COPYRIGHT, ACCENT,<a name="line.188"></a>
+<span class="sourceLineNo">189</span>        //  UNICODE_VIS_TAG, UC1, UC2 };<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        // The previous tests added 2 more labels: ABC, XYZ<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        // The 'system' label is excluded.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        List&lt;ByteString&gt; labels = response.getLabelList();<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        assertEquals(12, labels.size());<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        assertTrue(labels.contains(ByteString.copyFrom(Bytes.toBytes(SECRET))));<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        assertTrue(labels.contains(ByteString.copyFrom(Bytes.toBytes(TOPSECRET))));<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        assertTrue(labels.contains(ByteString.copyFrom(Bytes.toBytes(CONFIDENTIAL))));<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        assertTrue(labels.contains(ByteString.copyFrom(Bytes.toBytes("ABC"))));<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        assertTrue(labels.contains(ByteString.copyFrom(Bytes.toBytes("XYZ"))));<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        assertFalse(labels.contains(ByteString.copyFrom(Bytes.toBytes(SYSTEM_LABEL))));<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        return null;<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>    SUPERUSER.runAs(action);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>  }<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>  @Test<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  public void testListLabelsWithRegEx() throws Throwable {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    PrivilegedExceptionAction&lt;ListLabelsResponse&gt; action =<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        new PrivilegedExceptionAction&lt;ListLabelsResponse&gt;() {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      @Override<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      public ListLabelsResponse run() throws Exception {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>        ListLabelsResponse response = null;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        try (Connection conn = ConnectionFactory.createConnection(conf)) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>          response = VisibilityClient.listLabels(conn, ".*secret");<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        } catch (Throwable e) {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          throw new IOException(e);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        }<a name="line.217"></a>
+<span class="sourceLineNo">218</span>        // Only return the labels that end with 'secret'<a name="line.218"></a>
+<span class="sourceLineNo">219</span>        List&lt;ByteString&gt; labels = response.getLabelList();<a name="line.219"></a>
+<span class="sourceLineNo">220</span>        assertEquals(2, labels.size());<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        assertTrue(labels.contains(ByteString.copyFrom(Bytes.toBytes(SECRET))));<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        assertTrue(labels.contains(ByteString.copyFrom(Bytes.toBytes(TOPSECRET))));<a name="line.222"></a>
+<span class="sourceLineNo">223</span>        return null;<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>    SUPERUSER.runAs(action);<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>  @Test<a name="line.229"></a>
+<span class="sourceLineNo">230</span>  public void testVisibilityLabelsOnWALReplay() throws Exception {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    final TableName tableName = TableName.valueOf(TEST_NAME.getMethodName());<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    try (Table table = createTableAndWriteDataWithLabels(tableName,<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        "(" + SECRET + "|" + CONFIDENTIAL + ")", PRIVATE)) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      List&lt;RegionServerThread&gt; regionServerThreads = TEST_UTIL.getHBaseCluster()<a name="line.234"></a>
+<span class="sourceLineNo">235</span>          .getRegionServerThreads();<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      for (RegionServerThread rsThread : regionServerThreads) {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        rsThread.getRegionServer().abort("Aborting ");<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      }<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      // Start one new RS<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      RegionServerThread rs = TEST_UTIL.getHBaseCluster().startRegionServer();<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      waitForLabelsRegionAvailability(rs.getRegionServer());<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      Scan s = new Scan();<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      s.setAuthorizations(new Authorizations(SECRET));<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      ResultScanner scanner = table.getScanner(s);<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      Result[] next = scanner.next(3);<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      assertTrue(next.length == 1);<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    }<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
+<span class="sourceLineNo">249</span>}<a name="line.249"></a>
 
 
 


[09/18] hbase-site git commit: Published site at cebb725a9f4ab8dd9d3f306d21d53d6f56161c51.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.AssignRegionAction.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.AssignRegionAction.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.AssignRegionAction.html
index d974429..e478f39 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.AssignRegionAction.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.AssignRegionAction.html
@@ -42,32 +42,32 @@
 <span class="sourceLineNo">034</span>import java.util.TreeMap;<a name="line.34"></a>
 <span class="sourceLineNo">035</span>import java.util.function.Predicate;<a name="line.35"></a>
 <span class="sourceLineNo">036</span>import java.util.stream.Collectors;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.commons.lang3.NotImplementedException;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.conf.Configuration;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HConstants;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HDFSBlocksDistribution;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.ServerMetrics;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ServerName;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.TableName;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.RackManager;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster.Action.Type;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.slf4j.Logger;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.slf4j.LoggerFactory;<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hbase.thirdparty.com.google.common.collect.ArrayListMultimap;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.62"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.commons.lang3.NotImplementedException;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HConstants;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HDFSBlocksDistribution;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ServerMetrics;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.ServerName;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.TableName;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.RackManager;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster.Action.Type;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hbase.thirdparty.com.google.common.collect.ArrayListMultimap;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.slf4j.Logger;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.slf4j.LoggerFactory;<a name="line.62"></a>
 <span class="sourceLineNo">063</span><a name="line.63"></a>
 <span class="sourceLineNo">064</span>/**<a name="line.64"></a>
 <span class="sourceLineNo">065</span> * The base class for load balancers. It provides the the functions used to by<a name="line.65"></a>
@@ -1462,181 +1462,186 @@
 <span class="sourceLineNo">1454</span>    for (Map.Entry&lt;RegionInfo, ServerName&gt; entry : regions.entrySet()) {<a name="line.1454"></a>
 <span class="sourceLineNo">1455</span>      RegionInfo region = entry.getKey();<a name="line.1455"></a>
 <span class="sourceLineNo">1456</span>      ServerName oldServerName = entry.getValue();<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>      if (!hasRegionReplica &amp;&amp; !RegionReplicaUtil.isDefaultReplica(region)) {<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>        hasRegionReplica = true;<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>      }<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>      List&lt;ServerName&gt; localServers = new ArrayList&lt;&gt;();<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>      if (oldServerName != null) {<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>        localServers = serversByHostname.get(oldServerName.getHostnameLowerCase());<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>      }<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>      if (localServers.isEmpty()) {<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>        // No servers on the new cluster match up with this hostname, assign randomly, later.<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>        randomAssignRegions.add(region);<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>        if (oldServerName != null) {<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>          oldHostsNoLongerPresent.add(oldServerName.getHostnameLowerCase());<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>        }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>      } else if (localServers.size() == 1) {<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>        // the usual case - one new server on same host<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>        ServerName target = localServers.get(0);<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>        assignments.get(target).add(region);<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>        numRetainedAssigments++;<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      } else {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        // multiple new servers in the cluster on this same host<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>        if (localServers.contains(oldServerName)) {<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>          assignments.get(oldServerName).add(region);<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>          numRetainedAssigments++;<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>        } else {<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>          ServerName target = null;<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>          for (ServerName tmp : localServers) {<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>            if (tmp.getPort() == oldServerName.getPort()) {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>              target = tmp;<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>              assignments.get(tmp).add(region);<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>              numRetainedAssigments++;<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>              break;<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>            }<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>          }<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>          if (target == null) {<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>            randomAssignRegions.add(region);<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>          }<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>    // If servers from prior assignment aren't present, then lets do randomAssignment on regions.<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>    if (randomAssignRegions.size() &gt; 0) {<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>      Cluster cluster = createCluster(servers, regions.keySet(), hasRegionReplica);<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>      for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : assignments.entrySet()) {<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>        ServerName sn = entry.getKey();<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>        for (RegionInfo region : entry.getValue()) {<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>          cluster.doAssignRegion(region, sn);<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>        }<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>      }<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>      for (RegionInfo region : randomAssignRegions) {<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>        ServerName target = randomAssignment(cluster, region, servers);<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>        assignments.get(target).add(region);<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>        numRandomAssignments++;<a name="line.1509"></a>
+<span class="sourceLineNo">1457</span>      // In the current set of regions even if one has region replica let us go with<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>      // getting the entire snapshot<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>      if (this.services != null &amp;&amp; this.services.getAssignmentManager() != null) { // for tests<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>        if (!hasRegionReplica &amp;&amp; this.services.getAssignmentManager().getRegionStates()<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>            .isReplicaAvailableForRegion(region)) {<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>          hasRegionReplica = true;<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>        }<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>      }<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>      List&lt;ServerName&gt; localServers = new ArrayList&lt;&gt;();<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>      if (oldServerName != null) {<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>        localServers = serversByHostname.get(oldServerName.getHostnameLowerCase());<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>      }<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>      if (localServers.isEmpty()) {<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>        // No servers on the new cluster match up with this hostname, assign randomly, later.<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>        randomAssignRegions.add(region);<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>        if (oldServerName != null) {<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>          oldHostsNoLongerPresent.add(oldServerName.getHostnameLowerCase());<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>        }<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>      } else if (localServers.size() == 1) {<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>        // the usual case - one new server on same host<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>        ServerName target = localServers.get(0);<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>        assignments.get(target).add(region);<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>        numRetainedAssigments++;<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>      } else {<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>        // multiple new servers in the cluster on this same host<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>        if (localServers.contains(oldServerName)) {<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>          assignments.get(oldServerName).add(region);<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>          numRetainedAssigments++;<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>        } else {<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>          ServerName target = null;<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>          for (ServerName tmp : localServers) {<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>            if (tmp.getPort() == oldServerName.getPort()) {<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>              target = tmp;<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>              assignments.get(tmp).add(region);<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>              numRetainedAssigments++;<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>              break;<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>          if (target == null) {<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>            randomAssignRegions.add(region);<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>          }<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>        }<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>      }<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>    }<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span><a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>    // If servers from prior assignment aren't present, then lets do randomAssignment on regions.<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>    if (randomAssignRegions.size() &gt; 0) {<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>      Cluster cluster = createCluster(servers, regions.keySet(), hasRegionReplica);<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>      for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : assignments.entrySet()) {<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>        ServerName sn = entry.getKey();<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>        for (RegionInfo region : entry.getValue()) {<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>          cluster.doAssignRegion(region, sn);<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>        }<a name="line.1509"></a>
 <span class="sourceLineNo">1510</span>      }<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>    }<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span><a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>    String randomAssignMsg = "";<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    if (numRandomAssignments &gt; 0) {<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>      randomAssignMsg =<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>          numRandomAssignments + " regions were assigned "<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>              + "to random hosts, since the old hosts for these regions are no "<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>              + "longer present in the cluster. These hosts were:\n  "<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>              + Joiner.on("\n  ").join(oldHostsNoLongerPresent);<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>    LOG.info("Reassigned " + regions.size() + " regions. " + numRetainedAssigments<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>        + " retained the pre-restart assignment. " + randomAssignMsg);<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>    return assignments;<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>  }<a name="line.1525"></a>
+<span class="sourceLineNo">1511</span>      for (RegionInfo region : randomAssignRegions) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>        ServerName target = randomAssignment(cluster, region, servers);<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        assignments.get(target).add(region);<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>        numRandomAssignments++;<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>      }<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>    }<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span><a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>    String randomAssignMsg = "";<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    if (numRandomAssignments &gt; 0) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>      randomAssignMsg =<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          numRandomAssignments + " regions were assigned "<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>              + "to random hosts, since the old hosts for these regions are no "<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>              + "longer present in the cluster. These hosts were:\n  "<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>              + Joiner.on("\n  ").join(oldHostsNoLongerPresent);<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>    }<a name="line.1525"></a>
 <span class="sourceLineNo">1526</span><a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>  @Override<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>  public void initialize() throws HBaseIOException{<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>  }<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span><a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>  @Override<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>  public void regionOnline(RegionInfo regionInfo, ServerName sn) {<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>  }<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>  @Override<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>  public void regionOffline(RegionInfo regionInfo) {<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 boolean isStopped() {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>    return stopped;<a name="line.1541"></a>
+<span class="sourceLineNo">1527</span>    LOG.info("Reassigned " + regions.size() + " regions. " + numRetainedAssigments<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>        + " retained the pre-restart assignment. " + randomAssignMsg);<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>    return assignments;<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>  }<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span><a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>  @Override<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>  public void initialize() throws HBaseIOException{<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>  }<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span><a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>  @Override<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>  public void regionOnline(RegionInfo regionInfo, ServerName sn) {<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>  }<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span><a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>  @Override<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>  public void regionOffline(RegionInfo regionInfo) {<a name="line.1541"></a>
 <span class="sourceLineNo">1542</span>  }<a name="line.1542"></a>
 <span class="sourceLineNo">1543</span><a name="line.1543"></a>
 <span class="sourceLineNo">1544</span>  @Override<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>  public void stop(String why) {<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>    LOG.info("Load Balancer stop requested: "+why);<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>    stopped = true;<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>  /**<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>   * Used to assign a single region to a random server.<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>   */<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>  private ServerName randomAssignment(Cluster cluster, RegionInfo regionInfo,<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>      List&lt;ServerName&gt; servers) {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>    int numServers = servers.size(); // servers is not null, numServers &gt; 1<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>    ServerName sn = null;<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>    final int maxIterations = numServers * 4;<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>    int iterations = 0;<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>    List&lt;ServerName&gt; usedSNs = new ArrayList&lt;&gt;(servers.size());<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>    do {<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      int i = RANDOM.nextInt(numServers);<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>      sn = servers.get(i);<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      if (!usedSNs.contains(sn)) {<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        usedSNs.add(sn);<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      }<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>    } while (cluster.wouldLowerAvailability(regionInfo, sn)<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>        &amp;&amp; iterations++ &lt; maxIterations);<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>    if (iterations &gt;= maxIterations) {<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      // We have reached the max. Means the servers that we collected is still lowering the<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      // availability<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      for (ServerName unusedServer : servers) {<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>        if (!usedSNs.contains(unusedServer)) {<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>          // check if any other unused server is there for us to use.<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>          // If so use it. Else we have not other go but to go with one of them<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>          if (!cluster.wouldLowerAvailability(regionInfo, unusedServer)) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>            sn = unusedServer;<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>            break;<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>      }<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>    }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>    cluster.doAssignRegion(regionInfo, sn);<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    return sn;<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>  }<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span><a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>  /**<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>   * Round robin a list of regions to a list of servers<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>   */<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>  private void roundRobinAssignment(Cluster cluster, List&lt;RegionInfo&gt; regions,<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      List&lt;RegionInfo&gt; unassignedRegions, List&lt;ServerName&gt; servers,<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignments) {<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span><a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>    int numServers = servers.size();<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    int numRegions = regions.size();<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    int max = (int) Math.ceil((float) numRegions / numServers);<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    int serverIdx = 0;<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    if (numServers &gt; 1) {<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>      serverIdx = RANDOM.nextInt(numServers);<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>    }<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>    int regionIdx = 0;<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span><a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    for (int j = 0; j &lt; numServers; j++) {<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>      ServerName server = servers.get((j + serverIdx) % numServers);<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>      List&lt;RegionInfo&gt; serverRegions = new ArrayList&lt;&gt;(max);<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>      for (int i = regionIdx; i &lt; numRegions; i += numServers) {<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>        RegionInfo region = regions.get(i % numRegions);<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>        if (cluster.wouldLowerAvailability(region, server)) {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>          unassignedRegions.add(region);<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>        } else {<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>          serverRegions.add(region);<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>          cluster.doAssignRegion(region, server);<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>        }<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>      }<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>      assignments.put(server, serverRegions);<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>      regionIdx++;<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>  protected Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getRegionAssignmentsByServer(<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>    Collection&lt;RegionInfo&gt; regions) {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    if (this.services != null &amp;&amp; this.services.getAssignmentManager() != null) {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      return this.services.getAssignmentManager().getSnapShotOfAssignment(regions);<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>    } else {<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      return new HashMap&lt;&gt;();<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>    }<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>  }<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span><a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>  @Override<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>  public void onConfigurationChange(Configuration conf) {<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">1545</span>  public boolean isStopped() {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>    return stopped;<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>  @Override<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>  public void stop(String why) {<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>    LOG.info("Load Balancer stop requested: "+why);<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>    stopped = true;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>  }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span><a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>  /**<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>   * Used to assign a single region to a random server.<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>   */<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>  private ServerName randomAssignment(Cluster cluster, RegionInfo regionInfo,<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>      List&lt;ServerName&gt; servers) {<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>    int numServers = servers.size(); // servers is not null, numServers &gt; 1<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>    ServerName sn = null;<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>    final int maxIterations = numServers * 4;<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>    int iterations = 0;<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>    List&lt;ServerName&gt; usedSNs = new ArrayList&lt;&gt;(servers.size());<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>    do {<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>      int i = RANDOM.nextInt(numServers);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      sn = servers.get(i);<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>      if (!usedSNs.contains(sn)) {<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>        usedSNs.add(sn);<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>      }<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>    } while (cluster.wouldLowerAvailability(regionInfo, sn)<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>        &amp;&amp; iterations++ &lt; maxIterations);<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>    if (iterations &gt;= maxIterations) {<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>      // We have reached the max. Means the servers that we collected is still lowering the<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      // availability<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      for (ServerName unusedServer : servers) {<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>        if (!usedSNs.contains(unusedServer)) {<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>          // check if any other unused server is there for us to use.<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>          // If so use it. Else we have not other go but to go with one of them<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>          if (!cluster.wouldLowerAvailability(regionInfo, unusedServer)) {<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>            sn = unusedServer;<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>            break;<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>          }<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      }<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>    }<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>    cluster.doAssignRegion(regionInfo, sn);<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>    return sn;<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>  }<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>   * Round robin a list of regions to a list of servers<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>   */<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>  private void roundRobinAssignment(Cluster cluster, List&lt;RegionInfo&gt; regions,<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>      List&lt;RegionInfo&gt; unassignedRegions, List&lt;ServerName&gt; servers,<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignments) {<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span><a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>    int numServers = servers.size();<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    int numRegions = regions.size();<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    int max = (int) Math.ceil((float) numRegions / numServers);<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    int serverIdx = 0;<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    if (numServers &gt; 1) {<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>      serverIdx = RANDOM.nextInt(numServers);<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    }<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>    int regionIdx = 0;<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span><a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>    for (int j = 0; j &lt; numServers; j++) {<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>      ServerName server = servers.get((j + serverIdx) % numServers);<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>      List&lt;RegionInfo&gt; serverRegions = new ArrayList&lt;&gt;(max);<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>      for (int i = regionIdx; i &lt; numRegions; i += numServers) {<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>        RegionInfo region = regions.get(i % numRegions);<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>        if (cluster.wouldLowerAvailability(region, server)) {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>          unassignedRegions.add(region);<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>        } else {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>          serverRegions.add(region);<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>          cluster.doAssignRegion(region, server);<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>      assignments.put(server, serverRegions);<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>      regionIdx++;<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>  protected Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getRegionAssignmentsByServer(<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    Collection&lt;RegionInfo&gt; regions) {<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>    if (this.services != null &amp;&amp; this.services.getAssignmentManager() != null) {<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      return this.services.getAssignmentManager().getSnapShotOfAssignment(regions);<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>    } else {<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      return new HashMap&lt;&gt;();<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>  public void onConfigurationChange(Configuration conf) {<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html
index d974429..e478f39 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html
@@ -42,32 +42,32 @@
 <span class="sourceLineNo">034</span>import java.util.TreeMap;<a name="line.34"></a>
 <span class="sourceLineNo">035</span>import java.util.function.Predicate;<a name="line.35"></a>
 <span class="sourceLineNo">036</span>import java.util.stream.Collectors;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.commons.lang3.NotImplementedException;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.conf.Configuration;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HConstants;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HDFSBlocksDistribution;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.ServerMetrics;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ServerName;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.TableName;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.RackManager;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster.Action.Type;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.slf4j.Logger;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.slf4j.LoggerFactory;<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hbase.thirdparty.com.google.common.collect.ArrayListMultimap;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.62"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.commons.lang3.NotImplementedException;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HConstants;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HDFSBlocksDistribution;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ServerMetrics;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.ServerName;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.TableName;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.RackManager;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster.Action.Type;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hbase.thirdparty.com.google.common.collect.ArrayListMultimap;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.slf4j.Logger;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.slf4j.LoggerFactory;<a name="line.62"></a>
 <span class="sourceLineNo">063</span><a name="line.63"></a>
 <span class="sourceLineNo">064</span>/**<a name="line.64"></a>
 <span class="sourceLineNo">065</span> * The base class for load balancers. It provides the the functions used to by<a name="line.65"></a>
@@ -1462,181 +1462,186 @@
 <span class="sourceLineNo">1454</span>    for (Map.Entry&lt;RegionInfo, ServerName&gt; entry : regions.entrySet()) {<a name="line.1454"></a>
 <span class="sourceLineNo">1455</span>      RegionInfo region = entry.getKey();<a name="line.1455"></a>
 <span class="sourceLineNo">1456</span>      ServerName oldServerName = entry.getValue();<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>      if (!hasRegionReplica &amp;&amp; !RegionReplicaUtil.isDefaultReplica(region)) {<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>        hasRegionReplica = true;<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>      }<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>      List&lt;ServerName&gt; localServers = new ArrayList&lt;&gt;();<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>      if (oldServerName != null) {<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>        localServers = serversByHostname.get(oldServerName.getHostnameLowerCase());<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>      }<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>      if (localServers.isEmpty()) {<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>        // No servers on the new cluster match up with this hostname, assign randomly, later.<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>        randomAssignRegions.add(region);<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>        if (oldServerName != null) {<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>          oldHostsNoLongerPresent.add(oldServerName.getHostnameLowerCase());<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>        }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>      } else if (localServers.size() == 1) {<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>        // the usual case - one new server on same host<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>        ServerName target = localServers.get(0);<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>        assignments.get(target).add(region);<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>        numRetainedAssigments++;<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      } else {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        // multiple new servers in the cluster on this same host<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>        if (localServers.contains(oldServerName)) {<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>          assignments.get(oldServerName).add(region);<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>          numRetainedAssigments++;<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>        } else {<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>          ServerName target = null;<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>          for (ServerName tmp : localServers) {<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>            if (tmp.getPort() == oldServerName.getPort()) {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>              target = tmp;<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>              assignments.get(tmp).add(region);<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>              numRetainedAssigments++;<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>              break;<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>            }<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>          }<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>          if (target == null) {<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>            randomAssignRegions.add(region);<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>          }<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>    // If servers from prior assignment aren't present, then lets do randomAssignment on regions.<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>    if (randomAssignRegions.size() &gt; 0) {<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>      Cluster cluster = createCluster(servers, regions.keySet(), hasRegionReplica);<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>      for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : assignments.entrySet()) {<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>        ServerName sn = entry.getKey();<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>        for (RegionInfo region : entry.getValue()) {<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>          cluster.doAssignRegion(region, sn);<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>        }<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>      }<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>      for (RegionInfo region : randomAssignRegions) {<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>        ServerName target = randomAssignment(cluster, region, servers);<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>        assignments.get(target).add(region);<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>        numRandomAssignments++;<a name="line.1509"></a>
+<span class="sourceLineNo">1457</span>      // In the current set of regions even if one has region replica let us go with<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>      // getting the entire snapshot<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>      if (this.services != null &amp;&amp; this.services.getAssignmentManager() != null) { // for tests<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>        if (!hasRegionReplica &amp;&amp; this.services.getAssignmentManager().getRegionStates()<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>            .isReplicaAvailableForRegion(region)) {<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>          hasRegionReplica = true;<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>        }<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>      }<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>      List&lt;ServerName&gt; localServers = new ArrayList&lt;&gt;();<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>      if (oldServerName != null) {<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>        localServers = serversByHostname.get(oldServerName.getHostnameLowerCase());<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>      }<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>      if (localServers.isEmpty()) {<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>        // No servers on the new cluster match up with this hostname, assign randomly, later.<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>        randomAssignRegions.add(region);<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>        if (oldServerName != null) {<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>          oldHostsNoLongerPresent.add(oldServerName.getHostnameLowerCase());<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>        }<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>      } else if (localServers.size() == 1) {<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>        // the usual case - one new server on same host<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>        ServerName target = localServers.get(0);<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>        assignments.get(target).add(region);<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>        numRetainedAssigments++;<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>      } else {<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>        // multiple new servers in the cluster on this same host<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>        if (localServers.contains(oldServerName)) {<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>          assignments.get(oldServerName).add(region);<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>          numRetainedAssigments++;<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>        } else {<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>          ServerName target = null;<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>          for (ServerName tmp : localServers) {<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>            if (tmp.getPort() == oldServerName.getPort()) {<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>              target = tmp;<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>              assignments.get(tmp).add(region);<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>              numRetainedAssigments++;<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>              break;<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>          if (target == null) {<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>            randomAssignRegions.add(region);<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>          }<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>        }<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>      }<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>    }<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span><a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>    // If servers from prior assignment aren't present, then lets do randomAssignment on regions.<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>    if (randomAssignRegions.size() &gt; 0) {<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>      Cluster cluster = createCluster(servers, regions.keySet(), hasRegionReplica);<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>      for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : assignments.entrySet()) {<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>        ServerName sn = entry.getKey();<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>        for (RegionInfo region : entry.getValue()) {<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>          cluster.doAssignRegion(region, sn);<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>        }<a name="line.1509"></a>
 <span class="sourceLineNo">1510</span>      }<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>    }<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span><a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>    String randomAssignMsg = "";<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    if (numRandomAssignments &gt; 0) {<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>      randomAssignMsg =<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>          numRandomAssignments + " regions were assigned "<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>              + "to random hosts, since the old hosts for these regions are no "<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>              + "longer present in the cluster. These hosts were:\n  "<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>              + Joiner.on("\n  ").join(oldHostsNoLongerPresent);<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>    LOG.info("Reassigned " + regions.size() + " regions. " + numRetainedAssigments<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>        + " retained the pre-restart assignment. " + randomAssignMsg);<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>    return assignments;<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>  }<a name="line.1525"></a>
+<span class="sourceLineNo">1511</span>      for (RegionInfo region : randomAssignRegions) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>        ServerName target = randomAssignment(cluster, region, servers);<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        assignments.get(target).add(region);<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>        numRandomAssignments++;<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>      }<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>    }<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span><a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>    String randomAssignMsg = "";<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    if (numRandomAssignments &gt; 0) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>      randomAssignMsg =<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          numRandomAssignments + " regions were assigned "<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>              + "to random hosts, since the old hosts for these regions are no "<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>              + "longer present in the cluster. These hosts were:\n  "<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>              + Joiner.on("\n  ").join(oldHostsNoLongerPresent);<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>    }<a name="line.1525"></a>
 <span class="sourceLineNo">1526</span><a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>  @Override<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>  public void initialize() throws HBaseIOException{<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>  }<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span><a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>  @Override<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>  public void regionOnline(RegionInfo regionInfo, ServerName sn) {<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>  }<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>  @Override<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>  public void regionOffline(RegionInfo regionInfo) {<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 boolean isStopped() {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>    return stopped;<a name="line.1541"></a>
+<span class="sourceLineNo">1527</span>    LOG.info("Reassigned " + regions.size() + " regions. " + numRetainedAssigments<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>        + " retained the pre-restart assignment. " + randomAssignMsg);<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>    return assignments;<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>  }<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span><a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>  @Override<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>  public void initialize() throws HBaseIOException{<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>  }<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span><a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>  @Override<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>  public void regionOnline(RegionInfo regionInfo, ServerName sn) {<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>  }<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span><a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>  @Override<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>  public void regionOffline(RegionInfo regionInfo) {<a name="line.1541"></a>
 <span class="sourceLineNo">1542</span>  }<a name="line.1542"></a>
 <span class="sourceLineNo">1543</span><a name="line.1543"></a>
 <span class="sourceLineNo">1544</span>  @Override<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>  public void stop(String why) {<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>    LOG.info("Load Balancer stop requested: "+why);<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>    stopped = true;<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>  /**<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>   * Used to assign a single region to a random server.<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>   */<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>  private ServerName randomAssignment(Cluster cluster, RegionInfo regionInfo,<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>      List&lt;ServerName&gt; servers) {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>    int numServers = servers.size(); // servers is not null, numServers &gt; 1<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>    ServerName sn = null;<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>    final int maxIterations = numServers * 4;<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>    int iterations = 0;<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>    List&lt;ServerName&gt; usedSNs = new ArrayList&lt;&gt;(servers.size());<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>    do {<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      int i = RANDOM.nextInt(numServers);<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>      sn = servers.get(i);<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      if (!usedSNs.contains(sn)) {<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        usedSNs.add(sn);<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      }<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>    } while (cluster.wouldLowerAvailability(regionInfo, sn)<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>        &amp;&amp; iterations++ &lt; maxIterations);<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>    if (iterations &gt;= maxIterations) {<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      // We have reached the max. Means the servers that we collected is still lowering the<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      // availability<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      for (ServerName unusedServer : servers) {<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>        if (!usedSNs.contains(unusedServer)) {<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>          // check if any other unused server is there for us to use.<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>          // If so use it. Else we have not other go but to go with one of them<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>          if (!cluster.wouldLowerAvailability(regionInfo, unusedServer)) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>            sn = unusedServer;<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>            break;<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>      }<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>    }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>    cluster.doAssignRegion(regionInfo, sn);<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    return sn;<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>  }<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span><a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>  /**<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>   * Round robin a list of regions to a list of servers<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>   */<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>  private void roundRobinAssignment(Cluster cluster, List&lt;RegionInfo&gt; regions,<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      List&lt;RegionInfo&gt; unassignedRegions, List&lt;ServerName&gt; servers,<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignments) {<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span><a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>    int numServers = servers.size();<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    int numRegions = regions.size();<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    int max = (int) Math.ceil((float) numRegions / numServers);<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    int serverIdx = 0;<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    if (numServers &gt; 1) {<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>      serverIdx = RANDOM.nextInt(numServers);<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>    }<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>    int regionIdx = 0;<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span><a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    for (int j = 0; j &lt; numServers; j++) {<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>      ServerName server = servers.get((j + serverIdx) % numServers);<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>      List&lt;RegionInfo&gt; serverRegions = new ArrayList&lt;&gt;(max);<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>      for (int i = regionIdx; i &lt; numRegions; i += numServers) {<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>        RegionInfo region = regions.get(i % numRegions);<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>        if (cluster.wouldLowerAvailability(region, server)) {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>          unassignedRegions.add(region);<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>        } else {<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>          serverRegions.add(region);<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>          cluster.doAssignRegion(region, server);<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>        }<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>      }<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>      assignments.put(server, serverRegions);<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>      regionIdx++;<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>  protected Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getRegionAssignmentsByServer(<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>    Collection&lt;RegionInfo&gt; regions) {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    if (this.services != null &amp;&amp; this.services.getAssignmentManager() != null) {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      return this.services.getAssignmentManager().getSnapShotOfAssignment(regions);<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>    } else {<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      return new HashMap&lt;&gt;();<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>    }<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>  }<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span><a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>  @Override<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>  public void onConfigurationChange(Configuration conf) {<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">1545</span>  public boolean isStopped() {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>    return stopped;<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>  @Override<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>  public void stop(String why) {<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>    LOG.info("Load Balancer stop requested: "+why);<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>    stopped = true;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>  }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span><a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>  /**<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>   * Used to assign a single region to a random server.<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>   */<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>  private ServerName randomAssignment(Cluster cluster, RegionInfo regionInfo,<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>      List&lt;ServerName&gt; servers) {<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>    int numServers = servers.size(); // servers is not null, numServers &gt; 1<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>    ServerName sn = null;<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>    final int maxIterations = numServers * 4;<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>    int iterations = 0;<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>    List&lt;ServerName&gt; usedSNs = new ArrayList&lt;&gt;(servers.size());<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>    do {<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>      int i = RANDOM.nextInt(numServers);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      sn = servers.get(i);<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>      if (!usedSNs.contains(sn)) {<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>        usedSNs.add(sn);<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>      }<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>    } while (cluster.wouldLowerAvailability(regionInfo, sn)<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>        &amp;&amp; iterations++ &lt; maxIterations);<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>    if (iterations &gt;= maxIterations) {<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>      // We have reached the max. Means the servers that we collected is still lowering the<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      // availability<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      for (ServerName unusedServer : servers) {<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>        if (!usedSNs.contains(unusedServer)) {<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>          // check if any other unused server is there for us to use.<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>          // If so use it. Else we have not other go but to go with one of them<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>          if (!cluster.wouldLowerAvailability(regionInfo, unusedServer)) {<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>            sn = unusedServer;<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>            break;<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>          }<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      }<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>    }<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>    cluster.doAssignRegion(regionInfo, sn);<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>    return sn;<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>  }<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>   * Round robin a list of regions to a list of servers<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>   */<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>  private void roundRobinAssignment(Cluster cluster, List&lt;RegionInfo&gt; regions,<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>      List&lt;RegionInfo&gt; unassignedRegions, List&lt;ServerName&gt; servers,<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignments) {<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span><a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>    int numServers = servers.size();<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    int numRegions = regions.size();<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    int max = (int) Math.ceil((float) numRegions / numServers);<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    int serverIdx = 0;<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    if (numServers &gt; 1) {<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>      serverIdx = RANDOM.nextInt(numServers);<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    }<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>    int regionIdx = 0;<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span><a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>    for (int j = 0; j &lt; numServers; j++) {<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>      ServerName server = servers.get((j + serverIdx) % numServers);<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>      List&lt;RegionInfo&gt; serverRegions = new ArrayList&lt;&gt;(max);<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>      for (int i = regionIdx; i &lt; numRegions; i += numServers) {<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>        RegionInfo region = regions.get(i % numRegions);<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>        if (cluster.wouldLowerAvailability(region, server)) {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>          unassignedRegions.add(region);<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>        } else {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>          serverRegions.add(region);<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>          cluster.doAssignRegion(region, server);<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>      assignments.put(server, serverRegions);<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>      regionIdx++;<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>  protected Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getRegionAssignmentsByServer(<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    Collection&lt;RegionInfo&gt; regions) {<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>    if (this.services != null &amp;&amp; this.services.getAssignmentManager() != null) {<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      return this.services.getAssignmentManager().getSnapShotOfAssignment(regions);<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>    } else {<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      return new HashMap&lt;&gt;();<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>  public void onConfigurationChange(Configuration conf) {<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>
 
 
 


[08/18] hbase-site git commit: Published site at cebb725a9f4ab8dd9d3f306d21d53d6f56161c51.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.MoveRegionAction.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.MoveRegionAction.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.MoveRegionAction.html
index d974429..e478f39 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.MoveRegionAction.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.MoveRegionAction.html
@@ -42,32 +42,32 @@
 <span class="sourceLineNo">034</span>import java.util.TreeMap;<a name="line.34"></a>
 <span class="sourceLineNo">035</span>import java.util.function.Predicate;<a name="line.35"></a>
 <span class="sourceLineNo">036</span>import java.util.stream.Collectors;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.commons.lang3.NotImplementedException;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.conf.Configuration;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HConstants;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HDFSBlocksDistribution;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.ServerMetrics;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ServerName;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.TableName;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.RackManager;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster.Action.Type;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.slf4j.Logger;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.slf4j.LoggerFactory;<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hbase.thirdparty.com.google.common.collect.ArrayListMultimap;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.62"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.commons.lang3.NotImplementedException;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HConstants;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HDFSBlocksDistribution;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ServerMetrics;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.ServerName;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.TableName;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.RackManager;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster.Action.Type;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hbase.thirdparty.com.google.common.collect.ArrayListMultimap;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.slf4j.Logger;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.slf4j.LoggerFactory;<a name="line.62"></a>
 <span class="sourceLineNo">063</span><a name="line.63"></a>
 <span class="sourceLineNo">064</span>/**<a name="line.64"></a>
 <span class="sourceLineNo">065</span> * The base class for load balancers. It provides the the functions used to by<a name="line.65"></a>
@@ -1462,181 +1462,186 @@
 <span class="sourceLineNo">1454</span>    for (Map.Entry&lt;RegionInfo, ServerName&gt; entry : regions.entrySet()) {<a name="line.1454"></a>
 <span class="sourceLineNo">1455</span>      RegionInfo region = entry.getKey();<a name="line.1455"></a>
 <span class="sourceLineNo">1456</span>      ServerName oldServerName = entry.getValue();<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>      if (!hasRegionReplica &amp;&amp; !RegionReplicaUtil.isDefaultReplica(region)) {<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>        hasRegionReplica = true;<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>      }<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>      List&lt;ServerName&gt; localServers = new ArrayList&lt;&gt;();<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>      if (oldServerName != null) {<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>        localServers = serversByHostname.get(oldServerName.getHostnameLowerCase());<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>      }<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>      if (localServers.isEmpty()) {<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>        // No servers on the new cluster match up with this hostname, assign randomly, later.<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>        randomAssignRegions.add(region);<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>        if (oldServerName != null) {<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>          oldHostsNoLongerPresent.add(oldServerName.getHostnameLowerCase());<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>        }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>      } else if (localServers.size() == 1) {<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>        // the usual case - one new server on same host<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>        ServerName target = localServers.get(0);<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>        assignments.get(target).add(region);<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>        numRetainedAssigments++;<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      } else {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        // multiple new servers in the cluster on this same host<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>        if (localServers.contains(oldServerName)) {<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>          assignments.get(oldServerName).add(region);<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>          numRetainedAssigments++;<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>        } else {<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>          ServerName target = null;<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>          for (ServerName tmp : localServers) {<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>            if (tmp.getPort() == oldServerName.getPort()) {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>              target = tmp;<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>              assignments.get(tmp).add(region);<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>              numRetainedAssigments++;<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>              break;<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>            }<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>          }<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>          if (target == null) {<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>            randomAssignRegions.add(region);<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>          }<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>    // If servers from prior assignment aren't present, then lets do randomAssignment on regions.<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>    if (randomAssignRegions.size() &gt; 0) {<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>      Cluster cluster = createCluster(servers, regions.keySet(), hasRegionReplica);<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>      for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : assignments.entrySet()) {<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>        ServerName sn = entry.getKey();<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>        for (RegionInfo region : entry.getValue()) {<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>          cluster.doAssignRegion(region, sn);<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>        }<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>      }<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>      for (RegionInfo region : randomAssignRegions) {<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>        ServerName target = randomAssignment(cluster, region, servers);<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>        assignments.get(target).add(region);<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>        numRandomAssignments++;<a name="line.1509"></a>
+<span class="sourceLineNo">1457</span>      // In the current set of regions even if one has region replica let us go with<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>      // getting the entire snapshot<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>      if (this.services != null &amp;&amp; this.services.getAssignmentManager() != null) { // for tests<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>        if (!hasRegionReplica &amp;&amp; this.services.getAssignmentManager().getRegionStates()<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>            .isReplicaAvailableForRegion(region)) {<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>          hasRegionReplica = true;<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>        }<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>      }<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>      List&lt;ServerName&gt; localServers = new ArrayList&lt;&gt;();<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>      if (oldServerName != null) {<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>        localServers = serversByHostname.get(oldServerName.getHostnameLowerCase());<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>      }<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>      if (localServers.isEmpty()) {<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>        // No servers on the new cluster match up with this hostname, assign randomly, later.<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>        randomAssignRegions.add(region);<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>        if (oldServerName != null) {<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>          oldHostsNoLongerPresent.add(oldServerName.getHostnameLowerCase());<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>        }<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>      } else if (localServers.size() == 1) {<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>        // the usual case - one new server on same host<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>        ServerName target = localServers.get(0);<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>        assignments.get(target).add(region);<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>        numRetainedAssigments++;<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>      } else {<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>        // multiple new servers in the cluster on this same host<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>        if (localServers.contains(oldServerName)) {<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>          assignments.get(oldServerName).add(region);<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>          numRetainedAssigments++;<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>        } else {<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>          ServerName target = null;<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>          for (ServerName tmp : localServers) {<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>            if (tmp.getPort() == oldServerName.getPort()) {<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>              target = tmp;<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>              assignments.get(tmp).add(region);<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>              numRetainedAssigments++;<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>              break;<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>          if (target == null) {<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>            randomAssignRegions.add(region);<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>          }<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>        }<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>      }<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>    }<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span><a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>    // If servers from prior assignment aren't present, then lets do randomAssignment on regions.<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>    if (randomAssignRegions.size() &gt; 0) {<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>      Cluster cluster = createCluster(servers, regions.keySet(), hasRegionReplica);<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>      for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : assignments.entrySet()) {<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>        ServerName sn = entry.getKey();<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>        for (RegionInfo region : entry.getValue()) {<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>          cluster.doAssignRegion(region, sn);<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>        }<a name="line.1509"></a>
 <span class="sourceLineNo">1510</span>      }<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>    }<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span><a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>    String randomAssignMsg = "";<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    if (numRandomAssignments &gt; 0) {<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>      randomAssignMsg =<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>          numRandomAssignments + " regions were assigned "<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>              + "to random hosts, since the old hosts for these regions are no "<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>              + "longer present in the cluster. These hosts were:\n  "<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>              + Joiner.on("\n  ").join(oldHostsNoLongerPresent);<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>    LOG.info("Reassigned " + regions.size() + " regions. " + numRetainedAssigments<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>        + " retained the pre-restart assignment. " + randomAssignMsg);<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>    return assignments;<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>  }<a name="line.1525"></a>
+<span class="sourceLineNo">1511</span>      for (RegionInfo region : randomAssignRegions) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>        ServerName target = randomAssignment(cluster, region, servers);<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        assignments.get(target).add(region);<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>        numRandomAssignments++;<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>      }<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>    }<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span><a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>    String randomAssignMsg = "";<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    if (numRandomAssignments &gt; 0) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>      randomAssignMsg =<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          numRandomAssignments + " regions were assigned "<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>              + "to random hosts, since the old hosts for these regions are no "<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>              + "longer present in the cluster. These hosts were:\n  "<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>              + Joiner.on("\n  ").join(oldHostsNoLongerPresent);<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>    }<a name="line.1525"></a>
 <span class="sourceLineNo">1526</span><a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>  @Override<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>  public void initialize() throws HBaseIOException{<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>  }<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span><a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>  @Override<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>  public void regionOnline(RegionInfo regionInfo, ServerName sn) {<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>  }<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>  @Override<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>  public void regionOffline(RegionInfo regionInfo) {<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 boolean isStopped() {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>    return stopped;<a name="line.1541"></a>
+<span class="sourceLineNo">1527</span>    LOG.info("Reassigned " + regions.size() + " regions. " + numRetainedAssigments<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>        + " retained the pre-restart assignment. " + randomAssignMsg);<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>    return assignments;<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>  }<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span><a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>  @Override<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>  public void initialize() throws HBaseIOException{<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>  }<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span><a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>  @Override<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>  public void regionOnline(RegionInfo regionInfo, ServerName sn) {<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>  }<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span><a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>  @Override<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>  public void regionOffline(RegionInfo regionInfo) {<a name="line.1541"></a>
 <span class="sourceLineNo">1542</span>  }<a name="line.1542"></a>
 <span class="sourceLineNo">1543</span><a name="line.1543"></a>
 <span class="sourceLineNo">1544</span>  @Override<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>  public void stop(String why) {<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>    LOG.info("Load Balancer stop requested: "+why);<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>    stopped = true;<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>  /**<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>   * Used to assign a single region to a random server.<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>   */<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>  private ServerName randomAssignment(Cluster cluster, RegionInfo regionInfo,<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>      List&lt;ServerName&gt; servers) {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>    int numServers = servers.size(); // servers is not null, numServers &gt; 1<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>    ServerName sn = null;<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>    final int maxIterations = numServers * 4;<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>    int iterations = 0;<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>    List&lt;ServerName&gt; usedSNs = new ArrayList&lt;&gt;(servers.size());<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>    do {<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      int i = RANDOM.nextInt(numServers);<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>      sn = servers.get(i);<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      if (!usedSNs.contains(sn)) {<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        usedSNs.add(sn);<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      }<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>    } while (cluster.wouldLowerAvailability(regionInfo, sn)<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>        &amp;&amp; iterations++ &lt; maxIterations);<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>    if (iterations &gt;= maxIterations) {<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      // We have reached the max. Means the servers that we collected is still lowering the<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      // availability<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      for (ServerName unusedServer : servers) {<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>        if (!usedSNs.contains(unusedServer)) {<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>          // check if any other unused server is there for us to use.<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>          // If so use it. Else we have not other go but to go with one of them<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>          if (!cluster.wouldLowerAvailability(regionInfo, unusedServer)) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>            sn = unusedServer;<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>            break;<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>      }<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>    }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>    cluster.doAssignRegion(regionInfo, sn);<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    return sn;<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>  }<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span><a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>  /**<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>   * Round robin a list of regions to a list of servers<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>   */<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>  private void roundRobinAssignment(Cluster cluster, List&lt;RegionInfo&gt; regions,<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      List&lt;RegionInfo&gt; unassignedRegions, List&lt;ServerName&gt; servers,<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignments) {<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span><a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>    int numServers = servers.size();<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    int numRegions = regions.size();<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    int max = (int) Math.ceil((float) numRegions / numServers);<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    int serverIdx = 0;<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    if (numServers &gt; 1) {<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>      serverIdx = RANDOM.nextInt(numServers);<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>    }<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>    int regionIdx = 0;<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span><a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    for (int j = 0; j &lt; numServers; j++) {<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>      ServerName server = servers.get((j + serverIdx) % numServers);<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>      List&lt;RegionInfo&gt; serverRegions = new ArrayList&lt;&gt;(max);<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>      for (int i = regionIdx; i &lt; numRegions; i += numServers) {<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>        RegionInfo region = regions.get(i % numRegions);<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>        if (cluster.wouldLowerAvailability(region, server)) {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>          unassignedRegions.add(region);<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>        } else {<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>          serverRegions.add(region);<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>          cluster.doAssignRegion(region, server);<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>        }<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>      }<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>      assignments.put(server, serverRegions);<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>      regionIdx++;<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>  protected Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getRegionAssignmentsByServer(<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>    Collection&lt;RegionInfo&gt; regions) {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    if (this.services != null &amp;&amp; this.services.getAssignmentManager() != null) {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      return this.services.getAssignmentManager().getSnapShotOfAssignment(regions);<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>    } else {<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      return new HashMap&lt;&gt;();<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>    }<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>  }<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span><a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>  @Override<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>  public void onConfigurationChange(Configuration conf) {<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">1545</span>  public boolean isStopped() {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>    return stopped;<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>  @Override<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>  public void stop(String why) {<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>    LOG.info("Load Balancer stop requested: "+why);<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>    stopped = true;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>  }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span><a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>  /**<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>   * Used to assign a single region to a random server.<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>   */<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>  private ServerName randomAssignment(Cluster cluster, RegionInfo regionInfo,<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>      List&lt;ServerName&gt; servers) {<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>    int numServers = servers.size(); // servers is not null, numServers &gt; 1<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>    ServerName sn = null;<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>    final int maxIterations = numServers * 4;<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>    int iterations = 0;<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>    List&lt;ServerName&gt; usedSNs = new ArrayList&lt;&gt;(servers.size());<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>    do {<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>      int i = RANDOM.nextInt(numServers);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      sn = servers.get(i);<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>      if (!usedSNs.contains(sn)) {<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>        usedSNs.add(sn);<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>      }<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>    } while (cluster.wouldLowerAvailability(regionInfo, sn)<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>        &amp;&amp; iterations++ &lt; maxIterations);<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>    if (iterations &gt;= maxIterations) {<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>      // We have reached the max. Means the servers that we collected is still lowering the<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      // availability<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      for (ServerName unusedServer : servers) {<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>        if (!usedSNs.contains(unusedServer)) {<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>          // check if any other unused server is there for us to use.<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>          // If so use it. Else we have not other go but to go with one of them<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>          if (!cluster.wouldLowerAvailability(regionInfo, unusedServer)) {<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>            sn = unusedServer;<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>            break;<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>          }<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      }<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>    }<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>    cluster.doAssignRegion(regionInfo, sn);<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>    return sn;<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>  }<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>   * Round robin a list of regions to a list of servers<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>   */<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>  private void roundRobinAssignment(Cluster cluster, List&lt;RegionInfo&gt; regions,<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>      List&lt;RegionInfo&gt; unassignedRegions, List&lt;ServerName&gt; servers,<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignments) {<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span><a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>    int numServers = servers.size();<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    int numRegions = regions.size();<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    int max = (int) Math.ceil((float) numRegions / numServers);<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    int serverIdx = 0;<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    if (numServers &gt; 1) {<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>      serverIdx = RANDOM.nextInt(numServers);<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    }<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>    int regionIdx = 0;<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span><a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>    for (int j = 0; j &lt; numServers; j++) {<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>      ServerName server = servers.get((j + serverIdx) % numServers);<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>      List&lt;RegionInfo&gt; serverRegions = new ArrayList&lt;&gt;(max);<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>      for (int i = regionIdx; i &lt; numRegions; i += numServers) {<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>        RegionInfo region = regions.get(i % numRegions);<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>        if (cluster.wouldLowerAvailability(region, server)) {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>          unassignedRegions.add(region);<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>        } else {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>          serverRegions.add(region);<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>          cluster.doAssignRegion(region, server);<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>      assignments.put(server, serverRegions);<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>      regionIdx++;<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>  protected Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getRegionAssignmentsByServer(<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    Collection&lt;RegionInfo&gt; regions) {<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>    if (this.services != null &amp;&amp; this.services.getAssignmentManager() != null) {<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      return this.services.getAssignmentManager().getSnapShotOfAssignment(regions);<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>    } else {<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      return new HashMap&lt;&gt;();<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>  public void onConfigurationChange(Configuration conf) {<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.SwapRegionsAction.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.SwapRegionsAction.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.SwapRegionsAction.html
index d974429..e478f39 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.SwapRegionsAction.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.SwapRegionsAction.html
@@ -42,32 +42,32 @@
 <span class="sourceLineNo">034</span>import java.util.TreeMap;<a name="line.34"></a>
 <span class="sourceLineNo">035</span>import java.util.function.Predicate;<a name="line.35"></a>
 <span class="sourceLineNo">036</span>import java.util.stream.Collectors;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.commons.lang3.NotImplementedException;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.conf.Configuration;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HConstants;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HDFSBlocksDistribution;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.ServerMetrics;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ServerName;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.TableName;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.RackManager;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster.Action.Type;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.slf4j.Logger;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.slf4j.LoggerFactory;<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hbase.thirdparty.com.google.common.collect.ArrayListMultimap;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.62"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.commons.lang3.NotImplementedException;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HConstants;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HDFSBlocksDistribution;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ServerMetrics;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.ServerName;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.TableName;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.RackManager;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster.Action.Type;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hbase.thirdparty.com.google.common.collect.ArrayListMultimap;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.slf4j.Logger;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.slf4j.LoggerFactory;<a name="line.62"></a>
 <span class="sourceLineNo">063</span><a name="line.63"></a>
 <span class="sourceLineNo">064</span>/**<a name="line.64"></a>
 <span class="sourceLineNo">065</span> * The base class for load balancers. It provides the the functions used to by<a name="line.65"></a>
@@ -1462,181 +1462,186 @@
 <span class="sourceLineNo">1454</span>    for (Map.Entry&lt;RegionInfo, ServerName&gt; entry : regions.entrySet()) {<a name="line.1454"></a>
 <span class="sourceLineNo">1455</span>      RegionInfo region = entry.getKey();<a name="line.1455"></a>
 <span class="sourceLineNo">1456</span>      ServerName oldServerName = entry.getValue();<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>      if (!hasRegionReplica &amp;&amp; !RegionReplicaUtil.isDefaultReplica(region)) {<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>        hasRegionReplica = true;<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>      }<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>      List&lt;ServerName&gt; localServers = new ArrayList&lt;&gt;();<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>      if (oldServerName != null) {<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>        localServers = serversByHostname.get(oldServerName.getHostnameLowerCase());<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>      }<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>      if (localServers.isEmpty()) {<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>        // No servers on the new cluster match up with this hostname, assign randomly, later.<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>        randomAssignRegions.add(region);<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>        if (oldServerName != null) {<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>          oldHostsNoLongerPresent.add(oldServerName.getHostnameLowerCase());<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>        }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>      } else if (localServers.size() == 1) {<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>        // the usual case - one new server on same host<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>        ServerName target = localServers.get(0);<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>        assignments.get(target).add(region);<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>        numRetainedAssigments++;<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      } else {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        // multiple new servers in the cluster on this same host<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>        if (localServers.contains(oldServerName)) {<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>          assignments.get(oldServerName).add(region);<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>          numRetainedAssigments++;<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>        } else {<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>          ServerName target = null;<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>          for (ServerName tmp : localServers) {<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>            if (tmp.getPort() == oldServerName.getPort()) {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>              target = tmp;<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>              assignments.get(tmp).add(region);<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>              numRetainedAssigments++;<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>              break;<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>            }<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>          }<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>          if (target == null) {<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>            randomAssignRegions.add(region);<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>          }<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>    // If servers from prior assignment aren't present, then lets do randomAssignment on regions.<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>    if (randomAssignRegions.size() &gt; 0) {<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>      Cluster cluster = createCluster(servers, regions.keySet(), hasRegionReplica);<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>      for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : assignments.entrySet()) {<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>        ServerName sn = entry.getKey();<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>        for (RegionInfo region : entry.getValue()) {<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>          cluster.doAssignRegion(region, sn);<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>        }<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>      }<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>      for (RegionInfo region : randomAssignRegions) {<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>        ServerName target = randomAssignment(cluster, region, servers);<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>        assignments.get(target).add(region);<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>        numRandomAssignments++;<a name="line.1509"></a>
+<span class="sourceLineNo">1457</span>      // In the current set of regions even if one has region replica let us go with<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>      // getting the entire snapshot<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>      if (this.services != null &amp;&amp; this.services.getAssignmentManager() != null) { // for tests<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>        if (!hasRegionReplica &amp;&amp; this.services.getAssignmentManager().getRegionStates()<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>            .isReplicaAvailableForRegion(region)) {<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>          hasRegionReplica = true;<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>        }<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>      }<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>      List&lt;ServerName&gt; localServers = new ArrayList&lt;&gt;();<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>      if (oldServerName != null) {<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>        localServers = serversByHostname.get(oldServerName.getHostnameLowerCase());<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>      }<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>      if (localServers.isEmpty()) {<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>        // No servers on the new cluster match up with this hostname, assign randomly, later.<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>        randomAssignRegions.add(region);<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>        if (oldServerName != null) {<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>          oldHostsNoLongerPresent.add(oldServerName.getHostnameLowerCase());<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>        }<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>      } else if (localServers.size() == 1) {<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>        // the usual case - one new server on same host<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>        ServerName target = localServers.get(0);<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>        assignments.get(target).add(region);<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>        numRetainedAssigments++;<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>      } else {<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>        // multiple new servers in the cluster on this same host<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>        if (localServers.contains(oldServerName)) {<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>          assignments.get(oldServerName).add(region);<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>          numRetainedAssigments++;<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>        } else {<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>          ServerName target = null;<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>          for (ServerName tmp : localServers) {<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>            if (tmp.getPort() == oldServerName.getPort()) {<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>              target = tmp;<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>              assignments.get(tmp).add(region);<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>              numRetainedAssigments++;<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>              break;<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>          if (target == null) {<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>            randomAssignRegions.add(region);<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>          }<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>        }<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>      }<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>    }<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span><a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>    // If servers from prior assignment aren't present, then lets do randomAssignment on regions.<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>    if (randomAssignRegions.size() &gt; 0) {<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>      Cluster cluster = createCluster(servers, regions.keySet(), hasRegionReplica);<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>      for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : assignments.entrySet()) {<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>        ServerName sn = entry.getKey();<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>        for (RegionInfo region : entry.getValue()) {<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>          cluster.doAssignRegion(region, sn);<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>        }<a name="line.1509"></a>
 <span class="sourceLineNo">1510</span>      }<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>    }<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span><a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>    String randomAssignMsg = "";<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    if (numRandomAssignments &gt; 0) {<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>      randomAssignMsg =<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>          numRandomAssignments + " regions were assigned "<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>              + "to random hosts, since the old hosts for these regions are no "<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>              + "longer present in the cluster. These hosts were:\n  "<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>              + Joiner.on("\n  ").join(oldHostsNoLongerPresent);<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>    LOG.info("Reassigned " + regions.size() + " regions. " + numRetainedAssigments<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>        + " retained the pre-restart assignment. " + randomAssignMsg);<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>    return assignments;<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>  }<a name="line.1525"></a>
+<span class="sourceLineNo">1511</span>      for (RegionInfo region : randomAssignRegions) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>        ServerName target = randomAssignment(cluster, region, servers);<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        assignments.get(target).add(region);<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>        numRandomAssignments++;<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>      }<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>    }<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span><a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>    String randomAssignMsg = "";<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    if (numRandomAssignments &gt; 0) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>      randomAssignMsg =<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          numRandomAssignments + " regions were assigned "<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>              + "to random hosts, since the old hosts for these regions are no "<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>              + "longer present in the cluster. These hosts were:\n  "<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>              + Joiner.on("\n  ").join(oldHostsNoLongerPresent);<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>    }<a name="line.1525"></a>
 <span class="sourceLineNo">1526</span><a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>  @Override<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>  public void initialize() throws HBaseIOException{<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>  }<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span><a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>  @Override<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>  public void regionOnline(RegionInfo regionInfo, ServerName sn) {<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>  }<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>  @Override<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>  public void regionOffline(RegionInfo regionInfo) {<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 boolean isStopped() {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>    return stopped;<a name="line.1541"></a>
+<span class="sourceLineNo">1527</span>    LOG.info("Reassigned " + regions.size() + " regions. " + numRetainedAssigments<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>        + " retained the pre-restart assignment. " + randomAssignMsg);<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>    return assignments;<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>  }<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span><a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>  @Override<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>  public void initialize() throws HBaseIOException{<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>  }<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span><a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>  @Override<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>  public void regionOnline(RegionInfo regionInfo, ServerName sn) {<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>  }<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span><a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>  @Override<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>  public void regionOffline(RegionInfo regionInfo) {<a name="line.1541"></a>
 <span class="sourceLineNo">1542</span>  }<a name="line.1542"></a>
 <span class="sourceLineNo">1543</span><a name="line.1543"></a>
 <span class="sourceLineNo">1544</span>  @Override<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>  public void stop(String why) {<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>    LOG.info("Load Balancer stop requested: "+why);<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>    stopped = true;<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>  /**<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>   * Used to assign a single region to a random server.<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>   */<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>  private ServerName randomAssignment(Cluster cluster, RegionInfo regionInfo,<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>      List&lt;ServerName&gt; servers) {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>    int numServers = servers.size(); // servers is not null, numServers &gt; 1<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>    ServerName sn = null;<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>    final int maxIterations = numServers * 4;<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>    int iterations = 0;<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>    List&lt;ServerName&gt; usedSNs = new ArrayList&lt;&gt;(servers.size());<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>    do {<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      int i = RANDOM.nextInt(numServers);<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>      sn = servers.get(i);<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      if (!usedSNs.contains(sn)) {<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        usedSNs.add(sn);<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      }<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>    } while (cluster.wouldLowerAvailability(regionInfo, sn)<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>        &amp;&amp; iterations++ &lt; maxIterations);<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>    if (iterations &gt;= maxIterations) {<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      // We have reached the max. Means the servers that we collected is still lowering the<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      // availability<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      for (ServerName unusedServer : servers) {<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>        if (!usedSNs.contains(unusedServer)) {<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>          // check if any other unused server is there for us to use.<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>          // If so use it. Else we have not other go but to go with one of them<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>          if (!cluster.wouldLowerAvailability(regionInfo, unusedServer)) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>            sn = unusedServer;<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>            break;<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>      }<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>    }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>    cluster.doAssignRegion(regionInfo, sn);<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    return sn;<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>  }<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span><a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>  /**<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>   * Round robin a list of regions to a list of servers<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>   */<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>  private void roundRobinAssignment(Cluster cluster, List&lt;RegionInfo&gt; regions,<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      List&lt;RegionInfo&gt; unassignedRegions, List&lt;ServerName&gt; servers,<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignments) {<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span><a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>    int numServers = servers.size();<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    int numRegions = regions.size();<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    int max = (int) Math.ceil((float) numRegions / numServers);<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    int serverIdx = 0;<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    if (numServers &gt; 1) {<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>      serverIdx = RANDOM.nextInt(numServers);<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>    }<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>    int regionIdx = 0;<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span><a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    for (int j = 0; j &lt; numServers; j++) {<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>      ServerName server = servers.get((j + serverIdx) % numServers);<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>      List&lt;RegionInfo&gt; serverRegions = new ArrayList&lt;&gt;(max);<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>      for (int i = regionIdx; i &lt; numRegions; i += numServers) {<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>        RegionInfo region = regions.get(i % numRegions);<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>        if (cluster.wouldLowerAvailability(region, server)) {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>          unassignedRegions.add(region);<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>        } else {<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>          serverRegions.add(region);<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>          cluster.doAssignRegion(region, server);<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>        }<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>      }<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>      assignments.put(server, serverRegions);<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>      regionIdx++;<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>  protected Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getRegionAssignmentsByServer(<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>    Collection&lt;RegionInfo&gt; regions) {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    if (this.services != null &amp;&amp; this.services.getAssignmentManager() != null) {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      return this.services.getAssignmentManager().getSnapShotOfAssignment(regions);<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>    } else {<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      return new HashMap&lt;&gt;();<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>    }<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>  }<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span><a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>  @Override<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>  public void onConfigurationChange(Configuration conf) {<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">1545</span>  public boolean isStopped() {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>    return stopped;<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>  @Override<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>  public void stop(String why) {<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>    LOG.info("Load Balancer stop requested: "+why);<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>    stopped = true;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>  }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span><a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>  /**<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>   * Used to assign a single region to a random server.<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>   */<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>  private ServerName randomAssignment(Cluster cluster, RegionInfo regionInfo,<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>      List&lt;ServerName&gt; servers) {<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>    int numServers = servers.size(); // servers is not null, numServers &gt; 1<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>    ServerName sn = null;<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>    final int maxIterations = numServers * 4;<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>    int iterations = 0;<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>    List&lt;ServerName&gt; usedSNs = new ArrayList&lt;&gt;(servers.size());<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>    do {<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>      int i = RANDOM.nextInt(numServers);<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      sn = servers.get(i);<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>      if (!usedSNs.contains(sn)) {<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>        usedSNs.add(sn);<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>      }<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>    } while (cluster.wouldLowerAvailability(regionInfo, sn)<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>        &amp;&amp; iterations++ &lt; maxIterations);<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>    if (iterations &gt;= maxIterations) {<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>      // We have reached the max. Means the servers that we collected is still lowering the<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      // availability<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      for (ServerName unusedServer : servers) {<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>        if (!usedSNs.contains(unusedServer)) {<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>          // check if any other unused server is there for us to use.<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>          // If so use it. Else we have not other go but to go with one of them<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>          if (!cluster.wouldLowerAvailability(regionInfo, unusedServer)) {<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>            sn = unusedServer;<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>            break;<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>          }<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      }<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>    }<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>    cluster.doAssignRegion(regionInfo, sn);<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>    return sn;<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>  }<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>   * Round robin a list of regions to a list of servers<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>   */<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>  private void roundRobinAssignment(Cluster cluster, List&lt;RegionInfo&gt; regions,<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>      List&lt;RegionInfo&gt; unassignedRegions, List&lt;ServerName&gt; servers,<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignments) {<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span><a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>    int numServers = servers.size();<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    int numRegions = regions.size();<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    int max = (int) Math.ceil((float) numRegions / numServers);<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>    int serverIdx = 0;<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>    if (numServers &gt; 1) {<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>      serverIdx = RANDOM.nextInt(numServers);<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    }<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>    int regionIdx = 0;<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span><a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>    for (int j = 0; j &lt; numServers; j++) {<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>      ServerName server = servers.get((j + serverIdx) % numServers);<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>      List&lt;RegionInfo&gt; serverRegions = new ArrayList&lt;&gt;(max);<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>      for (int i = regionIdx; i &lt; numRegions; i += numServers) {<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>        RegionInfo region = regions.get(i % numRegions);<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>        if (cluster.wouldLowerAvailability(region, server)) {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>          unassignedRegions.add(region);<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>        } else {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>          serverRegions.add(region);<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>          cluster.doAssignRegion(region, server);<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>      assignments.put(server, serverRegions);<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>      regionIdx++;<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>  protected Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getRegionAssignmentsByServer(<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    Collection&lt;RegionInfo&gt; regions) {<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>    if (this.services != null &amp;&amp; this.services.getAssignmentManager() != null) {<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      return this.services.getAssignmentManager().getSnapShotOfAssignment(regions);<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>    } else {<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      return new HashMap&lt;&gt;();<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>  public void onConfigurationChange(Configuration conf) {<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>
 
 
 


[18/18] hbase-site git commit: Published site at cebb725a9f4ab8dd9d3f306d21d53d6f56161c51.

Posted by gi...@apache.org.
Published site at cebb725a9f4ab8dd9d3f306d21d53d6f56161c51.


Project: http://git-wip-us.apache.org/repos/asf/hbase-site/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase-site/commit/ab597584
Tree: http://git-wip-us.apache.org/repos/asf/hbase-site/tree/ab597584
Diff: http://git-wip-us.apache.org/repos/asf/hbase-site/diff/ab597584

Branch: refs/heads/asf-site
Commit: ab597584765dbb7a8744de9229856009e456c8da
Parents: bfd2ee2
Author: jenkins <bu...@apache.org>
Authored: Tue Sep 18 14:51:57 2018 +0000
Committer: jenkins <bu...@apache.org>
Committed: Tue Sep 18 14:51:57 2018 +0000

----------------------------------------------------------------------
 acid-semantics.html                             |     4 +-
 apache_hbase_reference_guide.pdf                |     4 +-
 book.html                                       |     2 +-
 bulk-loads.html                                 |     4 +-
 checkstyle-aggregate.html                       | 16810 +++++++++--------
 checkstyle.rss                                  |     4 +-
 coc.html                                        |     4 +-
 dependencies.html                               |     4 +-
 dependency-convergence.html                     |     4 +-
 dependency-info.html                            |     4 +-
 dependency-management.html                      |     4 +-
 devapidocs/constant-values.html                 |     6 +-
 devapidocs/index-all.html                       |     2 +
 .../hadoop/hbase/backup/package-tree.html       |     4 +-
 .../hbase/client/class-use/RegionInfo.html      |    52 +-
 .../hadoop/hbase/client/package-tree.html       |    26 +-
 .../hadoop/hbase/executor/package-tree.html     |     2 +-
 .../hadoop/hbase/filter/package-tree.html       |     8 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |     8 +-
 .../apache/hadoop/hbase/ipc/package-tree.html   |     2 +-
 .../hadoop/hbase/mapreduce/package-tree.html    |     4 +-
 .../RegionStates.RegionFailedOpen.html          |    22 +-
 ...RegionStates.RegionStateStampComparator.html |     6 +-
 .../hbase/master/assignment/RegionStates.html   |   175 +-
 .../hbase/master/balancer/BaseLoadBalancer.html |    18 +-
 .../hbase/master/balancer/package-tree.html     |     2 +-
 .../hadoop/hbase/master/package-tree.html       |     4 +-
 .../hbase/master/procedure/package-tree.html    |     4 +-
 .../hadoop/hbase/monitoring/package-tree.html   |     2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    18 +-
 .../hadoop/hbase/procedure2/package-tree.html   |     4 +-
 .../hadoop/hbase/quotas/package-tree.html       |     8 +-
 .../hadoop/hbase/regionserver/package-tree.html |    18 +-
 .../regionserver/querymatcher/package-tree.html |     2 +-
 .../hadoop/hbase/replication/package-tree.html  |     2 +-
 .../replication/regionserver/package-tree.html  |     2 +-
 .../hbase/security/access/package-tree.html     |     2 +-
 .../hadoop/hbase/thrift/package-tree.html       |     2 +-
 .../apache/hadoop/hbase/util/package-tree.html  |     6 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |     2 +-
 .../org/apache/hadoop/hbase/Version.html        |     6 +-
 .../RegionStates.RegionFailedOpen.html          |  1522 +-
 ...RegionStates.RegionStateStampComparator.html |  1522 +-
 .../hbase/master/assignment/RegionStates.html   |  1522 +-
 .../BaseLoadBalancer.Cluster.Action.Type.html   |   397 +-
 .../BaseLoadBalancer.Cluster.Action.html        |   397 +-
 ...LoadBalancer.Cluster.AssignRegionAction.html |   397 +-
 .../BaseLoadBalancer.Cluster.LocalityType.html  |   397 +-
 ...seLoadBalancer.Cluster.MoveRegionAction.html |   397 +-
 ...eLoadBalancer.Cluster.SwapRegionsAction.html |   397 +-
 .../balancer/BaseLoadBalancer.Cluster.html      |   397 +-
 .../BaseLoadBalancer.DefaultRackManager.html    |   397 +-
 .../hbase/master/balancer/BaseLoadBalancer.html |   397 +-
 downloads.html                                  |     4 +-
 export_control.html                             |     4 +-
 index.html                                      |     4 +-
 integration.html                                |     4 +-
 issue-tracking.html                             |     4 +-
 license.html                                    |     4 +-
 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 +-
 .../visibility/TestVisibilityLabels.html        |    22 +-
 ...ibilityLabelsWithDefaultVisLabelService.html |    20 +-
 ...tVisibilityLabelsWithDeletes.DeleteMark.html |    16 +-
 .../TestVisibilityLabelsWithDeletes.html        |    92 +-
 .../visibility/TestVisibilityLabels.html        |   917 +-
 ...ibilityLabelsWithDefaultVisLabelService.html |   451 +-
 ...tVisibilityLabelsWithDeletes.DeleteMark.html |  5520 +++---
 .../TestVisibilityLabelsWithDeletes.html        |  5520 +++---
 83 files changed, 19074 insertions(+), 18978 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index 4adf8bc..d261920 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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       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-09-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-09-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index c8a7d91..a2451f8 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:20180917143345+00'00')
-/CreationDate (D:20180917144945+00'00')
+/ModDate (D:20180918143317+00'00')
+/CreationDate (D:20180918144852+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index 6039abe..6531ca5 100644
--- a/book.html
+++ b/book.html
@@ -41284,7 +41284,7 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
 <div id="footer">
 <div id="footer-text">
 Version 3.0.0-SNAPSHOT<br>
-Last updated 2018-09-17 14:33:45 UTC
+Last updated 2018-09-18 14:33:17 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index 65eb803..9e3f928 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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       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-09-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-09-18</li>
             </p>
                 </div>
 


[17/18] hbase-site git commit: Published site at cebb725a9f4ab8dd9d3f306d21d53d6f56161c51.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ab597584/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index cda194b..744aea8 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="20180917" />
+    <meta name="Date-Revision-yyyymmdd" content="20180918" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -284,7 +284,7 @@
 <td>3740</td>
 <td>0</td>
 <td>0</td>
-<td>15224</td></tr></table></div>
+<td>15225</td></tr></table></div>
 <div class="section">
 <h2><a name="Files"></a>Files</h2>
 <table border="0" class="table table-striped">
@@ -4867,7 +4867,7 @@
 <td><a href="#org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>60</td></tr>
+<td>61</td></tr>
 <tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.ClusterLoadState.java">org/apache/hadoop/hbase/master/balancer/ClusterLoadState.java</a></td>
 <td>0</td>
@@ -9783,7 +9783,7 @@
 <li>sortStaticImportsAlphabetically: <tt>&quot;true&quot;</tt></li>
 <li>groups: <tt>&quot;*,org.apache.hbase.thirdparty,org.apache.hadoop.hbase.shaded&quot;</tt></li>
 <li>option: <tt>&quot;top&quot;</tt></li></ul></td>
-<td>1149</td>
+<td>1150</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td></td>
@@ -64177,85 +64177,85 @@
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>143</td></tr>
+<td>145</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>155</td></tr>
+<td>157</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>164</td></tr>
+<td>166</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>173</td></tr>
+<td>175</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>345</td></tr>
+<td>347</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>351</td></tr>
+<td>353</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>352</td></tr>
+<td>354</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>550</td></tr>
+<td>552</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for' has incorrect indentation level 8, expected level should be 6.</td>
-<td>589</td></tr>
+<td>591</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 10, expected level should be 8.</td>
-<td>590</td></tr>
+<td>592</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 12, expected level should be 10.</td>
-<td>591</td></tr>
+<td>593</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 10, expected level should be 8.</td>
-<td>592</td></tr>
+<td>594</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for rcurly' has incorrect indentation level 8, expected level should be 6.</td>
-<td>593</td></tr>
+<td>595</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>723</td></tr></table></div>
+<td>725</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">
@@ -64825,359 +64825,365 @@
 <th>Line</th></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>imports</td>
+<td>ImportOrder</td>
+<td>Wrong order for 'org.apache.yetus.audience.InterfaceAudience' import.</td>
+<td>60</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>127</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>144</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>145</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>146</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 259 lines (max allowed is 150).</td>
 <td>191</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 114).</td>
 <td>301</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'type' must be private and have accessor methods.</td>
 <td>626</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
 <td>'(' is preceded with whitespace.</td>
 <td>627</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 33 should have line break after.</td>
 <td>627</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 34 should have line break after.</td>
 <td>629</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 32 should have line break after.</td>
 <td>631</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'region' must be private and have accessor methods.</td>
 <td>635</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'server' must be private and have accessor methods.</td>
 <td>636</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'region' must be private and have accessor methods.</td>
 <td>655</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'fromServer' must be private and have accessor methods.</td>
 <td>656</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'toServer' must be private and have accessor methods.</td>
 <td>657</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
 <td>'(' is preceded with whitespace.</td>
 <td>667</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'fromServer' must be private and have accessor methods.</td>
 <td>676</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'fromRegion' must be private and have accessor methods.</td>
 <td>677</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'toServer' must be private and have accessor methods.</td>
 <td>678</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'toRegion' must be private and have accessor methods.</td>
 <td>679</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
 <td>'(' is preceded with whitespace.</td>
 <td>689</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>703</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>704</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>707</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>708</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>709</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>710</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>711</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>713</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>714</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>714</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>715</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>716</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>717</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>718</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>720</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>721</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 113).</td>
 <td>721</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>722</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 109).</td>
 <td>722</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>723</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>724</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>725</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;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="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;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="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>738</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 113).</td>
 <td>758</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 108).</td>
 <td>838</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 108).</td>
 <td>853</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1020</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1021</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1023</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1024</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1059</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1065</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1088</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1090</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1179</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -65186,13 +65192,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.ClusterLoadState.java">org/apache/hadoop/hbase/master/balancer/ClusterLoadState.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="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -65201,13 +65207,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.ClusterStatusChore.java">org/apache/hadoop/hbase/master/balancer/ClusterStatusChore.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="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -65216,19 +65222,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.FavoredStochasticBalancer.java">org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.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="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'segregateRegionsAndAssignRegionsWithFavoredNodes' has incorrect indentation level 2, expected level should be 4.</td>
 <td>201</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
@@ -65237,25 +65243,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory.java">org/apache/hadoop/hbase/master/balancer/LoadBalancerFactory.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="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.conf.Configuration' import.</td>
 <td>21</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>29</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -65264,13 +65270,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.LoadBalancerPerformanceEvaluation.java">org/apache/hadoop/hbase/master/balancer/LoadBalancerPerformanceEvaluation.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="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -65279,19 +65285,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.RegionInfoComparator.java">org/apache/hadoop/hbase/master/balancer/RegionInfoComparator.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="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>34</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -65300,25 +65306,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.RegionLocationFinder.java">org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.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="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>64</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>214</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -65327,13 +65333,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.ServerAndLoad.java">org/apache/hadoop/hbase/master/balancer/ServerAndLoad.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="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -65342,205 +65348,205 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.SimpleLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.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="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>113</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>115</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 114).</td>
 <td>115</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 112).</td>
 <td>134</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 206 lines (max allowed is 150).</td>
 <td>246</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>266</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>316</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>320</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>335</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>354</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>357</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>366</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>387</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>389</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>408</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>438</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>456</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 109).</td>
 <td>461</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>462</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>')' is preceded with whitespace.</td>
 <td>462</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 112).</td>
 <td>464</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>499</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 120).</td>
 <td>500</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 109).</td>
 <td>501</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>513</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'else' construct must use '{}'s.</td>
 <td>514</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>530</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>537</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>558</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>559</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>565</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>582</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -65549,199 +65555,199 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.StochasticLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.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="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>254</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>269</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>271</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>458</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>565</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>798</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 109).</td>
 <td>814</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 116).</td>
 <td>828</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 114).</td>
 <td>832</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>863</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1004</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1005</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>1006</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>1007</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>1008</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1009</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>1010</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>1011</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>1012</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1013</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>1014</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>1015</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>1016</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>1017</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1018</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>1019</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 119).</td>
 <td>1029</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1090</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 106).</td>
 <td>1297</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 106).</td>
 <td>1298</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 109).</td>
 <td>1302</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -65750,103 +65756,103 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.TestBaseLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/TestBaseLoadBalancer.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="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>84</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>85</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>86</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>87</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>133</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>134</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>135</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>150</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>191</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 108).</td>
 <td>256</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 108).</td>
 <td>337</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>432</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>433</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>434</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>444</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -65855,295 +65861,295 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.TestDefaultLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/TestDefaultLoadBalancer.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="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>74</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>75</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>76</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>78</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>79</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>80</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>81</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>82</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>83</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>84</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>85</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>86</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>87</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>88</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, 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="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>91</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>92</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>93</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>94</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>95</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>97</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>98</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>99</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>100</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>101</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>102</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>103</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>104</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>105</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>106</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>108</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>110</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, 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="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>112</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>113</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>114</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>115</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>116</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>117</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>118</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>119</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>132</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 118).</td>
 <td>141</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>149</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>170</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>175</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 117).</td>
 <td>179</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -66152,13 +66158,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.TestFavoredNodeTableImport.java">org/apache/hadoop/hbase/master/balancer/TestFavoredNodeTableImport.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="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
@@ -66167,19 +66173,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.TestFavoredStochasticBalancerPickers.java">org/apache/hadoop/hbase/master/balancer/TestFavoredStochasticBalancerPickers.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="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>201</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -66188,85 +66194,85 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.TestRegionsOnMasterOptions.java">org/apache/hadoop/hbase/master/balancer/TestRegionsOnMasterOptions.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="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>128</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 113).</td>
 <td>132</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 115).</td>
 <td>134</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 131).</td>
 <td>135</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 129).</td>
 <td>136</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 129).</td>
 <td>137</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 109).</td>
 <td>138</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 108).</td>
 <td>140</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 111).</td>
 <td>141</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>142</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 111).</td>
 <td>143</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 135).</td>
 <td>151</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -66275,13 +66281,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.TestServerAndLoad.java">org/apache/hadoop/hbase/master/balancer/TestServerAndLoad.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="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -66290,205 +66296,205 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.TestStochasticLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancer.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="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>78</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>79</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>80</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>81</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>82</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>83</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>87</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>88</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>89</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>90</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>91</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>92</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>96</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>97</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>98</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>99</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>100</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>101</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>104</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>105</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>106</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>107</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>108</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>109</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>110</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 111).</td>
 <td>113</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>114</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>115</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>116</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>117</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>118</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>119</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -66497,13 +66503,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.cleaner.BaseFileCleanerDelegate.java">org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.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="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -66512,13 +66518,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.cleaner.BaseLogCleanerDelegate.java">org/apache/hadoop/hbase/master/cleaner/BaseLogCleanerDelegate.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="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -66527,25 +66533,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.cleaner.CleanerChore.java">org/apache/hadoop/hbase/master/cleaner/CleanerChore.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="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>454</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 2, expected level should be 4.</td>
 <td>460</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
@@ -66554,19 +66560,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.cleaner.FileCleanerDelegate.java">org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.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="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.conf.Configurable' import.</td>
 <td>21</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -66575,25 +66581,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.cleaner.HFileLinkCleaner.java">org/apache/hadoop/hbase/master/cleaner/HFileLinkCleaner.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="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.io.HFileLink' import.</td>
 <td>31</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>51</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -66602,13 +66608,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.cleaner.TestCleanerChore.java">org/apache/hadoop/hbase/master/cleaner/TestCleanerChore.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="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -66617,31 +66623,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.cleaner.TestHFileCleaner.java">org/apache/hadoop/hbase/master/cleaner/TestHFileCleaner.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="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>118</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>183</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>195</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -66650,19 +66656,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.cleaner.TestHFileLinkCleaner.java">org/apache/hadoop/hbase/master/cleaner/TestHFileLinkCleaner.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="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>136</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
@@ -66671,13 +66677,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.cleaner.TestSnapshotFromMaster.java">org/apache/hadoop/hbase/master/cleaner/TestSnapshotFromMaster.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="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -66686,13 +66692,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.cleaner.TimeToLiveHFileCleaner.java">org/apache/hadoop/hbase/master/cleaner/TimeToLiveHFileCleaner.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="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -66701,13 +66707,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.cleaner.TimeToLiveLogCleaner.java">org/apache/hadoop/hbase/master/cleaner/TimeToLiveLogCleaner.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="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -66716,25 +66722,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.locking.LockManager.java">org/apache/hadoop/hbase/master/locking/LockManager.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="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>78</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 4, expected level should be 6.</td>
 <td>234</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -66743,37 +66749,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.locking.LockProcedure.java">org/apache/hadoop/hbase/master/locking/LockProcedure.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="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>205</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>208</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>231</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>234</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -66782,13 +66788,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.normalizer.EmptyNormalizationPlan.java">org/apache/hadoop/hbase/master/normalizer/EmptyNormalizationPlan.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="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -66797,13 +66803,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.normalizer.NormalizationPlan.java">org/apache/hadoop/hbase/master/normalizer/NormalizationPlan.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="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -66812,19 +66818,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.normalizer.RegionNormalizerChore.java">org/apache/hadoop/hbase/master/normalizer/RegionNormalizerChore.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="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.master.HMaster' import.</td>
 <td>25</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -66833,13 +66839,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.normalizer.RegionNormalizerFactory.java">org/apache/hadoop/hbase/master/normalizer/RegionNormalizerFactory.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="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -66848,19 +66854,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.normalizer.TestSimpleRegionNormalizerOnCluster.java">org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizerOnCluster.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="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 110).</td>
 <td>122</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -66869,13 +66875,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.procedure.AbstractStateMachineNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/AbstractStateMachineNamespaceProcedure.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="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -66884,13 +66890,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.procedure.AbstractStateMachineRegionProcedure.java">org/apache/hadoop/hbase/master/procedure/AbstractStateMachineRegionProcedure.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="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -66899,13 +66905,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.procedure.AbstractStateMachineTableProcedure.java">org/apache/hadoop/hbase/master/procedure/AbstractStateMachineTableProcedure.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="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -66914,55 +66920,55 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.procedure.CloneSnapshotProcedure.java">org/apache/hadoop/hbase/master/procedure/CloneSnapshotProcedure.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="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>333</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>345</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>346</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>373</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;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="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>389</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>450</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -66971,193 +66977,193 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.procedure.CreateNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.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="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.master.MasterFileSystem' import.</td>
 <td>28</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.FSUtils' import.</td>
 <td>34</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>71</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>72</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>73</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 8, expected level should be 10.</td>
 <td>74</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>76</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 8, expected level should be 10.</td>
 <td>77</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>78</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>79</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>80</td><

<TRUNCATED>